找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2446|回复: 17
收起左侧

如何学习汇编语言?以前学的都是C语言的,这次学的基本都不认识,什么mov,jnb ajmp

  [复制链接]
ID:711279 发表于 2020-3-19 00:20 | 显示全部楼层 |阅读模式
就像图片里我只认识loop,main,老师讲的不详细,我很烦躁。我想认真学习这种语言,前辈们告诉我一些资源就可以,我自己学能学明白那种。谢谢各位大佬!  就是下面这种语言,属于什么类型?我想找资源该去哪里查阅学习,真的谢谢了,翻了一天课本几乎一无所获。  AJMP MAIN          ORG 0040H
MAIN: MOV P1,#0FFH
;       CLR R1
         MOV A,#0FH
         MOV P1,A
         ACALL DELAY50
KEYSC:  MOV  A,P1
         ANL  A,#00001111B
         SWAP  A;高低4位互换
         MOV P1,A
         ACALL DELAY50
         ACALL DELAY50
         ACALL DELAY50
         AJMP KEYSC         
        ORG 0200H
DELAY50:   MOV R7,200
D1:               MOV R6,123
                    NOP
D2:                DJNZ R6,D2
D3:                DJNZ R7,D1
                      RET
                      END              
           

chenxgu.JPG
yuanlitu.JPG
回复

使用道具 举报

ID:235200 发表于 2020-3-19 01:14 | 显示全部楼层
汇编语言就是要熟悉书后面的111长指令
         ORG  0000H              ;存放起始地址
         AJMP MAIN               ;短转移到MAIN
         ORG 0040H              ;下面程序从0040存放
MAIN: MOV P1,#0FFH        ;使P1口输出高电平(可不要)
;       CLR R1                    ;这指令是错误的,没有这种用法
         MOV A,#0FH          ;数据0F存A寄存器
         MOV P1,A             ;数据0F从P1口输出
         ACALL DELAY50    ;调用延时程序
KEYSC:  MOV  A,P1        ;读P1口按键状态
         ANL  A,#00001111B    ;保留低4位
         SWAP  A;高低4位互换  ;反转
         MOV P1,A                  ;由P1口输出
         ACALL DELAY50        ;调用延时
         ACALL DELAY50
         ACALL DELAY50
         AJMP KEYSC             ;转移到扫描(此程序按键扫描未判断,无法得到按键值)
        ORG 0200H              ;下面程序存地址200H
DELAY50:   MOV R7,200        ;错误命令,数据200前未加#
D1:               MOV R6,123    ;错误命令,数据123前未加#
                    NOP
D2:                DJNZ R6,D2   ;判断R6不为0,转移到D2
D3:                DJNZ R7,D1   ;判断R7不为0,转移到D1
                      RET             ;子程序的返回
                      END
回复

使用道具 举报

ID:401564 发表于 2020-3-19 08:32 | 显示全部楼层
汇编很神奇:不会的人要学,会的人不想学
汇编是基于硬件的,除了伪指令,每一条指令最少也必定有一个针对硬件的结果
汇编是低级语言,从低级语言往高级语言学是相对比较容易的,我学了汇编,就觉得C没有那么难,但汇编已经用习惯了,思想还是没有那么快转变过来而已
但要是学会了C,再来学汇编就有点难了
汇编就是把C细分化,C一个语句,汇编可能要几条或者上百条指令来完成你要做的是把8051汇编指令的含义全部记住,理论上有255条指令,还有一条是预留的,不知道是要来干嘛的
但实际上,8051的汇编指令也是不到30条:MOV R7,200和MOV P1,#0FFH虽说是两种不同的操作,但实际上是一样的:都是MOV指令,MOV指令就是把逗号右边的东西转移到逗号左边去,这个东西有可能是地址,数据,标志位
所以,你现在要做的:
1:充分的去了解8051的硬件
2:记住8051的汇编代码含义
3:有一块学习板,写了代码一定要烧录验证,仿真没有意义,有的人说仿真都不行那实际更不行,的确是这样,但仿真就是仿真,你有可能要花太多时间在解决一个仿真问题上,然而这个问题并不一定存在,到了实际中,你还得花时间.最主要的是:下载烧录要比仿真快,几秒钟就可以了
回复

使用道具 举报

ID:299519 发表于 2020-3-19 08:59 | 显示全部楼层
12年前就汇编转C了..
回复

使用道具 举报

ID:711279 发表于 2020-3-19 16:48 | 显示全部楼层
csmyldl 发表于 2020-3-19 01:14
汇编语言就是要熟悉书后面的111长指令
         ORG  0000H              ;存放起始地址
         AJMP M ...

