单片机的汇编语言伪指令(51单片机汇编语言伪指令)

海潮机械 2022-12-17 12:13 编辑:admin 295阅读

1. 51单片机汇编语言伪指令

DW是51单片机汇编语言伪指令,意为Define word,其功能是ROM空间内定义一个或一组16位(双字节)常数。

DW有两种用法,示例如下:

ORG 1720H

DW 007FH

这个例子的功能就是在ROM的1720H单元放置00H,1721H里放置7FH。

ORG 1720H

DW 007FH,0180H,……

这个例子的功能就是从1720H开始,逐次向后续地址放置常量00H、7FH、01H、80H……

如果Dw指令之前没有ORG指令,那么,常数的存放地址就从当前程序段的结束地址开始。

2. 51单片机 汇编语言

直接用mov命令操作即可。比如要在寄存器R0中写入二进制的10101010数值。用如下语句。MOV R0, #10101010B

3. 51单片机的伪指令

这是51单片机的一条汇编语言指令,其中J 代表"跳转JUMP",N代表 "非NO",B代表"位BIT";

合起来后该语句意思是:如果某一位或某个管脚的值不是1则程序跳转,是1则顺序执行;

通用写法是:JNB bit,relbit是位变量,rel是跳转时的相对偏移量

如:JNB P1.0,20H

执行过程如下:如果管脚P1.0是低电平,则跳转到本语句后32+3步之后的位置去执行,3是该语句所占的字节数,20H即10进制的32是偏移量,如果管脚P1.0是高电平,则按顺序执行本语句后的指令;与其类似的语句有:JB bit,rel JNZ rel .

4. 51单片机汇编代码

第一步:连接编程器,打开编程器电源,在编程器的计算机端软件环境中,将器件选择MCU类型,型号列表中如果有STC89C51RC,那最好,如果没有,只好建议选择ATMEL 89C51试一试,设置好后,将单片机芯片按照编程器的摆放要求(一般在编程器表面有芯片的摆放示意图),插入到管脚插中,压上管脚扣,利用软件读出器件内的程序代码(二进制),保存成HEX格式的文件。

第二步:在仿真器的计算机端软件中,利用反汇编功能,打开刚才保存的HEX格式文件,如果单片机内的程序在编译时设置了允许注释,那么,您可以很快得到原程序代码(汇编语句),如果没有注释,那只好根据反汇编的出来的语句(汇编代码),去查询指令代码表,人工翻译出来,对一些跳转地址,可以自己定义成特定的标号。

说明:一般来说,根据对方的硬件电路图,产品的使用说明书,即可分析出软件功能,与其去破译或反译芯片内的程序,还不与自己再编一个。

5. 51单片机汇编语言指令大全

51单片机 汇编 指令CLR:CLR A  // 累加器A 被赋零值,此时为逻辑运算指令。CLR C  //程序状态寄存器PSW中的CY位状态清零,此时为位操作指令。

6. 80c51单片机的汇编语言伪指令有哪几条

汇编语言中的伪操作命令

DB作为汇编语言中的伪操作命令,它用来定义操作数占用的字节数。

作用

在这里B是byte的缩写,即字节,所以,该伪操作所定义的每个操作数占有1个字节(8位)。

如:

此时,字符串“HELLO”中每个字符会占用1个字节,51单片机中,用于定义字节的内容。DB指令以表达式的值的字节形式初始化代码空间。

7. 51单片机汇编语言指令集

汇编语法比C简单,至于难不难学,要看具体的指令集和寄存器数量,汇编是针对特定的CPU的,没有移植性。8位机寄存器少,用汇编比C复杂不了多少,只是比较难维护,比如一年以后想改个功能什么的就要吐血。32位机就别试了,用汇编的话,光寄存器和datasheet就得研究几个月,而且32位机都有C编译器,完全没必要用汇编,除非有自孽倾向。

8. 51单片机汇编语言教程pdf

MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP操作的指令。51单片机中SP是堆栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的操作都是隐式的,就是说SP并不出现在指令操作数当中。例如: MOV SP,#80H ;初始堆栈指针,(SP)=80HLCALL XXXX;调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2NOP;子程序返回时,RET指令从堆栈中弹出PC值,所以会返回到这里,(SP)=(SP)-2PUSH ACC;累加器A的内容压栈保存,(SP)=(SP)+1POP B;堆栈内保存的累加器A的内容弹出到B寄存器中,(SP)=(SP)-1使用PUSH、POP指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。

9. 51单片机反汇编

可以在SJMP $这里改成判断R2是不是为0,如是就重新载入60…如果不是就跳回重新判断R2