第 5 章 指令系统
DESCRIPTION
第 5 章 指令系统. 第二部分. 计算机教学实验中心. 三、逻辑运算和移位类. 与 或 非 异或. 逻辑运算 移位操作. 逻辑移位 算术移位. 非循环移位 循环移位. 不带进位位的移位 带进位位的移位. 1. 逻辑运算. 逻辑运算指令对操作数的要求大多与 MOV 指令相同。 “ 非 ” 运算指令要求操作数不能是立即数; 除“非”运算指令外,其余指令的执行都会使标志位 OF=CF=0. “ 与”指令. 格式: AND OPRD1 , OPRD2 操作: 两操作数按位相 “ 与 ” ,结果送目标地 址. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/1.jpg)
1
第 5章指令系统
计算机教学实验中心
第二部分
![Page 2: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/2.jpg)
2
三、逻辑运算和移位类
逻辑运算
移位操作
与或非异或
非循环移位
循环移位
逻辑移位算术移位
不带进位位的移位带进位位的移位
![Page 3: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/3.jpg)
3
1. 逻辑运算 逻辑运算指令对操作数的要求大多与 MOV 指
令相同。“非”运算指令要求操作数不能是立即数;
除“非”运算指令外,其余指令的执行都会使标志位 OF=CF=0
![Page 4: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/4.jpg)
4
“与”指令 格式: AND OPRD1 , OPRD2 操作: 两操作数按位相“与”,结果送目标
地 址
![Page 5: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/5.jpg)
5
“与”指令的应用 实现两操作数相与的运算; 使目标操作数的某些位不变,某些位清零; 在操作数不变的情况下使 CF 和 OF 清零。
![Page 6: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/6.jpg)
6
“与”指令的应用 AND BL , [BX] AND AL , 0FH AND AX , AX
![Page 7: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/7.jpg)
7
“或”运算指令 格式: OR OPRD1 , OPRD2 操作: 两操作数按位相“或”,结果送目标 地址
![Page 8: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/8.jpg)
8
“或”运算指令的应用 实现两操作数相“或”的运算; 使某些位不变,某些位置“ 1” 在不改变操作数的情况下使 OF=CF=0
![Page 9: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/9.jpg)
9
应用程序例
OR AX , [DI]OR CL , 0FHOR AX , AX
OR AL , AL
JPE GOON
OR AL , 80H
GOON :… .
偶校验转移( PF=1 )
将一个二进制数 9变为字符‘ 9’
?
![Page 10: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/10.jpg)
10
“非”运算指令 格式: NOT OPRD 操作:操作数按位取反再送回原地址 指令中的操作数不能是立即数 指令的执行对标志位无影响 例: NOT BYTE PTR[BX]
![Page 11: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/11.jpg)
11
“异或”运算指令 格式: XOR OPRD1 , OPRD2 操作: 两操作数相“异或”,结果送目标 地址
两操作数自身相异或,结果
XOR AX , AX
![Page 12: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/12.jpg)
12
“测试”指令 格式: TEST OPRD1 , OPRD2 操作: 执行“与”运算,但运算的结果不 送回目标地址。 应用: 常用于测试某些位的状态
![Page 13: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/13.jpg)
13
“测试”指令例 从地址为 38F0H 的端口中读入一个字节数,
如果该数的 bit1 位为 1 ,则可从 38FEH 端口将 DATA 为首地址的一个字输出,否则就不能进行数据传送。
编写相应的程序段。
![Page 14: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/14.jpg)
14
“测试”指令例开 始
取待输出数的偏移地址
读入状态字
测试 bit1 位状态
Bit1=1 ?
取输入口地址取输出口地址
输出一个字
N
Y
![Page 15: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/15.jpg)
15
“测试”指令例 LEA SI , DATA MOV DX , 38F0HWATT : IN AL , DX TEST AL , 02H JZ WATT ; ZF=1 转移 MOV DX , 38FEH MOV AX , [SI] OUT DX , AX
![Page 16: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/16.jpg)
16
2. 移位指令 非循环移位指令 循环移位指令
注: 移动一位时由指令直接给出;移动两位及以上,
则移位次数由 CL 指定。
![Page 17: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/17.jpg)
17
非循环移位指令 逻辑左移 算术左移 逻辑右移 算术右移
![Page 18: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/18.jpg)
18
算术左移和逻辑左移 格式: SAL OPRD , 1 SAL OPRD , CL SHL OPRD , 1 SHL OPRD , CL
有符号数
无符号数
逻辑左移 移动一位后,若 CF 与最高不相等,则 OF=1
;否则 OF=0
![Page 19: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/19.jpg)
19
逻辑右移 格式: SHR OPRD , I SHR OPRD , CL
0 CF
无符号数的右移
移动一位后,若次高位与最高位不相等,则 OF=1 ;否则 OF=0
![Page 20: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/20.jpg)
20
算术右移 格式: SAR OPRD , I SAR OPRD , CL
有符号数的右移
CF
![Page 21: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/21.jpg)
21
非循环移位指令的应用 左移可实现乘法运算 右移可实现除法运算
见教材教材 p198p198 例例
![Page 22: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/22.jpg)
22
循环移位指令
不带进位位的循环移位
带进位位的循环移位
循环移位指令的格式、对操作数的要求与非循环移位指令相同
左移 ROL
右移 ROR
左移 RCL
右移 RCR
![Page 23: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/23.jpg)
23
不带进位位的循环移位
CF
CF
![Page 24: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/24.jpg)
24
带进位位的循环移位
CF
CF
![Page 25: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/25.jpg)
25
循环移位指令的应用 用于对某些位状态的测试; 高位部分和低位部分的交换; 与非循环移位指令一起组成 32 位或更长
字长数的移位。
![Page 26: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/26.jpg)
26
程序例 MOV SI,1000H MOV DI,3000H MOV CX,4BBB : MOV AL,[SI] MOV BL,AL AND AL,0FH
OR AL,30H MOV [DI],AL INC DI MOV AL,BL
PUSH CXMOV CL,4SHR AL,CLSHR AL,CLOR AL,30HOR AL,30HMOV [DI],ALMOV [DI],ALINC DIINC DIINC SIINC SIPOP CXPOP CXDEC CXDEC CXJNZ BBBJNZ BBBHLTHLT
程序功能?
![Page 27: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/27.jpg)
27
程序功能 将 1000H 开始存放
的四个压缩 BCD 码转换为 ASCII 码存放在 3000H 开始的单元中去。
┇
┇
12H
34H56H78H
┇
1000H
3000H
![Page 28: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/28.jpg)
28
四、串操作指令 针对数据块或字符串的操作; 可实现存储器到存储器的数据传送; 待操作的数据串称为源串,目标地址称为
目标串。
![Page 29: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/29.jpg)
29
串操作指令的特点 源串一般存放在数据段,偏移地址由 SI 指定。
允许段重设; 目标串必须在附加段,偏移地址由 DI 指定; 指令自动修改地址指针,修改方向由 DF 决定。
DF=0 增地址方向; DF=1 减地址方向; 数据块长度值由 CX 指定; 可增加自动重复前缀以实现自动修改 CX内容。
![Page 30: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/30.jpg)
30
串操作指令流程
取源串地址
取目标串地址
设串长度
传送一个字节或字
修改地址指针
修改串长度值
传送完否?
![Page 31: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/31.jpg)
31
重复前缀 REP 无条件重复
REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复
条件重复
CX≠0ZF=1
CX≠0ZF=0
CX≠0 重复
![Page 32: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/32.jpg)
32
串操作指令 串传送 MOVS 串比较 CMPS 串扫描 SCAS 串装入 LODS 串送存 STOS
![Page 33: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/33.jpg)
33
串传送指令 格式: MOVS OPRD1 , OPRD2 MOVSB MOVSW
指令用于实现数据块的传送,常与无条件重复前缀连用。
![Page 34: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/34.jpg)
34
串传送指令 对比用 MOV 指令和 MOVS 指令实现将 20
0 个字节数据从内存的一个区域送到另一个区域的程序段。
![Page 35: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/35.jpg)
35
串传送指令例 用串传送指令实现 200 个字节数据的传送:
LEA SI , MEM1 LEA DI , MEM2 MOV CX , 200 CLD REP MOVSB HLT
![Page 36: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/36.jpg)
36
串比较指令 格式: CMPS OPRD1 , OPRD2 CMPSB CMPSW
该指令用于两个数据块或两个字符串之间的比较; 常与条件重复前缀连用,指令的执行不改变操作数,仅影响标志位。
![Page 37: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/37.jpg)
37
串比较指令例 测试上例中 200 个字节数据是否传送正确:
LEA SI , MEM1
LEA DI , MEM2
MOV CX , 200
CLD
REPE CMPSB
JZ STOP
DEC SI
MOV AL ,[SI]
MOV BX , SI
STOP : HLT
![Page 38: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/38.jpg)
38
串扫描指令 格式: SCAS OPRD SCASB SCASW
指令执行: AX (或 AL ) - OPRD 该指令常用于在某个区域中寻找关键字。
目 标操作数
![Page 39: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/39.jpg)
39
串装入指令 格式: LODS OPRD LODSB LODSW 操作:对字节: AL ([DS:SI]) 对 字: AX ([DS:SI])
源操作数
![Page 40: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/40.jpg)
40
串装入指令 用于将内存某个区域的数据串依次装入累加器,
以便显示或输出到接口。
LODS 指令一般不加重复前缀。
![Page 41: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/41.jpg)
41
串送存指令 格式: STOS OPRD STOSB STOSW 操作:对字节: AL ([ES:DI]) 对 字: AX ([ES:DI])
目 标操作数
![Page 42: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/42.jpg)
42
串送存指令的应用 将内存某个区域清零
区域首地址送 ES : DI
串长度送 CX
置方向标志 DF
0 送累加器 AL
执行串送存指令
开始
![Page 43: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/43.jpg)
43
五、程序控制指令 转移指令 循环控制 过程调用 中断控制
![Page 44: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/44.jpg)
44
1. 转移指令 无条件转移指令 无条件转移到目标地址,执行新的指令
有条件转移指令 在具备一定条件的情况下转移到目标地址
![Page 45: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/45.jpg)
45
转移指令的转移原理 通过修改代码段寄存器 CS 及指令指针 IP
的内容,使程序改变顺序执行的模式,转到新的目标地址执行。
![Page 46: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/46.jpg)
46
无条件转移指令 指令格式: JMP OPRD
无条件转移的目标地址可以是在当前代码段,也可在另一代码段
![Page 47: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/47.jpg)
47
无条件转移指令 段内转移——目标地址与 JMP 指令在同一代码段
转移方式:
直接转移——指令中直接给出转移的目标地址
间接转移——由指令中的寄存器或存储器间接给出转移
目标地址
![Page 48: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/48.jpg)
48
无条件段内转移 直接转移: JMP Lable
转移目标地址: 段基地址不变; 偏移地址 =当前 IP+位移量
JMP
Label
┇
┇
┇
代码段
位移量
近地址标号
![Page 49: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/49.jpg)
49
无条件段内转移 间接转移: JMP BX JMP WORD PTR[BX]
JMP
┇
┇
┇
代码段
数据段
BX=1200
┇
XXH
XXH
IP
指令码
![Page 50: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/50.jpg)
50
无条件段间转移 直接转移: JMP FAR Lable
远地址标号
JMP
Label
┇
┇
┇
代码段1
代码段2
XXH
XXH
XXH
XXH
IP
CS
![Page 51: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/51.jpg)
51
无条件段间转移 间接转移: JMP DWORD PTR[BX]
XXHXXHXXH
XXH
[BX]IP
CS
JMP
┇
┇
┇
┇
指令码
代码段1
代码段2
数据段
![Page 52: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/52.jpg)
52
条件转移指令 在满足一定的条件下,程序转移到目标地址继续执行;
在条件转移指令之前,应有一条为条件转移指令的执行形成条件的指令(如对标志位产生影响的指令);
条件转移指令均为段内短转移,即转移范围为: -128------+127
p206
![Page 53: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/53.jpg)
53
2. 循环控制指令 控制程序在以当前 IP 为中心的 -128~ +127范围内循环执行;
循环次数由 CX寄存器指定。
循环指令无条件循环指令 LOOP
条件循环指令 LOOPZ
LOOPNZ
![Page 54: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/54.jpg)
54
无条件循环指令 格式: LOOP Lable 循环条件: CX ≠ 0 LOOP 指令的操作相当于: DEC CX JNZ Lable
![Page 55: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/55.jpg)
55
条件循环指令 格式: LOOPZ Lable LOOPE Lable
循环条件: CX ≠ 0 ZF=1
格式: LOOPZ Lable LOOPE Lable
循环条件: CX ≠ 0 ZF=1
![Page 56: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/56.jpg)
56
3. 过程调用和返回
段内调用
段间调用
段内直接调用
段内间接调用
段间直接调用
段间间接调用
![Page 57: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/57.jpg)
57
调用指令与转移指令的比较 用于调用一个子过程; 调用前须保护断点地址; 子过程执行结束后要返回原调用处继续执行
原程序 —— 断点恢复。
![Page 58: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/58.jpg)
58
调用指令的执行过程 将调用指令的下一条指令的地址(断点)压入堆栈;
获取子过程的入口地址(子过程第 1条指令的偏移地址);
(执行子过程,含相应参数的保存及恢复); 将断点偏移地址由堆栈弹出,返回原程序。
![Page 59: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/59.jpg)
59
段内调用 子过程与原调用程序在同一代码段,在调
用之前只需保护断点的偏移地址 格式: CALL NEAR PROC
近过程名
断点
入口地址
![Page 60: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/60.jpg)
60
段内调用例 CALL TIMRE
CALL WORD PTR[SI]
直接调用
间接调用
![Page 61: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/61.jpg)
61
段间调用 子过程与原调用程序不在同一代码段,在调
用之前需保护断点的段基地址和偏移地址。 断点地址的保护是先将断点的 CS 压栈,再
将 IP 压入堆栈。 指令格式: CALL FAR PROC
![Page 62: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/62.jpg)
62
段间调用例 CALL FAR TIMRE
CALL DWORD PTR[SI]
![Page 63: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/63.jpg)
63
返回指令 从堆栈中弹出断点地址,返回原程序。 格式: RET RET 指令一般位于子程序的最后。
![Page 64: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/64.jpg)
64
4. 中断指令中断与过程调用: 中断是随机事件或异常事件引起,调用则是事先已在程序中安排好 ;
响应中断请求不仅要保护断点地址,还要保护FLAGS内容;
调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。
![Page 65: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/65.jpg)
65
中断指令 格式: INT n 说明: nх4 = 存放中断服务子程序入口地址的单元地址
中断类型码n=0 ~ 255
n х4 XXH
XXH
XXH
XXH
入口偏移地址 IP
入口段地址 CS
![Page 66: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/66.jpg)
66
中断指令操作:
将 FLAGS 压入堆栈; 将 INT 指令下一条指令的 CS 、 IP 压栈; 取中断服务程序入口地址。
![Page 67: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/67.jpg)
67
中断指令例 INT 21H
IPL
IPH
CSL
CSH
SP=1200
FLAGSL
FLAGSH
SP=11FA
执行 INT 指令后
保护断点
![Page 68: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/68.jpg)
68
中断指令例 执行 INT 21H 指令后 IP= ? CS= ? 21Hх4
=0084H 23H11H00H20H
IP
CS
![Page 69: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/69.jpg)
69
溢出中断指令 格式: INTO 若 OF=1,则启动一个类型为 4的中断过程 ,给
出一个出错标志 ,如果 OF=0,不做任何操作。 INTO 指令通常安排在有符号数加减运算指令之后。
相当于INT 4
![Page 70: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/70.jpg)
70
中断返回指令 格式: IRET 中断服务程序的最后一条指令,负责
恢复断点
恢复标志寄存器内容
![Page 71: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/71.jpg)
71
六、处理器控制指令
对标志位的操作与外部设备的同步
p213表 5-7
![Page 72: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/72.jpg)
72
§5.4 汇编语言源程序掌握:
汇编语言与汇编程序的概念; 汇编语言程序设计过程; 汇编语言源程序的结构框架; 常用伪指令及基本 DOS 功能模块的应用。
![Page 73: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/73.jpg)
73
一、 80X86新增指令特点: 增加对 32 位字长操作的指令; 加强各类指令功能; 增加了高级语言、控制保护、 Cache 管理
等指令。
![Page 74: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/74.jpg)
74
二、汇编语言及汇编程序 计算机语言:
机器语言汇编语言高级语言
面向机器 的语言
机器语言 汇编语言 高级语言
![Page 75: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/75.jpg)
75
汇编语言及汇编程序 汇编语言源程序 用助记符编写的程序
源程序的编译程序
汇编程序汇编语言源程序
机器语言目标程序
![Page 76: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/76.jpg)
76
汇编语言程序设计与执行过程
输入汇编语言源程序 源文件 .ASM 汇编(编译) 目标文件 .OBJ 链接 可执行文件 .EXE 调试 最终程序
![Page 77: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/77.jpg)
77
汇编语言的语句格式 指令性语句 —— 由 CPU 执行的指令 语句格式:
[ 标号: ] [ 前缀 ] 助记符 [ 操作数 ] , [ 操作数 ] [ ;注释 ]
指令的符号地址,标号后要有冒号 操作码 注释前加分号
![Page 78: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/78.jpg)
78
汇编语言的语句格式 指示性语句 : CPU 不执行的指令,不生成目标代码; 由汇编程序执行,用于分配内存空间、定义变量、指示程序开始和结束等。
指令格式:
[名字 ] 伪指令助记符 操作数 [ ,操作数,… ] [ ;注释 ]
变量的符号地址其后不加冒号
指示性语句中至少有一个操作数
![Page 79: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/79.jpg)
79
操作数 常量 —— 数值或字符、字符串
寄存器 存储器单元 变量或标号 表达式 —— 可包括各种运算符
![Page 80: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/80.jpg)
80
变量 代表内存中的数据区,程序中视为存储器
操作数 变量的属性: 段 值 —— 变量所在段的段地址 偏移量 —— 变量单元地址与段首地址之 间的位移量。 类 型 —— 字节型、字型和双字型
![Page 81: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/81.jpg)
81
三、基本伪指令 数据定义伪指令 符号定义伪指令 段定义伪指令 设定段寄存器伪指令 结束伪指令 * 过程定义伪指令 * 宏命令伪指令
![Page 82: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/82.jpg)
82
数据定义伪指令 用于定义数据区中变量的类型
格式:
[ 变量名 ] 伪指令助记符 操作数, [… ] [ ;注释 ]
![Page 83: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/83.jpg)
83
数据定义伪指令伪指令助记符 DB 定义的变量为字节型 DW 定义的变量为字类型(双字节) DD 定义的变量为双字型( 4字节) DQ 定义的变量为 4字型( 8 字节) DT 定义的变量为 10 字节型
![Page 84: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/84.jpg)
84
数据定义伪指令 DATA1 DB 11H , 22H , 33H , 44H
DATA2 DW 11H , 22H , 3344H
DATA3 DD
11H*2 , 22H , 33445566H
考虑以上变量在内存中的存放形式
![Page 85: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/85.jpg)
85
数据定义伪指令 伪指令的性质决定所定义变量的属性; 定义字符串必须用 DB伪指令 例: DATA1 DB ‘ABCD’, 66H ‘A’
‘B’‘C’‘D’
41H42H43H44H66H
![Page 86: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/86.jpg)
86
重复操作符 为一个数据区的各单元设置相同的初值 格式: [ 变量名 ] 伪指令助记符 n DUP (初值,…)
例: BW 20 DUP ( 0 ) DB 3 DUP ( 22H , 11H ,?)
随机数
![Page 87: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/87.jpg)
87
符号定义伪指令 格式: 符号名 EQU 表达式 操作: 用符号名取代后边的表达式,不可重新定义 例: CONSTANT EQU 100 VAR EQU 30H+99H
EQU说明的表达式不占用内存空间
![Page 88: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/88.jpg)
88
段定义伪指令
说明逻辑段的起始和结束; 说明不同程序模块中同类逻辑段之间的联系形态
![Page 89: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/89.jpg)
89
段定义伪指令
段名 SEGMENT [ 定位类型 ] [ 组合类型 ] [’ 类’别 ]
┇
段名 ENDS说明逻辑段的起点
说明不同模块中同名段的组和连接方式
![Page 90: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/90.jpg)
90
段定义伪指令例
DATA SEGMENT
MEM1 DB 11H , 22H
MEM2 DW 1234H
DATA ENDS
![Page 91: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/91.jpg)
91
设定段寄存器伪指令 说明所定义逻辑段的性质 格式 ASSUME 段寄存器名:段名 [ ,段寄存器名:段名,… ]
![Page 92: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/92.jpg)
92
结束伪指令 表示源程序结束 格式: END [ 标号 ]
![Page 93: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/93.jpg)
93
一个完整源程序结构例DSEG SEGMENT
DATA1 DB 1 , 2 ,DATA2 DW 1234H
DSEG ENDS
ESEG SEGMENT
DB 20 DUP (?)ESEG ENDS
SSEG SEGMENT
DB 200 DUP (?)SSEG ENDS
![Page 94: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/94.jpg)
94
一个完整源程序结构例CSEG SEGMENT ASSUME CS : CSEG , DS :
DSEG , ES : ESEG , SS : SSEG START : MOV AX , DSEG MOV DS , AX MOV AX , ESEG MOV ES , AX MOV AX , SSEG MOV SS , AX ┇ CSEG ENDS END START
源程序 代码
![Page 95: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/95.jpg)
95
过程定义伪指令 用于定义一个过程体
格式: 过程名 PROC [ NEAR / FAR ] ┇ RET 过程名 ENDP
过程入口的符号地址
![Page 96: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/96.jpg)
96
宏命令伪指令 宏命令——源程序中由汇编程序识别的具有 独立功能的一段程序代码 格式: 宏命令名 MACRO <形式参数 > ┇ ┇ ENDM
宏体
![Page 97: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/97.jpg)
97
四、 DOS 功能模块 用 INT 21H 软中断指令,可调用包含多个子功能的功能包;
各子功能采用功能号来区分; 功能包括:设备管理、目录目录管理、文件管管理、文件管
理等理等。。
![Page 98: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/98.jpg)
98
DOS 功能模块调用格式 调用格式: MOV AH ,功能号 <置相应参数 > INT 21H
![Page 99: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/99.jpg)
99
常用子功能 从键盘输入单字符并显示; 从键盘输入字符串并显示; 在屏幕上显示单字符; 在屏幕上显示字符串。
![Page 100: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/100.jpg)
100
从键盘输入单字符并显示 调用方法:
MOV AH , 01 INT 21H 输入的字符在 AL 中
![Page 101: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/101.jpg)
101
单字符输入例GET_KEY: MOV AH,1
INT 21H
CMP AL,’Y’
JZ YES
CMP AL,’N’
JZ NO
JNZ GET_KEY
YES: ┇ NO: ┇
交互式应 答程序
![Page 102: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/102.jpg)
102
从键盘输入字符串 AH 功能号 OAH DS : DX 字符串在内存中的存放地址 INT 21H
![Page 103: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/103.jpg)
103
定义字符缓冲区 用户自定义缓冲区格式:
0DHN1 N2
整个缓冲区
最大键入字符数
实际键入字符数
![Page 104: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/104.jpg)
104
输入字符串程序段 DAT1 DB 20 ,?, 20 DUP
(?)
LEA DX , DAT1 MOV AH , 0AH INT 21H
![Page 105: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/105.jpg)
105
输入缓冲区
14H ?
20 个字节
定义后的输入缓冲区初始状态:
![Page 106: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/106.jpg)
106
单字符显示输出 AH 功能号 O2H DL 待输出字符 INT 21H
![Page 107: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/107.jpg)
107
单字符显示输出例 MOV AH , 02 MOV DL , 41H INT 21H
执行结果:屏幕显示字符 ‘ A’
![Page 108: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/108.jpg)
108
字符串输出显示 AH 功能号 O9H DS : DX 待输出字符串的偏移地址 INT 21H
![Page 109: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/109.jpg)
109
字符串输出显示例DATA SEGMENT
MESS1 DB ‘Input String:’ 0DH , 0AH,’$’
DATA ENDS
CODE SEGMENT
┇
MOV AH , 09
MOV DX , OFFSET MESS1
INT 21H
┇
被显示的字符串必须以‘ $’
结束
![Page 110: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/110.jpg)
110
结束语 了解指令性语句及指示性语句的格式; 了解操作数的类型及变量的属性; 掌握 8086CPU 指令系统的寻址方式; 掌握 8086CPU 指令系统6大类指令的功能; 掌握基本伪指令及主要 DOS 功能模块的应用; 掌握汇编语言源程序的结构框架; 理解汇编语言程序设计的一般过程; 具备编写简单汇编语言源程序的能力。
![Page 111: 第 5 章 指令系统](https://reader033.vdocuments.mx/reader033/viewer/2022061514/568146de550346895db4154c/html5/thumbnails/111.jpg)
111
作业: 5.2 5.4 5.7 5.8 5.9 5.11 5.15 5.16 5.19