谢谢大佬回复,解释的很详细,我想更细致深入的学习,书后也没有111长指令,只有这些[img[/
51hei图片20200319165047.jpg
51hei图片20200319165101.jpg
回复

使用道具 举报

ID:711279 发表于 2020-3-19 16:48 | 显示全部楼层
csmyldl 发表于 2020-3-19 01:14
汇编语言就是要熟悉书后面的111长指令
         ORG  0000H              ;存放起始地址
         AJMP M ...

该看一些什么资料呢
回复

使用道具 举报

ID:711279 发表于 2020-3-19 16:50 | 显示全部楼层
Y_G_G 发表于 2020-3-19 08:32
汇编很神奇:不会的人要学,会的人不想学
汇编是基于硬件的,除了伪指令,每一条指令最少也必定有一个针对硬件 ...

你说的1.2我可以做到,谢谢,很实在的回复
回复

使用道具 举报

ID:711279 发表于 2020-3-19 17:01 | 显示全部楼层
csmyldl 发表于 2020-3-19 01:14
汇编语言就是要熟悉书后面的111长指令
         ORG  0000H              ;存放起始地址
         AJMP M ...

AJMP KEYSC             ;转移到扫描(此程序按键扫描未判断,无法得到按键值)
如果我想扫描按键的话,例如MOV C,P1.1;MOVP1.5,C;控制开关可以吧
回复

使用道具 举报

ID:712028 发表于 2020-3-20 09:52 | 显示全部楼层
可以在网上买一些相应的书籍来看,或者找找视频也可以的
回复

使用道具 举报

ID:416262 发表于 2020-3-20 11:49 | 显示全部楼层
我也在学。。。的确感觉很难受,要抛开c语言的思维,回到古代的思维去写代码
回复

使用道具 举报

ID:389856 发表于 2020-3-20 16:21 | 显示全部楼层
可以看一下单片机原理,微机原理
回复

使用道具 举报

ID:712352 发表于 2020-3-20 16:55 | 显示全部楼层
汇编语言虽然直接作用于单片机但是复杂难懂,还是建议c语言
回复

使用道具 举报

ID:235200 发表于 2020-3-20 22:32 | 显示全部楼层
机油味 发表于 2020-3-19 16:48
该看一些什么资料呢

你上面拍的照就是111条指令,汇编程序就是要熟悉这111条指令,还要知道执行时间
回复

使用道具 举报

ID:712628 发表于 2020-3-21 00:09 | 显示全部楼层
去看看汇编语言,把基本指令记住就可以了
回复

使用道具 举报

ID:401564 发表于 2020-3-21 09:27 | 显示全部楼层
难道我看了假的书了,我看的书都说8051有255条指令的呀,为什么只有111条了? 51hei截图20200321085711.jpg
对着你的书,你就看前面两项就可以了,不要看后面的,
字节数:没意义,除非你的单片机只有几十个字节的程序存储器,或者你的代码从来不用标号,不然的话,去记住这指令占用的字节数,纯粹就是浪费时间
执行时间:没意义,不要看,用的时候看指令表来对就可以了,现在用的都是STC的8051单片机了,STC系列和传统的8051在指令的执行时间上完全不一样的,记了也是浪费时间
机器代码:不用管了,这玩意给谁看都不会,除非是大神

8051常用的汇编指令不会超过30条,其实是很好记的,你不要想着完全记好指令了再去写代码,自己对着STC的数据手册,再看看书,从延时到流水灯,定时器,一步一步的,一个一个小程序的写,最好不要超过100行代码,慢慢的你就会了
基本上是一边学习一边写代码,还要随时查阅数据手册的,如果不是PDF而是书本的话,我估计可能已经翻烂了
如果你还在用AT8051的话,扔了吧,那没有用的

还要多看一下伪指令,这会经常用到,用好了会让你轻松很多的,像BIT  ORG  EQU  DATA都是常用的,
如果你按键在P1.0,到处都用P1.0,打字都难打,S1  BIT P1.0    然后,就一直以S1来代替P1.0了
回复

使用道具 举报

ID:691449 发表于 2020-3-23 12:35 | 显示全部楼层
你的指令表已经差不多够用了。
回复

使用道具 举报

ID:711279 发表于 2020-5-11 00:13 | 显示全部楼层
青海长云 发表于 2020-3-20 11:49
我也在学。。。的确感觉很难受,要抛开c语言的思维,回到古代的思维去写代码

好难受,哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表