汇编语言复习详细版(二)逻辑指令、串处理指令、子程序调用与中断

第三章后部分:

1、逻辑指令:逻辑运算指令(AND、OR、NOT、XOR、TEST)+移位指令(SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR) 

(a)逻辑运算指令

注意:TEST指令的相与结果不保存,只设置标志位;

          NOT指令的OPR不能为立即数,不影响标志位

          除NOT以外的对标志位的影响:

          

(b)移位指令

OPR用除立即数外的任何寻址方式。循环次数由CNT决定。对于8086,CNT>1时,将循环次数放入CL中

算术逻辑指令适用于带符号数运算,SAL表示乘2,SAR表示除以2

逻辑移位指令用于无符号运算,SHL用来乘以2,SHR用来除以2

例题:

2、串处理指令

MOVS串传送指令、

CLD(clear direction flag):该指令使DF=0,在执行串处理指令时可使地址自动增量。

STD(set direction flag):该指令使DF=1,在执行串处理指令时可使地址自动减量。

注意:

LODS指令一般不与REP联用

源串一般在数据段中(允许使用段跨越前缀来修改)

目的串必须在附加段中

不影响条件标志位

REPE / REPZREPNE / REPNZ)配合工作的

CMPS 和 SCAS

REPE/REPZ:相等/为0则重复

REPNE/REPNZ:不相等/不为零则重复

过程:(1) (CX)=0 ZF=0 (ZF=1) 则退出串操作,

                 否则转(2)

  1.   (CX)←(CX) -1
  2. 执行 CMPS / SCAS
  3. 重复 (1) ~ (3)

SCAS指令把AL、AX、EAX内的内容与DI中内容比较,不保存结果,而是根据结果设置相应条件码

3、控制转移指令:无条件转移指令(JMP)、条件转移指令(JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ)、循环指令(LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE)、子程序调用和返回指令(CALL、RET)、中断与中断返回指令(INT、INTO、IRET)

条件转移指令:

注意:只能使用段内直接寻址的8位位移量

PS:(JB:Jump if below;JA:Jump if above)

循环指令:

注意:CX中存放循环次数

          只能使用段内直接寻址的8位位移量

4、子程序调用和返回指令(注意堆栈段的变化)

带立即数返回的 RET n

立即数n通常是正偶数。如果汇编格式指令中的n或表达式计算出的值是奇数,汇编时会自动变成n+1。

执行的操作:IP←(SP+1)(SP)
           SP←SP+2
           SP←SP+n

示意图:

5、中断指令:

INT指令可以指定0---0FFH中任何类型号。

中断向量表:

注意:

INT 隐含的类型号为3

INT指令把IF和TF(单步中断位)置0,但不影响其他标志位

IRET指令执行完,标志位由从堆栈中取出的值确定。

中断向量的设置

把由AL指定的中断类型的中断向量DS:DX放在中断向量表中。

预设:AH=25H;AL=中断类型号;DS:DX=中断向量

执行:INT 21H

取中断向量

把AL指定的中断类型的中断向量从中断向量表中取到ES:BX中

预设:AH=35H;AL=中断类型号

执行:INT 21H

返回时送:ES:BX=中断向量

中断过程:

(1)取中断类型号N;

(2)标志寄存器(FLAGS)内容入栈;

(3)当前代码段寄存器(CS)内容入栈;

(4)当前指令计数器(IP)内容入栈;

(5)禁止硬件中断和单步中断(IF=0,TF=0)

(6)从中断向量表中取4*N的字内容送IP,4*N+2的字内容送CS;

(7)转中断处理程序

例题:使用DOS功能调用存取中断向量

MOV AL,N      ;type N interrupt

MOV AH,35H   ;get interrput vector

INT 21H

PUSH ES        ;save old base and offset of interrput N

PUSH BX

PUSH DS

MOV AX,SEG INTHAND

MOV DS,AX   ;base of INTHAND in DS

MOV DX,OFFSET INTHAND   ;offset in DX

MOV AL,N

MOV AH,25H

INT 21H

POP.......

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值