章 汇编语言指令与程序设计 - web.xidian.edu.cn · 2.逻辑或指令(OR-Byte or Word)...
Transcript of 章 汇编语言指令与程序设计 - web.xidian.edu.cn · 2.逻辑或指令(OR-Byte or Word)...
-
第4章
汇编语言指令与程序设计
董明皓,博士
西安电子科技大学
2020版
1
-
2
汇编语言基本概念1
2
3
8086的六类指令4
总结5
数据运算指令与程序设计
数据位操作指令与编程
目录
微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
-
指令学习三套路:
指令做什么?
OPR哪里来,哪里去?
对PSW有何影响?
微机原理与系统设计 8086CPU的指令系统 董明皓 [email protected]
基础知识导入
-
• 共同特点:
1. 满足通用语法规则;
2. CPU进行运算(算数、逻辑),就会影响状态标识;
3. 段REG不能参加运算;
OF DF IF TF SF ZF AF PF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected] 4
基础知识导入
-
CF(Carry Flag)进位标志。如果加法时最高位产生进位或减法时最高位产生进位或借位,则CF=1,否则CF=0。AF(Auxiliary Carry Flag)辅助进位标志。如果在加法时D3位有进位或减法时D3位有借位,则AF=1,否则AF=0。ZF(Zero Flag)零标志位。如果运算结果各位都为零,则ZF=1,否则ZF=0。SF(Sign Flag)符号标志。运算结果为负时,SF=1,否则SF=0.
OF(Overflow Flag)溢出标志。运算中结果超出8位或者16位有符号数所能表示的数值范围,产生溢出,OF=1,否则OF=0。PF(Parity Flag)奇偶标志。如果操作结果的低8位中含有偶数个1,PF=1,否则PF=0。
5微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
基础知识导入
-
数据传送指令
• 通用传送指令、取有效地址指令、取地址指针指令
• 标志传送指令、数据交换指令、字节转换指令、堆栈操作指令
数据运算指令
• 加减法指令、比较指令、增量减量指令、乘除法指令
• 符号扩展指令、BCD数运算调整指令
数据位操作指令
• 逻辑运算指令、移位类指令、标志位操作指令
8086指令分类(第三版)
6微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
-
数据位操作指令
7
• 完成两个OPR的各种算术运算:加、减、乘、除及其BCD
数运算的调整运算,分为以下子类:
1. 逻辑运算指令(AND、OR、XOR、NOT、TEST)
2. 移位类指令 ()
3. 标志位操作指令()
-
4.3.1 逻辑运算类指令
8微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
助记符格式 功 能 说 明
与 AND DST,SRC (DST)( DST) ∧ ( SRC)
或 OR DST,SRC (DST)( DST) ∨ ( SRC)
异或 XOR DST,SRC (DST)( DST) ⊕ ( SRC)相同结果为0,不同结果为1
非 NOT DST (DST)中各位取反
测试 TEST DST,SRC (DST) ∧ (SRC)
•8086CPU操作对象是字节或字,按位运算。
•NOT指令对标志位不产生影响
•其他逻辑运算指令:CF=OF=0,ZF、SF、PF根据结果改变,AF未定义。
-
1.逻辑与指令(AND-Byte or Word)
4.3.1 逻辑运算类指令
9
AND DST, SRC ;(DST)←(DST)∧(SRC) ;DST:通用REG 、MEM单元;
;SRC:通用REG、MEM单元、立即数;
;DST和SRC不能同时为存储单元;
;CF、OF置0,正常设置SF、ZF和PF的状态;
;AF未定义;
;常用于置“0”;
微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
-
1.逻辑与指令(AND-Byte or Word)
4.3.1 逻辑运算类指令
10微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
求两个操作数的逻辑与,设VAR1为字型变量。
AND AX,BX
AND AL, 156
AND VAR1, 78AAH
AND CX, [SI]
;(AX)←(AX)∧(BX)
;(AL)←(AL)∧1001 1100B (156=1001 1100B)
;(VAR1)←(VAR1)∧78AAH
;(CX)←(CX)∧((SI))
-
2.逻辑或指令(OR-Byte or Word)
4.3.1 逻辑运算类指令
11
OR DST, SRC ; (DST)←(DST) ∨(SRC)
;DST:通用REG 、MEM单元;
;SRC:通用REG、MEM单元、立即数
;DST和SRC不能同时为存储单元。
;CF、OF置0,正常设置SF、ZF和PF的状态
;AF未定义;
;常用于置“1”;
微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
-
2.逻辑或指令(OR-Byte or Word)
4.3.1 逻辑运算类指令
12微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
求两个操作数的逻辑或,设VAR2为字节型变量。
OR AL, 0110 0001B
OR VAR2, 0FH
OR AX,BX
OR BX, [DI]
;(AL)←(AL) ∨0110 0001B
;(VAR2)←(VAR2) ∨0FH
;(AX)←(AX) ∨(BX)
;(BX)←(BX) ∨((DI))
-
4.3.1 逻辑运算类指令
13微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
例试比较以下几条指令:
MOV AX, VAR1
OR AX, AX
AND AX, AX
CMP AX,0
;不改变标志位
;在保持AX内容不变的前提下,设置标志位
;在保持AX内容不变的前提下,设置标志位
;在保持AX内容不变的前提下,设置标志位
-
3.逻辑异或指令(XOR-Byte or Word)
4.3.1 逻辑运算类指令
14微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
XOR DST, SRC ; (DST)←(DST)⊕(SRC)
;DST:通用REG 、MEM单元;
;SRC:通用REG、MEM单元、立即数;
;DST和SRC不能同时为存储单元;
;CF、OF置0,正常设置SF、ZF和PF的状态;
;AF未定义;
;某些位保留、和某些位相反
-
3.逻辑异或指令(XOR-Byte or Word)
4.3.1 逻辑运算类指令
15微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
求两个操作数的逻辑异或,设VAR2为字节型变量。
XOR AL, 0110 0001B
XOR VAR2, 0FH
XOR AX,BX
XOR BX, [DI]
;(AL)←(AL) ⊕ 0110 0001B
;(VAR2)←(VAR2) ⊕ 0FH
;(AX)←(AX) ⊕(BX)
;(BX)←(BX) ⊕((DI))
-
4.逻辑非指令(NOT-Byte or Word)
4.3.1 逻辑运算类指令
16微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
NOT DST ; (DST)← ~ (DST);DST:通用REG 、MEM单元;
;PSW不做任何改变;
-
4.逻辑非指令(NOT-Byte or Word)
4.3.1 逻辑运算类指令
17微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
求操作数的逻辑非,设VAR1为字型变量。
NOT AL
NOT VAR1
;(AL) ~(AL) ,0变1,1变0
;(VAR1) ~(VAR1) ,0变1,1变0
-
5.逻辑测试指令(TEST-Byte or Word)
4.3.1 逻辑运算类指令
18微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
TEST DST, SRC ;(DST)∧(SRC) ;操作对 DST 和SRC不产生任何影响;DST:通用REG 、MEM单元;
;DST和SRC不能同时为存储单元;
;CF、OF置0,正常设置SF、ZF和PF的状态;
;AF未定义;
-
5.逻辑测试指令(TEST-Byte or Word)
4.3.1 逻辑运算类指令
19微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
求两个操作数的逻辑测试,设VAR1为字型变量。
TEST AL, 156
TEST VAR1, 78AAH
TEST AX,BX
TEST CX, [SI]
; (AL)∧1001 1100B (156=1001 1100B)
; (VAR1)∧78AAH
; (AX)∧(BX)
; (CX)∧((SI))
-
4.3.1 逻辑运算类指令
20
• 逻辑运算的用途:利用逻辑运算指令可通过适当选用SRC的
代码,使目的DST的某些位进行清零、置位及取反操作
• 利用逻辑运算指令可改变PSW的相应位,给跳转指令建立依
据
微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
小结
-
4.3.1 逻辑运算类指令
21微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
小结
OR CL, 03H
AND AL, 0F5H
XOR AH, 0FH
TEST AL, 02H
JZ ZER1
XOR AX, AX
AND AL, 5FH
OR AL, 20H
;将CL的位0,1置1,其余位不变
;将AL的位1,位3清零
;将AH的低4位取反,高4位不变
;测试AL的位1是否为0,若为0则转移到ZER1
;
; AX清0
;小写变大写,ASCII码变换
;大写变小写,ASCII码变换
-
4.3.1 逻辑运算类指令
22微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
指令助记符 功能 PSW影响AND DST,SRC (DST)( DST) ∧ ( SRC) CF=OF=0,AF未定义
ZF、SF、PF根据结果改变TEST DST,SRC (DST) ∧ (SRC) CF=OF=0,AF未定义
ZF、SF、PF根据结果改变OR DST,SRC (DST)( DST) ∨ ( SRC) CF=OF=0,AF未定义
ZF、SF、PF根据结果改变XOR DST,SRC (DST)( DST) ⊕ ( SRC)
相同取0,不同取1CF=OF=0,AF未定义ZF、SF、PF根据结果改变
NOT DST (DST)中各位1、0交换 对标志位不产生影响
DST:通用REG 、MEM单元;
SRC:通用REG、MEM单元、立即数;
DST和SRC不能同时为存储单元;
运算类指令改变标志位
-
作业(第二版/第三版)
23微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
Deadline:2020.10.17 23:59:59
1. 3.12/4.7
2. 3.13/4.8
3. 3.21/4.15
-
4.3.2 移位类指令
24
在8086指令系统中,
移位类指令有:
1. 逻辑左移SHL
2. 逻辑右移SHR
3. 算术左移SAL
4. 算术右移SAR
循环移位类指令有:
1. 循环左移ROL
2. 循环右移ROR
3. 带进位循环左移RCL
4. 带进位循环右移RCR
视OPR为有符号数:算术移位;
视OPR为无符号数:逻辑移位
-
4.3.2 移位类指令
25
视OPR为有符号数:算术移位;
视OPR为无符号数:逻辑移位
• 移位是一种运算(段寄存器不能参加)
• DST为DW或DB型
• DST:通用REG、MEM单元
• CNT:=1/CL
• 正常设置除AF外的5个PSW,其中CF表示指令所移出的一
位,OF=1表示移位前后符号位发生了变化,AF未定义
-
4.3.2 移位类指令
26
视OPR为有符号数:算术移位;
视OPR为无符号数:逻辑移位
逻辑左移:SHL DST, CNT
逻辑右移:SHR DST, CNT
算术左移:SAL DST, CNT
算术右移:SAR DST, CNT
-
1.逻辑移位指令(SHL/SHR-shift logical left/right byte or word)
4.3.1 逻辑运算类指令
27
左移 SHL DST, CNT 右移 SHR DST, CNT
0CF
D7 D1 D0
CF0
D7 D1 D0
右移1位操作相当于将DST除以2;
左移1位操作相当于将DST乘以2。
正常设置5个标志位(除AF),其中OF定义为:指令执行前后最高位数字发生变化时,OF置1
移位空出来的位补零;移出来的位放入CF
-
2.算术移位指令(SAL/SAR-shift arithmetic left/right byte or word)
4.3.1 逻辑运算类指令
28
移出来的位放入CF
左移 SAL DST, CNT 右移 SAR DST, CNT
0CF
DST DST
CF
与SHL完全相同 空位由符号位补充
微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 [email protected]
-
1.逻辑移位指令(SHL/SHR-shift logical left/right byte or word)
4.3.1 逻辑运算类指令
29
例:请先判断指令合法性,再叙述下列指令完成的功能
(AL)= 10110100 B,SHR AL, 1 ; 1 0 1 1 0 1 0 0
1 0 1 1 0 1 00
0
CF
CF=0
1 0 1 1 1 1 0 0000CF
0 0 1 0 1 1 10 CF=1
(CL)=3, (AL) =10111100B,SHR AL, CL;
-
1.逻辑移位指令(SHL/SHR-shift logical left/right byte or word)
4.3.1 逻辑运算类指令
30
SHL DAT1[SI],CL
SHR BL, 2
;将MEM单元的内容左移CL中所中指定的次数
;×,当移位次数>1时,必须用CL提供移位次数
-
1.逻辑移位指令(SHL/SHR-shift logical left/right byte or word)
4.3.1 逻辑运算类指令
31
例:请编程实现5*12
解1:MOV AL, 5
MOV BL, 12
MUL BL
解2:MOV AL, 5
MOV CL, 2
SHL AL, CL
MOV BL, AL
SHL AL,1
ADD AL, BL
省时间,耗内存耗时间,省内存
-
1.逻辑移位指令(SHL/SHR-shift logical left/right byte or word)
4.3.1 逻辑运算类指令
32
例:将两个非组合BCD数(高阶存于BL,低阶存于AL中),转换成一个组合的BCD数,存于AL中。
0000 ****BL 0000 ****AL
OR**** 0000BLSHL
MOV CL,4SHL BL,CLOR AL,BL
-
3. 循环左/右移位指令(ROL/ROR-rotate left/right byte or word)
4.3.1 逻辑运算类指令
33
4. 带进位循环左/右移位指令(RCL/RCR-rotate through carry left/right byte or word)
左移 ROL DST, CNT 右移 ROR DST, CNT
CFDST
CFDST
左移 RCL DST, CNT 右移 RCR DST, CNT
CFDST
CFDST
只影响OF、CF,对剩余4个标志未定义
-
4.3.2 移位类指令
34
例:DX:AX中存放32位数,将其扩大16倍
解 : MOV CX, 4
REP1 : SHL AX,1
RCL DX,1
LOOP REP1
-
4.3.2 移位类指令
35
例.若(BX)=10110110B,(CL)=3,CF=1,
则CPU执行:
RCR BX, CL 指令后,(BX)=?
(BX)=A016H,CF=1
-
4.3.2 移位类指令
36
编程序实现5*10运算(不能用MUL指令)。
算法: 5*10=5*(2+8)=5*2+5*8
MOV AL, 05HSHL AL, 1 ;(AL)=5*2MOV BL, AL ;(BL)=5*2MOV CL, 2SHL AL, CL ;(AL)=5*8ADD AL, BL ;(AL)=5*10
-
4.3.3 标志位操作指令
37
思考题:
1. 将32位数据(DX,AX)中的内容左移1位。
2.将32位数据(DX,AX)中的内容右移2位。
-
4.3.2 移位类指令
38
对PSW寄存器的标志位CF、DF、IF进行置位、清零或取反操作,
共七条。
-
LAHF ;(AH) ← PSW寄存器的低8位
SAHF ;PSW寄存器的低8位 ← (AH),影响标志位
源操作数和目的操作数的寻址方式均为隐含寻址方式
数据传输指令
标志传送指令(LAHF,SAHF)Load AH register from flags /Store AH register in flags
OF DF IF TF SF ZF AF PF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
• 状态标志:CF、PF、AF、ZF、SF、OF共6位
• 控制标志:TF、IF、DF共3位39