章 汇编语言指令与程序设计 - web.xidian.edu.cn · 2.逻辑或指令(OR-Byte or Word)...

39
4汇编语言指令与程序设计 董明皓,博士 西安电子科技大学 [email protected] 2020版 1

Transcript of 章 汇编语言指令与程序设计 - web.xidian.edu.cn · 2.逻辑或指令(OR-Byte or Word)...

  • 第4章

    汇编语言指令与程序设计

    董明皓,博士

    西安电子科技大学

    [email protected]

    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