汇编指令(89C51/S51)

目录

寻址指令

数据传输指令

算数运算指令

逻辑操作指令

控制转移类指令

位操作(布尔处理)类指令

位条件转移类指令

 伪指令



89C51汇编语言指令由操作码助记符和操作数字段组成

格式:

        [标记]:操作码     [目的操作数][,源操作数]  [;注释]

寻址指令

1,寄存器寻址 (R0~R7,A(累加器),B,DPTR(数据指针,16位特殊功能寄存器))

MOV A,R0      ;(将r0寄存器中内容送入A中)

2,直接寻址(操作数为RAM片内单元地址)

MOV A,40H    ;(将RAM40H单元的内容,直接送入A中)

3,立即数寻址(#加一个数)

MOV A,#40H        ;(将40H这个数本身送入A中)

4,寄存器间接寻址(操作数的地址存在寄存器中)

MOV A,@R0        ;(在R0寄存器中找到存放操作数的地址,再根据地址找到操作数放入A中)
MOVX A,@DPTR     ;(片外RAM)

5,变址寻址(基址寄存器+变址寄存器间接寻址)

MOVC A,@A+DPTR    ;(将A+DPTR的值给A)

6,相对寻址(只出现在相对转移指令中,目的地址=源地址+2+rel

例:
JC rel    ;当源地址为1000H,rel=75H,则转移的目标地址为1077H

7,位寻址(只有片内RAM 20H~2FH内和能被8整除的寄存器可寻址)

CLR bit     ;用bit表示位地址

数据传输指令

1,以累加器A为目的操作数的指令

MOV A,Rn        (Rn)->A
MOV A,direct    (direct)->A
MOV A,@Ri       ((Ri))->A
MOV A,#data      #data->A

2,以寄存器Rn为目的地的操作数指令

MOV Rn,A         (A)->Rn
MOV Rn,direct    (direct)->Rn
MOV Rn,#data      #data->Rn

3,以直接地址为目的操作数的指令

MOV  direct,A        ;(A)->direct
MOV  direct,Rn       ;(Rn)->direct
MOV  direct,direct   ;(源direct)->direct
MOV  direct,@Ri      ;((Ri))->direct
MOV  direct,#data    ;#data->direct

4,以间接地址为目的操作数的指令

MOV @Ri,A        ;(A)->(Ri)
MOV @Ri,direct   ;(direct)->(Ri)
MOV @Ri,A        ;data->(Ri)

5,16为数据传送指令

MOV DPTR,#data16    ;dataH->DPL,dataL

6,查表指令

MOVC A,@A+DPTR ;先(PC)+1->PC,后((A)+(DPTR))->A ,一字节(远程)
MOVC A,@A+PC    ; 先(PC)+1->pc,后((A)+(PC))->A,一字节(近程)

7,累加器A与片外RAM传送指令

MOVX A,@Ri        ;((Ri))->A
MOVX A,@DPTR        ;((DPTR))->A
MOVX @Ri,A        ;A->(Ri)
MOVX @DPTR,A        ;A->(DPTR)

8,入栈PUSH,出栈操作POP

PUSH direct    ;入栈先sp+1->sp,后(direct)->(sp)
POP direct    ;先((SP))->direct,后(SP)-1->(SP)

9,交换指令

XCH    A,Rn    ;将A中内容与Rn中交换
XCHD   A,@Ri   ;将A与Rn中的,低四位交换 

算数运算指令

1,加法指令

ADD A,Rn    ;将A与Rn相加放入A
ADDC A,Rn   ;将A与Rn相加放入A,进位标志CY也加到累加器

2,带借位减法指令

SUBB A,Rn    ;将A减Rn中数再减CY中给A

3,乘法指令

MUL AB    ;(A)*(B)低字节放A,高字节放B

4,除法指令

DIV AB    ;(A)/(B)商放A,余数放B

5,自增自减指令

INC A    ;(A)+1->A
DEC A    ;(A)-1->A

6,十进制调整指令

DA A    ;调整累加器A中的内容为BCD码

逻辑操作指令

1,累加器A清零操作

CLR A    ;A->0

2,位重置1的操作

SETB C    ;1->C 将C内电位置1

3,累加器取反

CPL A    ;A电位取反

4,移位指令

RL A ;累加器A循环左移指令
RR A ;累加器A循环右移指令
RLC A ;累加器A带进位循环左移指令
RRC A ;累加器A带进位循环右移指令

5,累加器半字节交换指令

SWAP A  ;高低字节交换

6,逻辑与,或,异或指令

ANL A,Rn    ;(A)交(Rn)->A
ORL A,Rn    ;(A)并(direct)->A
XRL A,Rn    ;(A)异或(Rn)->A

控制转移类指令

1,短转移指令(运行到这时,可在2KB范围内无条件转移到由a10~a0所指的地址单元去)

AJMP addr11    ;先(pc)+2->pc,addr11->PC10~0

2,长转移指令(将指令的第2,3字节地址码装入pc高,低,8位,程序无条件去执行)

LJMP    addr16    ;addr16->PC

3,相对转移指令

SJMP rel    ;先PC+2->pc,后pc+rel->pc
SJMP $    ;无执行

4,间接转移指令

JMP @A+DPTR    ;操作A+DPTR->PC

5,空指令(一般用来产生机器周期的延时)

NOP    ;(PC)+1->PC

6,判零转移指令

JX rel    ;pc+2->pc,A中全零,PC=PC+rel;不全零时,程序顺序执行
JXZ rel    ;pc+2->pc,A中全零,PPC+rel->PC;不全零时,程序顺序执行

7,比较转移指令

CJNE(目的字节),(源字节),rel    ;PC+3->PC,然后判断若 源字节<目的字节 pc+rel->pc ,0->CY(进位)
                              ;                 若 源字节>目的字节 pc+rel->pc ,1->CY(进位)   
                              ;                 若 源字节=目的字节 顺序执行,0->CY(进位)

8,循环转移指令

DJNZ Rn,rel     ;(PC)+2->PC,(Rn)-1->Rn;
                 ;当Rn=0时,结束循环,程序顺序执行,Rn!=0,(PC)+rel->PC

DJNZ direct,rel  ;(PC)+3->PC,(direct)-1->direct;
                  ;当(direct)=0时,结束循环,程序顺序执行,direct!=0,(PC)+rel->PC

9,调用和返回指令

ACALL addr11    ;短调用指令
LCALL addr16    ;长调用指令
RET    ;子程序返回主程序
RETI   ;子程序返回主程序,开放中断逻辑

位操作(布尔处理)类指令

89C51中有个位处理机,有一套处理位变量的指令。此处解释位条件转移类指令,其余指令和常规操作类似。

位条件转移类指令

1,判断布尔累加器C转移指令

JC rel   ;先进行(PC)+2->PC
         ;若(C)=1,则 (PC)+rel->PC
         ;若(C)=0,则顺序往下执行。

JNC rel  ;PC+2->PC
         ;若(C)=0,则(PC)+rel->PC
         ;若(C)=1,则顺序往下执行。

2,判断变量转移指令

JB bit,rel    ;(PC)+3->PC
              ;若(bit)=1,则(PC)+rel->PC
              ;若(bit)=0,则顺序执行。

JNB bit,rel   ;(PC)+3->PC
              ;若(bit)=0,则(PC)+rel->PC
              ;若(bit)=1,则顺序执行。
    

3,判断变量并清零转移指令

JBC bit,rel     ;pc+3->pc
                ;若(bit)=1,则(pc)+rel->pc,0->bit
                ;若(bit)=1,则顺序执行。

 伪指令

1,ORG汇编起始命令

ORG 2000H        ;规定汇编后第一条指令存放的地址(此处为2000)

2,END汇编结束命令

END        ;汇编结束指令,之后的所有指令不执行

3,EQU赋值命令

AA EQU R1    ;将R1中的值赋值给AA

4,DATA数据地址赋值命令

AA DATA #0FFH  ;DATA与EQU相似可以先使用后定义,常用于定义数据地址。

5,DB定义字节命令

DB 0A3H  ;保留一字节或者字节串的储存单元并存入DB后面的数据

6,DW 定义字命令

DW 7234H,8AH,10H    ;命令DW后的16位数据项从当前地址连续存放  

7,DS 定义存储空间命令

DS 08H     ;DS之后的表达式值所规定的存储单元

8,BIT位地址符号命令

A1 BIT P1.O    ; 把BIT之后的位地址值赋给字符名

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值