汇编指令

MOV 20H,#00H   ;初始化地址20H的数据

MOV A,,20H;初始化地址累加器

ANL A,#0FH;屏蔽地址累加器的高4位

 MOVX @DPTR,A 这是一条单片机的指令~单片机有片内和片外存储器,向片外存储器传送数据时要先把地址给DPTR,然后用MOVX指令把累加器A的内容传送给@DPTR.值得注意的是要传送的内容必须放在A中

EQU,顾名思义,就是等于的意思,例如:

MY_AGE  EQU  26


意思就是说,“MY_AGE”就代表26,以后可以在程序中使用这个名字。
MOV A, MY_AGE ; A=26.
PC 是程序指针,指当前程序运行到哪里啦,指向代码区
sp 代表堆栈指针,用来指向当前堆栈顶
DPTR是80C51中一个功能比较特殊的寄存器。从结构DPTR是一个16位的特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。主要功能是存放16位地址,作为片外RAM寻址用的地址寄存器间接寻址),故称数据指针
MOVC A,@A+PC是读取地址为A+PC的存储单元里面的内容
MOVC A,@A+DPTR是读取地址为A+DPTR存储单元的内容
PC和DPTR的内容不同时,就有区别啦
还有DPTR可以用指令直接改变其中的值
DA 二-十进制调整指令
 CJNE A , #0AH , DONE   ;若A等于10 向下执行 否则跳转
JB 状态为1时发生转移,
JNB 状态为0时候转移
CLR 将目标值清零
djnz     value,CHECK_MKEYx表示的意思是 value自动减去1然后在判断是否为0如果为0则向下执行,如果不为0则跳转
99h=10011001(二进制
+
76h=01110110
---------------
00001111
至此,cy=1,acc=0fh.(就上面加法后,最高位进位到cy位了,00001111就是0fh,
执行DAA (加法调整)
ACC=0fh+6=15H
MOV 20H,A 是把ACC中的值放入20H单元中,不影响CY和ACC值了。
所以CY=1;ACC=15H
51汇编中SUBB 大减小是 cy为0。如下
SUBB     A,INC_IR_VALUE 如果A大于INC_IR_VALUE则进位标志位为0
jnc是进位位为0则转移!而两个数的比较就是想减,例如X-Y,X小于Y,X就要借位,这样进位位就为1,如果X大于Y,X就不需要借位,这样进位位为0
XCH      A,B              ; 数据交换指令     A   与   B   内的数据交换
swap
半字交换,即一个字节的高4位和低4位互换

JNZ 用于判断是否相等 DO: ADD AX,
         INC SI
   
INC SI
   
DEC CX
   
JNZ DO
Z可以理解为ZF,JNZ就是ZF不为1时跳转,你这个程序这儿是CX不等于零时跳转,CX不为零,则零标志ZF就为0,只有CX为0时ZF才为1,不跳转
ZX每次运算后都会变化,你的程序中的JNZ代表上一次运算(DEC CX)的结果

运算结果为0时ZF=1,不为零是ZF=0;
orl 或指令
cpl 将数据取反
anl  逻辑与,将两个数按位进行与运算
RL是左移指令,参加左移的是8个位 
RLC是带进位位的左移,参加左移的共有9个位
设A=01000001,C=1;
则如果执行RL ,则A=10000010,C=1(A所有位左移一位,最低位补零,C不参加移位操作,保持原值不变)

如果执行RLC后,则A=10000011,C=0(A的最高位移到C,C原值移到A最低位)
dec
相当于c语言中的自减。如:dec R0就是说R0=R0-1。如果R0=5,那么运算过后,R0=4

你可能感兴趣的:(汇编)