微机原理-04-指令系统

#指令系统

指令格式

指 令 通 常 由 指 令 操 作 码 和 指 令 操 作 数 两 部 分 组 成

指令描述符号

  • A:表示累加器A,而ACC则表示累加器A的地址。
  • Rn(n = 0~7):当前选中的工作寄存器组中寄存器R0~R7之一。
  • Ri(i = 0, 1):当前选中的工作寄存器组中的寄存器R0或R1。
  • @:间接寻址或变址寻址前缀。
  • data:8位立即数。
  • data16:16位立即数。
  • direct:片内低128个RAM单元地址及SFR地址。
  • addr11:11位目的地址。
  • addr16:16位目的地址。
  • rel:一个字节的补码表示的地址偏移量,范围为128~+127。
  • bit:位寻址空间中可寻址位的地址。
  • (X):表示X地址单元或寄存器中的内容。
  • ((X)):以X单元或寄存器中的内容作为地址所指定单元的内容。
  • /:位操作数的取反操作前缀,表示对该数位取反,但不影响该数位的原值。
  • →:数据传送方向,表示箭尾一侧的内容送入箭头所指向的单元中去。
  • :表示数据交换。

指令格式

  • 单字节指令/:只有操作码,无操作数,操作数隐含在操作码中。

  • 双字节指令/:一个字节表示操作码,另一个字节表示立即数或存放操作数的地址。

  • 三字节指令/:第一个字节表示操作码,后两个字节表示操作数或操作数地址。

  • 注释:

    • 单指令、一般格式为
      操作助记符 [操作数] [;注释]
    • 双指令、一般格式如下所示:
      操作助记符 [目的操作数][,源操作数][;注释]

寻址方式

不同的计算机其寻址方式不尽相同,一般来说,寻址方式越多,计算机功能就越强,灵活性也越大。51系列单片机共有7种寻址方式

立即寻址

指令编码中直接给出操作数的寻址方式称为立即寻址。

在这种寻址方式中,紧跟在操作码后面的操作数称为立即数。
立即数可以是一个字节,也可以是两个字节,立即数以前缀“#” 符号来标识。
MOV A,#03H


直接寻址

直接寻址是指操作数的地址直接在指令中给出的寻址方式。

该地址对应单元中的内容就是操作数,
直接的操作数单元地址用“direct”表示。

MOV A,3CH ;(3CH)→A


寄存器寻址

操作数存放在寄存器中的寻址方式称为寄存器寻址。

对于这种寻址方式,寻址的寄存器已隐含在指令的操作码中,寄存器用符号Rn表示。

指令译码其实是译码的是操作码

假设(R1) = 0FFH,
执行指令:MOV  A,R1  ; (R1)→A
结果:(A) = 0FFH

寄存器间接寻址

寄存器间接寻址是指操作数存放在以寄存器内容为地址的单元中。

寄存器中的内容不再是操作数,而是存放操作数的地址。

寄存器间接寻址用符号“@”表示。

​ (1)内部RAM低128单元,地址范围00H~7FH,用Ri(i = 0,1)或SP作为间址寄存器。
​ (2)与P2口锁存器配合使用,用Ri指示低8位地址,可寻址片外数据存储器或I/O的64KB区域。
​ (3)DPTR间接寻址寄存器,可寻址程序存储器或片外数据存储器(包括I/O口)各自的64KB区域。

 设(R0) = 60H,
 内部RAM (60H) = 50H,
 执行指令MOV  A,@R0    ;((R0))→A
 执行结果(A) = 50H。

####变址寻址

本寻址方式以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,以两者内容相加形成的16位地址作为目的地址进行寻址。

MOVC  A,@A+DPTR
MOVC  A,@A+PC
JMP	  @A+DPTR

前两条指令称为查表指令,适用于读程序存储器中固定的数据。例如,将固定的、按一定顺序排列的表格存放在程序存储器中,在程序运行中由A的动态参量来确定读取对应的表格参数。

第3条为散转指令,A中内容为程序运行后的动态结果,可根据A中的不同内容,实现跳向不同程序入口的跳转。

设(A) = 0A4H,(DPTR) = 1234H,
程序存储区 
(12D8H) = 3FH,
则执行指令MOVC  A,@A+DPTR后,
(A) = 3FH。




相对寻址方式

相对寻址用于跳转指令。本寻址方式是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而控制程序转移到该目的地址。

  • 目的地址 = 转移指令所在的地址 + 转移指令字节数 + rel
    其中,偏移量rel是一个字节的补码表示的带符号数, 其范围是-128~+127。

  • 因此,程序转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在-128~+127单元之间。

