当前位置:文档之家› 汇编语言指令2

汇编语言指令2

1. 逻辑运算指令
指令格式
执行操作
AND dst ,src (dst ) ← (dst )∧(src ) OR dst ,src (dst ) ← (dst )∨(src ) NOT oprd (oprd )← (oprd ) XOR dst ,src
(dst ) ← (dst )∨(src )
TEST oprd1,oprd2 (oprd1)∧(oprd2)
2. 移位指令
SHL oprd,
1 CL
SAL oprd,
1 CL
SHR oprd,
1 CL SAR oprd,
1 CL
CF
CF
CF
CF
执行操作
指令格式
▲ 左移: 高位 ← 低位 右移: 高位 → 低位 ▲ 移出位进入CF 标志
▲ 对移位指令,移出CF 标志后丢失 ▲ 逻辑左移、算术左移的结果相同 ▲ 逻辑右移,新移入的信息以0填入
算术右移,保持最高有效位原来的值(符号为不变) 3. 循环移位指令
指令格式
执行操作
CF
CF
CF
CF
ROL oprd,
1 CL
ROR oprd,
1 CL
RCL oprd, 1
CL
RCR oprd, 1 CL
ROL
CF
CF
ROR
CF
CF
RCL RCR
▲左移:高位←低位
右移:高位→低位
▲移出位进入CF标志
▲对循环移位指令,改变各位的位置,信息不丢失▲带进位循环移位,CF标志参加循环移位
注意事项:
SHL AL, 1
SHR AL, CL
ROL BX, 1
RCR AL, CL
源操作数为移位的次数
目的操作数类型决定操作类型
对标志位的影响
▲移位指令:
①据结果设置CF、SF、ZF、PF,对AF无定义
②OF只在移位次数为1时有效,其他无定义
移位后,最高有效位发生变化,则OF=1,否则为0 ▲对循环移位指令:
①据移位结果设置CF,对其他标志无影响
②OF标志与移位指令同
控制转移指令
指令类型助记符无条件转移JMP
条件转移JE/JZ, JNE/JNZ, JS, JNS, JO, JNO JP, JNP, JC, JNC, JCXZ
JA/JNBE, JAE/JNB, JB/JNAE, JBE/JNA
JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG
循环控制LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ
过程调用CALL, RET
中断指令INT, INTO, IRET
1)无条件转移指令JMP
格式JMP 目标地址
执行操作无条件转移到目标地址处
2)条件转移指令
格式Jcc 符号地址
测试条件的助记符
执行当转移条件满足,转向目标地址去执行。

当、、不满足,执行Jcc后的下一条指令。

转移方式只允许段内直接短方式,跳转范围在-128~127
按转移条件不同,条件转移指令可以分为四大类:
①以单个状态标志作为转移条件
②以CX的值为0作为转移条件
助记符转移条件
JCXZ 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
格式 INT N ;其中 N=0 ~FFH 即0~255
执行 (SP ) ← (SP )- 2
(SS :SP )← (PSW ) IF ← 0 清IF 标志 TF ← 0 清TF 标志 (SP ) ← (SP )- 2
(SS :SP )← (CS ) (SP ) ← (SP )- 2 (SS :SP )← (IP ) (IP ) ← (0: N × 4) (CS ) ←(0: N ×4 + 2) 中断返回指令IRET 格式 IRET
入栈保存CS
入栈保存PSW
入栈保存IP
取中断子程入口地址
保 存 现 场
执行
(IP)←(SS:SP)
(SP)←(SP)+ 2
(CS)←(SS:SP)
(SP)←(SP)+ 2
(PSW)←(SS:SP)
(SP)←(SP)+ 2
溢出中断调用INTO
格式INTO
执行OF为1时,执行INT 4;
OF为0时,执行INTO下一条执行。

从堆栈取返回地址,
并恢复现场。

相关主题