微型计算机技术及应用

2.微处理器的指令系统

​ 1.传送指令

​ 1)通用传送指令MOV

​ 两个操作数位数相同的传送指令MOV,它可实现CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送,还可以把一个立即数送给内部寄存器或内存单元。

eg: MOV AL,BL

​ MOV AX,[BX] BX和BX+1所指的两个内存单元的内容送到AX

​ MOV CX,[1000] 将1000和1001两单元的内容送CX

​ MOV DX,5040H 立即数5040H送DX

注意:

1.通用传送指令可传送8位、16位或32位数据,具体取决于指令中涉及的寄存器是多少位,也取决于立即数的形式

2.不能在两个内存单元之间直接传送数据

3.不能从一个段寄存器向另一个段寄存器传送数据

4.在通用传送指令中,寄存器既可以作为源操作数,也可以作为目的操作数,但CS/IP/EIP寄存器不能作为目的操作数,这些寄存器的值不能随意修改

5.用EBX,ESI,EDI,BX,SI,DI来间接寻址时,默认的段寄存器为DS,而用EBP,ESP,BP,SP来间接寻址时,默认的段寄存器为SS

6.所有的通用传送指令都不改变标志

​ 2)普通堆栈操作指令PUSH/POP:按照“后进先出,先进后出”的规则存取数据

PUSH指令把一个2字节或4字节的数据推入堆栈,操作数既可以为立即数,也可为寄存器和存储器中的数

eg: PUSH BX;将BX的内容推入堆栈,堆栈指针减2

​ PUSH [BX+DI];将BX+DI和BX+DI+1所指两单元的内容推入堆栈

​ PUSH 0870H;将立即数0870H推入堆栈,栈顶单元为70H

同样还有一系列的弹出指令POP

eg: POP BX;将栈顶两单元弹出送BX,栈顶地址加2

注意:1.没有PUSH AH、PUSH BL这样的字节操作指令

2.CS寄存器的值可推入堆栈,但反过来,不能从堆栈中弹出1个值到CS寄存器

​ 3)输入、输出指令IN/OUT

对输入、输出端口的寻址有两种方式:直接寻址和利用DX寄存器的间接寻址

1.直接的I/O指令,这些指令中直接提供了I/O端口号

eg:IN AL,50H 将50H端口的字节读入AL

​ IN AX,70H

​ OUT 80H,AX 将AX中的内容输出到80H、81H端口

2.间接的I/O指令,间接I/O指令执行前,,必须在DX寄存器中设置好端口号

eg: IN AL,DX

​ IN AX,DX

​ OUT DX,AX

注意:1.FFH是直接I/O寻址中使用最大的端口号,端口号大于255时,只能用间接的I/O指令

2.用间接指令I/O指令时,只能用DX寄存器

3.直接寻址时地址码不加【】

​ 2.算术运算指令

1.加法类寄存器

1)ADD不带进位位的加法指令

eg:ADD CX,1000H;CX中的内容和1000H相加,结果放在CX中

​ ADD DI,SI;DI和SI的内容相加,结果放在DI中

​ ADD指令影响OF,SF,ZF,AF,PF和CF标志

2)ADC带进位位的加法指令,将进位标志CF的值加在和中

eg: ADC AX,SI;AX和SI中的内容以及CF的值相加,结果放在AX中

​ ADC DX,[SI];SI和SI+1所指单元的内容和DX的内容以及CF的值相加,结果放在DX中

​ ADC BX,3000H;BX中内容和立即数3000H以及CF的值相加,结果放在BX中

ADC指令影响OF,SF,ZF,AF,PF和CF标志

3)增量指令INC

INC指令只有一个操作数,指令在执行时,将操作数的内容加1.这条指令一般用在循环程序中修改指针和循环次数

eg:INC CH;

INC影响标志位AF,OF,PF,SF和ZF;特别注意INC指令不影响进位标志CF。

2.减法类指令

1)SUB不考虑借位的减法指令,完成2个数的相减

eg:SUB BX,CX;将BX中字减去CX中的字,结果放在BX中

​ SUB SI,5010H;SI中的数减去5010H,结果放在SI中

SUB指令影响标志位OF,SF,ZF,AF,PF,和CF

2)SBB考虑借位的减法指令,在执行减法运算时,还要减去CF的值,SBB主要用在多字节减法运算中,当分布进行减法运算时。

eg:SBB AX,2530H;将AX的内容减去2530H,并减去进位位CF的值

SBB指令影响标志位OF,SF,ZF,AF,PF,和CF

3)减量指令DEC,只有一个操作数,执行时,将操作数的值减1,此指令常用在循环中对计数器进行修改,而不会对循环中的算术运算产生的状态产生干扰

eg:DEC AX;将AX的内容减1,结果再送回AX;

DEC指令影响标志位OF,SF,ZF,AF,PF

4)比较指令CMP,执行两个数的相减操作,但不返回相减的结果,只使结果影响标志位

eg:CMP AX,2000H;将AX的内容和2000H相比较,结果影响标志位

判断结果:ZF=1,两个相比较的操作数相等

如果OF和SF的值相同(均为1或0),则被减数大;若不同,则被减数小。

逻辑运算和移位指令

逻辑运算指令AND/OR/NOT分别执行与、或、非,他们都是双操作数指令

TEST指令不仅执行AND指令的操作,而且把OF和CF标志清0,修改SF,ZF,PF标志。TEST指令比送回操作结果,仅仅影响标志位(执行与运算,返回ZF=1/0)

注:常常用AND指令对指定位清0;用OR指令来对一些指定位设置1

移位指令

​ 非循环移位指令 SAL算术左移指令、SAR算术右移指令、逻辑左移指令SHL和逻辑右移指令SHR

所有的移位指令执行时都会影响标志位CF,OF,PF,SF和ZF。

​ 循环位移指令 ROL不带进位位的循环左移指令、ROR不带进位位的循环右移指令、RCL带进位位的循环左移指令、带进位位的循环右移指令RCR

子程序调用和返回指令

ABC:…………

​ …………

​ RET

调用 CALL ABC

无条件转移指令JMP

JMP ABC->标号

条件转移指令

JE/JNE 结果相等/不等,则转移

JZ/JNZ 结果为0/不为0,则转移

循环控制指令

计数循环指令LOOP:执行LOOP指令时,先将CX内容减1,再判断CX中是否为0,如果不为0,则继续循环,如为0,则退出循环,执行下一条指令。在LOOP指令前,一定要对CX寄存器设置初值

中断指令INT和中断返回指令IRET

RET CS、IP

IRET CS、IP、标志寄存器

任何中断处理程序都以IRET作为最后一条指令

标志操作指令

进位标志处理指令:

1.STC使进位标志CF置1

2.CLC使进位标志CF清0

方向标志设置和清除指令

1.STD使DF为1,字符地址进行减量修改;

2.CLD使DF为0,字符地址进行增量修改

中断允许标志设置和清除指令STI/CLI

中断允许标志IF是1还是0决定了系统是否可响应外部可屏蔽中断

STI指令使IF置1,即开放中断(开)

CLI指令使IF清0,屏蔽外部中断(关)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值