假设指令SJMP  20H 存入2100H单元,
其机器码为80H 20H,
执行该指令后,程序将跳转到2122H单元取指令并执行


####位寻址方式

位寻址方式是指令中给出的操作数为位寻址区的位地址bit,

bit包括内部RAM的20H~2FH共16个单元的128位,以及某些 可以位寻址的特殊功能寄存器(单元地址能被8整除)的各位。

分析指令MOV  C,24H.0的执行结果。
该指令的机器码为A2H 20H,相当于MOV  C,20H,指令执行完成后Cy标志位为1


寻 址 方 式 就 是 CPU 在 指 令 中 寻 找 ( 确 定 ) 操 作 数 位 置 ( 地 址 ) 的 方 式 ( 或 寻 找 ( 确 定 )
转 移 的 目 标 地 址 的 方 式 ) 。
根 据 操 作 数 的 性 质 , 寻 址 方 式 分 为 数 据 寻 址 方 式 和 地 址 寻 址 方 式 。
根 据 操 作 数 的 位 置 , 寻 址 方 式 分 为 立 即 数 寻 址 方 式 、 寄 存 器 寻 址 方 式 、 存 储 器 寻 址 方 式 和 I/ O寻 址 方 式 。

算术运算类指令

加法指令

(1)不带进位加法指令ADD(4条)

ADD   A,Rn       	           ;(A)+(Rn)→A,n = 0~7
ADD   A,direct	 	;(A)+ (direct)→A
ADD   A,@Ri     		;(A)+((Ri))→A,i = 0,1
ADD   A,#data    		;(A)+#data→A

(2)带进位加法指令

ADDC  A,Rn         	;(A)+(Rn)+Cy→A,n = 0~7
ADDC  A,direct     	;(A)+(direct)+Cy→A
ADDC  A,@Ri       	;(A)+((Ri))+Cy→A,i = 0,1
ADDC  A,#data      ;(A)+#data+Cy→A

(3)加1指令(5条)

    INC   A
	INC   Rn        	;n = 0~7
	INC   direct   
	INC   @Ri       	;i = 0,1
	INC   DPTR

(4)十进制调整指令(1条)

     ```
    DA   A              ;调整A的内容为正确的BCD码
     ```

减法指令

减法指令包括带借位减法指令和减1指令两类

(1)带借位减法指令(4条)

SUBB  A,Rn   	; (A) - (Rn) - Cy→A,n = 0~7
SUBB  A,direct 	; (A) - (direct) - Cy→A
SUBB  A,@Ri 	; (A) - ((Ri)) - Cy→A,i = 0,1
SUBB  A,#data  	; (A) - #data - Cy→A

(2)减1指令(4条)

DEC  A	;(A) - 1→A
DEC  Rn     	;(Rn) - 1→Rn,n = 0~7
DEC  direct   	;(direct) - 1→direct
DEC  @Ri    	;((Ri)) - 1→(Ri),i = 0,1

####乘除运算指令
(1)乘法指令(1条)
MUL AB ;A×B→BA

(2)除法指令(1条)
DIV AB ;A÷B,商→A,余数→B

逻辑运算与移位指令

逻辑与指令
ANL	 A,Rn		;(A)∧(Rn)→A,n = 0~7
ANL	 A,direct		;(A)∧(direct)→A
ANL	 A,#data		;(A)∧#data→A
ANL	 A,@Ri		;(A)∧((Ri))→A,i = 0~1
ANL	 direct,A		;(direct)∧(A)→direct
ANL	 direct,#data	;(direct)∧#data→direct

逻辑或指令
ORL	 A,Rn	    	;(A)∨(Rn)→A,n = 0~7
ORL	 A,direct		;(A)∨(direct)→A
ORL	 A,#data		;(A)∨ #data→A
ORL	 A,@Ri		;(A)∨((Ri))→A,i = 0,1
ORL	 direct,A		;(direct)∨(A)→direct
ORL	 direct,#data   	;(direct)∨#data→dire

逻辑异或指令
XRL	 A,Rn       	;(A) (Rn)→A,n = 0~7
XRL	 A,direct      ;(A)  (direct)→A
XRL	 A,@Ri     	;(A)   ((Ri))→A,i = 0,1
XRL	 A,#data    	;(A)  #data→A
XRL	 direct,A    	;(direct)   (A)→direct
XRL	 direct,#data ;(direct)  #data →direct

