汇编语言指令2.docx
《汇编语言指令2.docx》由会员分享,可在线阅读,更多相关《汇编语言指令2.docx(12页珍藏版)》请在冰豆网上搜索。
汇编语言指令2
1.逻辑运算指令
2.移位指令
移位规则
▲左移:
高位←低位
右移:
高位→低位
▲移出位进入CF标志
▲对移位指令,移出CF标志后丢失
▲逻辑左移、算术左移的结果相同
▲逻辑右移,新移入的信息以0填入
算术右移,保持最高有效位原来的值(符号为不变)
3.循环移位指令
移位规则
▲左移:
高位←低位
右移:
高位→低位
▲移出位进入CF标志
▲对循环移位指令,改变各位的位置,信息不丢失
▲带进位循环移位,CF标志参加循环移位
注意事项:
SHLAL,1
SHRAL,CL
ROLBX,1
RCRAL,CL
源操作数为移位的次数
目的操作数类型决定操作类型
对标志位的影响
▲移位指令:
①据结果设置CF、SF、ZF、PF,对AF无定义
②OF只在移位次数为1时有效,其他无定义
移位后,最高有效位发生变化,则OF=1,否则为0
▲对循环移位指令:
①据移位结果设置CF,对其他标志无影响
②OF标志与移位指令同
控制转移指令
1)无条件转移指令JMP
格式 JMP目标地址
执行操作 无条件转移到目标地址处
2)条件转移指令
格式 Jcc符号地址
测试条件的助记符
执行当转移条件满足,转向目标地址去执行。
当 、、 不满足,执行Jcc后的下一条指令。
转移方式只允许段内直接短方式,跳转范围在-128~127
按转移条件不同,条件转移指令可以分为四大类:
①以单个状态标志作为转移条件
②以CX的值为0作为转移条件
③以两个无符号数比较的结果作为转移条件
④以两个带符号数比较的结果作为转移条件
3)循环指令
格式 LOOPxx 符号地址
执行①(CX)←(CX)-1此操作不影响标志
②检查转移条件,满足,转向目标地址去执行;
不满足,执行LOOPxx后一条指令
转移方式只允许段内直接短方式,跳转范围-128~127
循环指令说明:
LOOP退出循环条件是(CX)=0
LOOPZ和LOOPNZ提供了提前结束循环的可能,
不一定要等到(CX)=0才退出循环。
4)调用和返回指令
调用指令CALL
①段内直接调用
格式CALL符号地址;NEAR属性
执行(SP)←(SP)-2
(SS:
SP)←(IP)
(IP)←符号地址的偏址
②段间直接调用
格式CALL符号地址;FAR属性
执行
(SP)←(SP)-2
(SS:
SP)←(CS)
(SP)←(SP)-2
(SS:
SP)←(IP)
(IP)←符号地址的偏址
(CS)←符号地址的段址
返回指令RET
①段内返回
格式RET
执行(IP)←(SS:
SP)
(SP)←(SP)+2
②段间返回
格式RET或RETF
执行(IP)←(SS:
SP)
(SP)←(SP)+2
(CS)←(SS:
SP)
(SP)←(SP)+2
注意:
在调用、返回指令中,
利用堆栈保存、恢复返回地址。
对堆栈的操作应有目的性,
不乱用堆栈操作,不随意修改堆栈内容,
否则易造成死机。
5)中断调用、中断返回指令
中断子程以类型号N来区分
共有256个类型号(0~FFH,即0~255)
类型号0处理除0错误的中断子程
类型号4H处理溢出时的中断子程
类型号9H处理键盘操作的中断子程
类型号21H与DOS系统功能相关的中断子程
中断调用指令INT
格式INTN;其中N=0~FFH即0~255
入栈保存PSW
执行(SP)←(SP)-2
保存现场
(SS:
SP)←(PSW)
IF←0清IF标志
TF←0清TF标志
入栈保存CS
(SP)←(SP)-2
(SS:
SP)←(CS)
入栈保存IP
(SP)←(SP)-2
(SS:
SP)←(IP)
取中断子程入口地址
(IP)←(0:
N×4)
(CS)←(0:
N×4+2)
中断返回指令IRET
格式IRET
执行
(IP)←(SS:
SP)
(SP)←(SP)+2
(CS)←(SS:
SP)
(SP)←(SP)+2
(PSW)←(SS:
SP)
(SP)←(SP)+2
溢出中断调用INTO
格式INTO
执行OF为1时,执行INT4;
OF为0时,执行INTO下一条执行。