累加器“清零”及“取反”指令

​ (1)CLR A
​ 这条指令的功能是:将累加器A清“0”,不影响Cy、Ac和OV等标志。
​ (2)CPL A
​ 这条指令的功能是:将累加器A按位取反,不影响Cy、Ac和OV等标志。

####移位指令

  • 左环移指令
    RL A

  • 带进位左环移指令
    RLC A

  • 右环移指令
    RR A

  • 带进位右环移指令
    RRC A

  • 累加器半字节交换指令
    SWAP A

###控制转移类指令

无条件转移指令

长转移指令 LJMP addr16 ;addr16 → PC

短转移指令 AJMP addr11 ;(PC)+ 2→PC,addr11→PC10~0, PC15~11不变

相对转移指令 SJMP rel ;(PC)+2→PC,(PC)+ rel→PC

间接跳转指令(散转移指令)JMP @A+DPTR ;(PC)+1→PC,(A)+(DPTR)→PC

条件转移指令

(1)累加器A判零条件转移指令
JZ   rel     	;若(A) = 0,则PC+2+rel→PC
             	;否则,PC+2→PC
JNZ  rel    	;若(A) ≠ 0,则PC+2+rel→PC
              	;否则,PC+2→PC
(2)比较条件转移指令
 CJNE  A,direct,rel   ;若(A) ≠ (direct),则PC+3+rel→PC
                      	            ;否则,PC+3→PC
CJNE  A,#data,rel   	;若(A) ≠ data,则PC+3+rel→PC
                      	            ;否则,PC+3→PC
CJNE  Rn,#data,rel  ;若(Rn) ≠ data,则PC+3+rel→ PC
                     	             ;否则,PC+3→PC
CJNE  @Ri,#data,rel ;若((Ri)) ≠ data,则PC+3+rel→PC
                      	              ;否则,PC+3→PC

(3)减1条件转移指令
DJNZ  Rn,rel     	;(Rn)-1→Rn
                 	            ;若(Rn) ≠ 0,则PC+2+rel→PC
                	            ;否则,PC+2→PC
DJNZ  direct,rel   ;(direct)-1→direct
                 	            ;若(direct) ≠ 0,则PC+3+rel→PC
                 	            ;否则,PC+3→PC

子程序调用及返回指令

 ① 长调用指令
           LCALL  addr16    	;(PC)+3→PC
                    ;(SP)+1→SP,PC7~0→(SP)
                    ;(SP)+1→SP,PC15~8→(SP)
                    ;addrl6→PC

② 绝对调用指令
        ACALL  addr11    	    ;(PC)+2→PC
                    ;(SP)+1→SP,PC7~0→(SP)
                    ;(SP)+1→SP,PC15~8→(SP)
                    ;addr11→PC10~0,PC15~11不变

RET    	;((SP))→PC15~8,(SP)-1→SP
       	;((SP))→PC7~0,(SP)-1→SP

中断返回指令



RETI   	;((SP))→PC15~8,(SP)-1→SP
      	;((SP))→PC7~0,(SP)-1→SP

###空操作指令
NOP ;(PC)+1→PC

位操作类指令

  • 位传送指令(2条)
    MOV C,bit ;(bit)→Cy
    MOV bit,C ;Cy→(bit)

  • 位置位/复位指令(4条)
    CLR C ;0→Cy
    CLR bit ;0→bit
    SETB C ;1→Cy
    SETB bit ;1→bit

  • 位运算指令

​ ANL C,bit ;(Cy) ∧ (bit) → Cy
​ ANL C,/bit ;(Cy) ∧
​ ORL C,bit ;(Cy) ∨ (bit) → Cy
​ ORL C,/bit ;(Cy) ∨

  • 位条件转移指令

    JC rel ;若Cy = 1,则(PC)+2+re→PC
    ;否则,(PC)+2→PC
    JNC rel ;若Cy = 0,则(PC)+2+re→PC
    ;否则,(PC)+2→PC
    JB bit,rel ;若(bit) = l,则(PC)+3+re→PC
    ;否则,(PC)+3→PC
    JNB bit,rel ;若(bit) = 0,则(PC)+3+re→PC
    ;否则,(PC)+3→PC
    JBC bit,rel ;若(bit) = 1,则(PC)+3+re→PC,0→bit
    ;否则,(PC)+3→PC

发布了225 篇原创文章 · 获赞 140 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/jankin6/article/details/105402724