微机原理及应用第02章_第1页
微机原理及应用第02章_第2页
微机原理及应用第02章_第3页
微机原理及应用第02章_第4页
微机原理及应用第02章_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第2章章 微处理器指令系统微处理器指令系统 微处理器的内部结构微处理器的内部结构 8086/8088的寻址方式的寻址方式 8086/8088指令系统指令系统第第2章章 微处理器指令系统微处理器指令系统 微处理器的内部结构微处理器的内部结构 8086/8088的寻址方式的寻址方式 8086/8088指令系统指令系统微处理器的基本结构微处理器的基本结构 算术逻辑单元算术逻辑单元ALUArithmetic Logic Unit 寄存器组寄存器组 通用寄存器,地址寄存器,标志寄存器通用寄存器,地址寄存器,标志寄存器 指令处理单元指令处理单元8086/80888086/8088的功能结构的功能结构 总

2、线接口单元总线接口单元BIU(对外)(对外)Bus Interface Unit负责负责CPU对存储器对存储器(指令,数据)(指令,数据)和外和外设进行访问设进行访问 执行单元执行单元EU(不对外)(不对外)Execution Unit负责指令的译码、执行和数据的运算负责指令的译码、执行和数据的运算AH ALBH BLCH CLDH DLSPBPDISI通通用用寄寄存存器器运算寄存器运算寄存器ALU标志标志执行部分执行部分控制电路控制电路1 2 3 4 CSDSSSESIP内部寄存器内部寄存器总线总线控制控制逻辑逻辑电路电路20位位8位位4个字节个字节指令队列缓冲器指令队列缓冲器外外总总线线执

3、行单元执行单元(EU)总线接口单元总线接口单元(BIU)8088CPU结构图结构图(图图2-2)数据寄存器数据寄存器地址寄存器地址寄存器地址译码地址译码指令预取指令预取取指令取指令1执行指令执行指令1取指令取指令2执行指令执行指令2取指令取指令3执行指令执行指令38086/8088的寄存器结构的寄存器结构通用寄存器通用寄存器 AX、BX、CX、DX、SI、DI、BP、SP指令指针指令指针 IP标志寄存器标志寄存器 FLAGS段寄存器段寄存器 CS、SS、DS、ES参见:图参见:图2-3(P19)16位通用寄存器位通用寄存器 AX:累加器。累加器。 (Accumulator) BX:基址寄存器。

4、基址寄存器。(Base address) CX:计数器。计数器。(Counter) DX:数据寄存器。数据寄存器。(Data register) SI: 源变址寄存器。源变址寄存器。 (Source Index) DI: 目的变址寄存器。目的变址寄存器。(Destination Index) SP:堆栈指针寄存器。堆栈指针寄存器。(Stack Pointer) BP:基址指针寄存器。基址指针寄存器。(Base Pointer)8位通用寄存器位通用寄存器 4个个16位通用寄存器(位通用寄存器(AX、BX、CX、DX)可各分成可各分成高高8位位和和低低8位位两个独立的两个独立的8位寄存器,位寄存器

5、,它们分别是:它们分别是:AX: AH、ALBX: BH、BLCX: CH、CLDX: DH、DL指令指针指令指针IPIP 指令指针指令指针IP(Instruction Pointer)指示下一条指令的地址。指示下一条指令的地址。 IP是一个专用寄存器,用户不能直接访问。是一个专用寄存器,用户不能直接访问。(透明寄存器)(透明寄存器)标志寄存器标志寄存器FLAGSFLAGS 分为两类分为两类状态标志状态标志:用于反映指令的执行结果(用于反映指令的执行结果(自动自动)控制标志控制标志:用于控制指令的执行形式(用于控制指令的执行形式(人工人工) 各种标志存放于一个各种标志存放于一个16位的标志寄存

6、器位的标志寄存器FLAGS中中1514131211109876543210OF DFIFTFSF ZFAFPFCF奇偶标志奇偶标志PF (Parity Flag) 当运算结果的低当运算结果的低8位中位中1的个数为偶数时,的个数为偶数时,则则PF置置1,反之置,反之置0。01101000B01101000B10101011B10101011B+ 01000000B+ 01000000B+ 11111111B+ 11111111B1 10 01 10 01 1000B000B1 10 01 10 01 10 01 10B0BPF=0PF=0PF=1PF=1零标志零标志ZF (Zero Flag)

7、运算结果为运算结果为0时,时,ZF置置1,否则,否则ZF置置0。01101000B01101000B00010000B00010000B+ 01000000B+ 01000000B+ 11110000B+ 11110000B10101000B10101000B0000000000000000B BZF=0ZF=0ZF=1ZF=1符号标志符号标志SF(Sign Flag) 运算结果的最高位为运算结果的最高位为1时,时,SF置置1,否则,否则SF置置0。00101000B00101000B10101011B10101011B+ 01000000B+ 01000000B+ 11111111B+ 11

8、111111B0 01101000B1101000B1 10101010B0101010BSF=0SF=0SF=1SF=1进位标志进位标志CF (Carry Flag) 做做无符号数无符号数加减运算时,若最高位有进位或加减运算时,若最高位有进位或借位,则借位,则CF=1,反之,反之CF=0。0 01101000B1101000B1041041 10101011B0101011B171171+ + 0 01000000B1000000B + + 6464+ + 1 11111111B1111111B+ 255+ 2551 10101000B0101000B1681681 10101010B010

9、1010B170170CFCF= =0 0C CF=F=1 1辅助进位标志辅助进位标志AF (Auxitiary Carry Flag) 做加减运算时,若做加减运算时,若D3有向有向D4的进位或借位,的进位或借位,则则AF置置1,反之置,反之置0。011001101 1000B000B101010101 1011B011B+ 0100+ 01000 0000B000B+ 1111+ 11111 1111B111B101010101 1000B000B101010101 1010B010BAF=0AF=0AF=1AF=1溢出标志溢出标志OF (Overflow Flag)0 01101000B1

10、101000B(+104)(+104)1 10101011B0101011B(-85)(-85)+ + 0 01000000B1000000B+ (+64)+ (+64)+ + 1 11111111B1111111B+ (-1)+ (-1)1 10101000B0101000B(-88)(-88)1 10101010B0101010B(-86)(-86)OF=1OF=1OF=0OF=0 有符号数的加减运算超过了所能表示的范围时,有符号数的加减运算超过了所能表示的范围时,OF=1,否则,否则OF=0。CF和和OF的对比的对比 有符号数有符号数的加减运算超过了所能表示的范围时,的加减运算超过了所能

11、表示的范围时,OF=1,否则,否则OF=0。 做做无符号数无符号数加减运算时,若最高位有进位或借位,加减运算时,若最高位有进位或借位,则则CF=1,反之,反之CF=0。01101000B01101000B(+104)(+104)104104+ + 01000000B01000000B + + (+64)(+64)+ + 646410101000B10101000B(-88)(-88)168168OF=1,CF=0OF=1,CF=0有符号有符号无符号无符号10101011B10101011B(-85)(-85)171171+ + 11111111B11111111B+ (-1)+ (-1)+ 2

12、55+ 25510101010B10101010B(-86)(-86)170170OF=0OF=0,CF=1,CF=1有符号有符号无符号无符号陷阱标志陷阱标志TF (Trap Flag) TF1,CPU单步执行指令;单步执行指令; TF0,CPU正常工作。正常工作。中断允许标志中断允许标志IF (Interrupt enable Flag) 外部中断是否可以被外部中断是否可以被CPU响应。响应。 IF1 允许中断允许中断 IF0 禁止中断。禁止中断。方向标志方向标志DF (Direction Flag) 用于串操作指令中控制地址的变化方向。用于串操作指令中控制地址的变化方向。DF0 则每次串操

13、作后存储器地址自动增加;则每次串操作后存储器地址自动增加;DF1 则每次串操作后存储器地址自动减少。则每次串操作后存储器地址自动减少。进进借借位位标标志志奇奇偶偶标标志志半半进进借借位位标标志志零零标标志志符符号号标标志志单单步步中中断断中中断断允允许许方方向向标标志志溢溢出出标标志志1-有进、借位有进、借位0-无进、借位无进、借位1-低低8位有偶数个位有偶数个10-低低8位有奇数个位有奇数个11-低低4位向高位向高4位有进、借位位有进、借位0-低低4位向高位向高4位无进、借位位无进、借位1-结果为结果为00-结果不为结果不为0OF DFIFTFSF ZFAFPFCF1-有溢出有溢出0-无溢出

14、无溢出位位 (bit) :二进制位,为:二进制位,为0或或1字节字节(Byte) :8个二进制位个二进制位字字 (Word) :2字节字节(16位位)双字双字(DWord):4字节字节(32位位)千字节千字节(KB) :210个字节个字节兆字节兆字节(MB) :220个字节个字节 8086/8088的存储器结构的存储器结构 存储器以存储器以字节字节为单位存储信息为单位存储信息 每个每个存储单元存储单元存储一个字节的数据存储一个字节的数据8086/8088的存储器结构的存储器结构 每个存储单元都有一个地址(编号)。每个存储单元都有一个地址(编号)。 8086/8088有有20根地址线。根地址线。

15、最大可寻址的存储器单元数为最大可寻址的存储器单元数为2201MB。 其物理地址范围为其物理地址范围为00000HFFFFFH。例如:例如:00002H34H。 参考:图参考:图2-5 P22小端方式小端方式 字或双字信息在存储器中占据相邻的字或双字信息在存储器中占据相邻的2 2个或个或4 4个个存储单元。存储单元。 多字节数据占据的地址空间用多字节数据占据的地址空间用低地址低地址来表示。来表示。 低字节对低地址、高字节对高地址低字节对低地址、高字节对高地址( (高高低低高高低低) )例如:例如:00002H00002H1234H1234H意指:意指:00002H00002H34H34H, 00

16、003H 00003H12H12H。存储器的分段管理存储器的分段管理 8086/8088将将1MB存储器空间分成若干个逻辑段存储器空间分成若干个逻辑段来管理。每个段最大限制为来管理。每个段最大限制为64KB。 采用采用逻辑地址逻辑地址(段地址:偏移地址段地址:偏移地址)的形式来表达的形式来表达段中每个存储器单元的段中每个存储器单元的20位位物理地址物理地址。 段地址和偏移地址都是段地址和偏移地址都是16位二进制数。位二进制数。段地址段地址 段地址说明该逻辑段在内存中的起始位置,即该段地址说明该逻辑段在内存中的起始位置,即该段中的段中的第一个内存单元的物理地址第一个内存单元的物理地址。 段地址必

17、须是模段地址必须是模16地址,即地址,即0H的形式,故的形式,故可采用可采用16位二进制数据表示,保存在段寄存器位二进制数据表示,保存在段寄存器(CS,DS,ES,SS)中。中。偏移地址偏移地址 偏移地址说明该段中某个内存单元距离该段起始偏移地址说明该段中某个内存单元距离该段起始位置的位置的段内段内偏移量偏移量。 由于每个段的长度不超过由于每个段的长度不超过64KB,故偏移地址也可,故偏移地址也可采用采用16位二进制数据表示。位二进制数据表示。 B8210H+ 4567H BC777H逻辑地址和物理地址逻辑地址和物理地址 物理地址物理地址 段地址段地址10H + 偏移地址偏移地址 例例:逻辑地

18、址逻辑地址为为B821H:4567H, 则其对应的则其对应的物理地址物理地址为为BC777H。存储器单元的地址存储器单元的地址12340H67H1234H:0000H12341H67H1234H:0001H12342H67H1234H:0002H12343H67H1234H:0003H12344H67H1234H:0004H67H2233EH67H1234H:FFFEH2233FH67H1234H:FFFFH物理地址物理地址逻辑地址(段逻辑地址(段+ +偏移)偏移)代码段(代码段(Code Segment) 代码段主要用来存放指令代码,也可存放数据。代码段主要用来存放指令代码,也可存放数据。

19、代码段寄存器代码段寄存器CS存放代码段的段地址。存放代码段的段地址。 指令指针寄存器指令指针寄存器IP指示下条指令的偏移地址。指示下条指令的偏移地址。数据段(数据段(Data Segment) 数据段存放程序所使用的数据。数据段存放程序所使用的数据。 数据段寄存器数据段寄存器DS存放数据段的段地址。存放数据段的段地址。 通过各种存储器寻址方式得到存储器中操作数通过各种存储器寻址方式得到存储器中操作数的偏移地址。的偏移地址。附加段(附加段(Extra Segment) 附加段是附加的数据段,也用于数据的保存。附加段是附加的数据段,也用于数据的保存。 附加段寄存器附加段寄存器ES存放附加段的段地址

20、。存放附加段的段地址。 通过各种存储器寻址方式得到存储器中操作数通过各种存储器寻址方式得到存储器中操作数的偏移地址。的偏移地址。堆栈段(堆栈段(Stack Segment) 堆栈段用于堆栈堆栈段用于堆栈(Stack),用来暂时存放数据、,用来暂时存放数据、保存程序断点、和向子程序传递参数等。保存程序断点、和向子程序传递参数等。 堆栈段寄存器堆栈段寄存器SS存放堆栈段的段地址。存放堆栈段的段地址。 堆栈指针寄存器堆栈指针寄存器SP指示堆栈栈顶的偏移地址。指示堆栈栈顶的偏移地址。第第2章章 微处理器指令系统微处理器指令系统 微处理器的内部结构微处理器的内部结构 8086/8088的寻址方式的寻址方

21、式 8086/8088指令系统指令系统指令的格式指令的格式 指令由操作码和操作数两部分组成。指令由操作码和操作数两部分组成。 LABEL: MOV AH,0B9H;赋值;赋值 WVAR DB 4AH,56H; 定义字节变量定义字节变量 操作码操作码:说明要执行何种操作。说明要执行何种操作。 操作数操作数:各种操作的对象。各种操作的对象。 标识符标识符:最长最长31个字母,不能以数字开头个字母,不能以数字开头8086/8088的寻址方式的寻址方式 寻找操作数的方式寻找操作数的方式( (或操作数的存放方式或操作数的存放方式) )叫叫做操作数的寻址方式。做操作数的寻址方式。 立即数操作数立即数操作数

22、(Immediate) 寄存器操作数寄存器操作数(Register) 存储器操作数存储器操作数(Memory)立即数寻址方式立即数寻址方式 MOV AX, 1234H; 操作数操作数1234H为立即数操作数,为立即数操作数,使用的是立即数寻址方式。使用的是立即数寻址方式。 指令执行后指令执行后AX=1234H(AH=12H,AL=34H)例:例: MOV AL, 05H指令执行后指令执行后: (AL)=05H例:例:MOV AX, 3064H指令执行后指令执行后: (AX)=3064H立即寻址方式立即寻址方式低地址低地址高地址高地址低地址低地址高地址高地址寄存器寻址方式寄存器寻址方式 MOV

23、AX,BX; 操作数操作数AX、BX均为寄存器操作数,均为寄存器操作数,使用的是寄存器寻址方式。使用的是寄存器寻址方式。 指令执行后指令执行后AX中的值与中的值与BX中的值相同,中的值相同,而而BX中的值不变。中的值不变。例:例:MOV AX, BX指令执行后指令执行后: (AX)= 3064H (BX)保持不变。)保持不变。 指令执行前:指令执行前:指令执行后指令执行后:寄存器寻址方式寄存器寻址方式存储器寻址方式存储器寻址方式 存储器操作数存放于存储器单元中。指令中给出存储器操作数存放于存储器单元中。指令中给出的是操作数所在的存储器单元的逻辑地址。的是操作数所在的存储器单元的逻辑地址。偏移地

24、址偏移地址 = BX/BP + SI/DI + i8/i16 ( (表表2-2)2-2) ( (有效地址有效地址) ) 有以下有以下5 5种具体方式:种具体方式: (1 1)直接寻址方式)直接寻址方式 (2 2)寄存器间接寻址)寄存器间接寻址 (3 3)寄存器相对寻址)寄存器相对寻址 (4 4)基址变址寻址)基址变址寻址 (5 5)相对基址变址寻址)相对基址变址寻址(1)直接寻址方式直接寻址方式 指令中直接给出操作数的偏移地址。指令中直接给出操作数的偏移地址。段地址默认在段地址默认在DS中,可用段超越前缀来改变。中,可用段超越前缀来改变。 设设 DS=ES=1492H 16920H=12H,1

25、6921H=34H MOV AH, 2000H ;AH=12H MOV AX, ES:2000H ;AX=3412H 参考:图参考:图2-8MOV AX , 1050H假设假设DS = 4500H执行后:执行后:AX = 2762H用变量名来提供地址用变量名来提供地址 实际编程时,通常是通过定义变量,使用变量实际编程时,通常是通过定义变量,使用变量名来指代该变量所在内存单元的偏移地址。名来指代该变量所在内存单元的偏移地址。 WVAR DW 3412HWVAR DW 3412H;设;设WVARWVAR的偏移地址为的偏移地址为2000H2000HMOV AXMOV AX,2000H2000H;AX

26、=3412H AX=3412H MOV AXMOV AX,WVAR WVAR ;AX=3412HAX=3412H,MOV AXMOV AX, WVAR WVAR ;AX=3412HAX=3412H,中括号可省略中括号可省略(2)寄存器间接寻址方式寄存器间接寻址方式 操作数的偏移地址存放于寄存器操作数的偏移地址存放于寄存器BX/BP/SI/DIBX/BP/SI/DI中。中。 (1)(1)使用寄存器使用寄存器BPBP寻址时,默认的段寄存器为寻址时,默认的段寄存器为SSSS;(2)(2)使用其他寄存器寻址,默认的段寄存器为使用其他寄存器寻址,默认的段寄存器为DSDS。(3)(3)均可以使用段超越前缀

27、改变。均可以使用段超越前缀改变。 设设DS=1492HDS=1492H,ES=1492HES=1492H,BX=2000HBX=2000H,16920H=12H16920H=12H MOV ALMOV AL, BX BX;AL=12HAL=12H MOV DHMOV DH,ES:BXES:BX;DH=12HDH=12H(3)寄存器相对寻址方式寄存器相对寻址方式 操作数的偏移地址是寄存器操作数的偏移地址是寄存器(BX/BP/SI/DI)(BX/BP/SI/DI)的内的内容与有符号的容与有符号的8 8位或位或1616位位移量之和。位位移量之和。 设设DS=ES=1492HDS=ES=1492H,S

28、I=2000HSI=2000H,16926H=12H16926H=12H MOV ALMOV AL, SI+06H SI+06H;AL=12HAL=12H MOV DHMOV DH,ES:SI+06HES:SI+06H;DH=12HDH=12H(4)基址变址寻址方式基址变址寻址方式 操作数的偏移地址是一个基址类寄存器操作数的偏移地址是一个基址类寄存器( (BXBX或或BPBP) )的内容与另一个变址类寄存器的内容与另一个变址类寄存器( (SISI或或DIDI) )的内容之的内容之和。和。 设设DS=1492HDS=1492H,BX=2000HBX=2000H,SI=06HSI=06H,1692

29、6H=12H16926H=12H MOV ALMOV AL,BXBXSISI;AL=12HAL=12H(5)相对基址变址寻址方式相对基址变址寻址方式 操作数的偏移地址是一个基址类寄存器操作数的偏移地址是一个基址类寄存器( (BXBX或或BPBP) )的内容,一个变址类寄存器的内容,一个变址类寄存器( (SISI或或DIDI) )的内容与有的内容与有符号的符号的8 8位或位或1616位位移量之和。位位移量之和。 设设DS=1492HDS=1492H,BX=2000HBX=2000H,DI=04HDI=04H,16926H=12H16926H=12H MOV ALMOV AL,BXBXDI+02H

30、DI+02H;AL=12HAL=12H 例:下面分别采用的是那种寻址方式例:下面分别采用的是那种寻址方式MOV AX, DX ; _MOV AX, DX ; _MOV AX, 3541H ; _MOV AX, 3541H ; _MOV AX, SI ; _MOV AX, SI ; _MOV AX, BP+5678H ; _MOV AX, BP+5678H ; _ 例:下面几种寻址方式是否正确例:下面几种寻址方式是否正确MOV AX, DX ( )MOV AX, DX ( )MOV AX, 1200 ( )MOV AX, 1200 ( )寄存器寻址寄存器寻址寄存器间接寻址寄存器间接寻址立即数寻址

31、立即数寻址寄存器相对寻址寄存器相对寻址X XMOV AX,1200H ; _MOV AX,1200H ; _MOV AX,BX ; _MOV AX,BX ; _MOV AX,1200H ; _MOV AX,1200H ; _MOV AX,BX ; _MOV AX,BX ; _MOV AX,BX+1100H ; _MOV AX,BX+1100H ; _MOV AX,BX+SI ; _MOV AX,BX+SI ; _MOV AX,BXSI+1100H ; _MOV AX,BXSI+1100H ; _ 课后习题课后习题2.8:2.8:AX=1200H,AX=1200H,立即数寻址立即数寻址20103

32、H20103H78H78H20102H20102H56H56H20101H20101H34H34H20100H20100H12H12H21203H21203H65H65H21202H21202HB7HB7H21201H21201H4CH4CH21200H21200H2AH2AHDS=2000HDS=2000HBX=0100HBX=0100HSI=0002HSI=0002HAX=0100H,AX=0100H,寄存器寻址寄存器寻址AX=4C2AH,AX=4C2AH,存储器直接寻址存储器直接寻址AX=3412H,AX=3412H,寄存器间接寻址寄存器间接寻址AX=4C2AH,AX=4C2AH,寄存器

33、相对寻址寄存器相对寻址AX=7856H,AX=7856H,基址变址寻址基址变址寻址AX=65B7H,AX=65B7H,相对基址变址寻址相对基址变址寻址第第2章章 微处理器指令系统微处理器指令系统 微处理器的内部结构微处理器的内部结构 8086/8088的寻址方式的寻址方式 8086/8088指令系统指令系统8086/8088指令系统指令系统 数据传送类指令数据传送类指令 算术运算类指令算术运算类指令 按位操作类指令按位操作类指令 控制转移类指令控制转移类指令 处理器控制指令处理器控制指令操作数的表示符号的约定操作数的表示符号的约定 i8 i8 8 8位立即数,位立即数, i16i161616位

34、立即数位立即数 immimm代表代表i8i8或或i16i16 r8 r8 8 8位寄存器,位寄存器, r16r161616位寄存器位寄存器 regreg代表代表r8r8或或r16r16 segseg段寄存器段寄存器CSCS、DSDS、ESES、SSSS m8 m8 8 8位存储器操作数位存储器操作数 m16m161616位存储器操作数位存储器操作数 memmem代表代表m8m8或或m16m16 destdest目的操作数目的操作数 src src 源操作数源操作数MOV传送指令传送指令 MOV reg/memMOV reg/mem,imm imm ;立即数送寄存器或主存;立即数送寄存器或主存

35、MOV reg/mem/segMOV reg/mem/seg,reg reg ;寄存器送;寄存器送( (段段) )寄存器寄存器 ;寄存器送主存;寄存器送主存 MOV reg/segMOV reg/seg,mem mem ;主存送;主存送( (段段) )寄存器寄存器 MOV reg/memMOV reg/mem,seg seg ;段寄存器送寄存器;段寄存器送寄存器 ;段寄存器送主存;段寄存器送主存MOV指令注意事项指令注意事项(1) 目的操作数不能是立即数。目的操作数不能是立即数。MOV 2000MOV 2000,AXAX ;错误指令错误指令 两个操作数不能都是存储器操作数。两个操作数不能都是存

36、储器操作数。假设假设WV1WV1、WV2WV2是两个字变量是两个字变量MOV WV1MOV WV1,WV2WV2 ;错误指令错误指令 两个操作数不能都是段寄存器。两个操作数不能都是段寄存器。MOV DSMOV DS,ES ES ;错误指令错误指令 立即数不能直接传送至段寄存器。立即数不能直接传送至段寄存器。MOV DSMOV DS,2000H 2000H ;错误指令错误指令MOV指令注意事项指令注意事项(2) 不能手工修改不能手工修改CSCS寄存器。寄存器。MOV CSMOV CS, , AX AX ;错误指令错误指令 指令指针指令指针IPIP不能作为操作数。不能作为操作数。MOV AXMOV

37、 AX, , IP IP ;错误指令错误指令 目的操作数与源操作数必须类型一致。目的操作数与源操作数必须类型一致。MOV AX, BH MOV AX, BH ;错误指令错误指令 无寄存器,则需说明主存操作数的类型无寄存器,则需说明主存操作数的类型 MOV 2000H,23H MOV 2000H,23H ;错误指令错误指令MOV BYTE PTR 2000H, 23HMOV BYTE PTR 2000H, 23H; 正确正确将字变量将字变量WV2WV2的内容传送至字变量的内容传送至字变量WV1WV1将将ESES的内容传送至的内容传送至DSDS将段寄存器将段寄存器DSDS赋初值赋初值2000H20

38、00HMOV指令练习指令练习MOV AX,WV2MOV AX,WV2MOV WV1,AXMOV WV1,AXMOV AX,ESMOV AX,ESMOV DS,AXMOV DS,AXMOV AX,2000HMOV AX,2000HMOV DS,AXMOV DS,AXXCHG交换指令交换指令(exchange) XCHG regXCHG reg,reg/memreg/mem; XCHG reg/memXCHG reg/mem,regreg; 源操作数与目的操作数内容互换源操作数与目的操作数内容互换 MOV AXMOV AX,1234H1234H ;AH=12HAH=12H,AL=34HAL=34H

39、XCHG AHXCHG AH,AL AL ;AH=34HAH=34H,AL=12HAL=12H 不能在内存单元之间交换数据不能在内存单元之间交换数据。 段寄存器不能作为操作数段寄存器不能作为操作数。XCHG指令练习指令练习 将字变量将字变量A A、B B的内容互换的内容互换A DW 1234HA DW 1234HB DW 5678HB DW 5678H方法方法1 1: MOV AXMOV AX,B B XCHG AXXCHG AX,A A MOV BMOV B,AXAX方法方法2 2: MOV AXMOV AX,A A MOV BXMOV BX,B B MOV AMOV A,BXBX MOV

40、BMOV B,AXAXXLAT换码换码指令指令(查表指令)(查表指令) 先在主存中建立一字节表格;先在主存中建立一字节表格;将表格的首地址存放于将表格的首地址存放于BXBX寄存器寄存器中;中;将欲查元素的序号存放于将欲查元素的序号存放于ALAL寄存器寄存器中;中;执行执行XLATXLAT,则,则ALAL中的内容即为表中查到的元素。中的内容即为表中查到的元素。WVAR DB 30H,31H,32H,33H,34H,35H,36H DB 37H,38H,39H ; 数字的数字的ASCII码码MOV BX, OFFSET WVARMOV AL, 3XLAT ; AL=33H堆栈堆栈 内存中开辟的用于

41、内存中开辟的用于暂时存放数据暂时存放数据的一个特殊区域的一个特殊区域。 按按先进后出先进后出或后进先出的原则管理。或后进先出的原则管理。 堆栈段的段地址存放于段寄存器堆栈段的段地址存放于段寄存器SSSS中,偏移地址中,偏移地址存放于寄存器存放于寄存器SPSP中。中。堆栈操作指令堆栈操作指令 PUSH r16/m16/seg PUSH r16/m16/seg ;SP=SP-2SP=SP-2 ;SS:SP=r16/m16/segSS:SP=r16/m16/seg POP r16/m16/seg POP r16/m16/seg ;r16/m16/seg=SS:SPr16/m16/seg=SS:SP

42、;SP=SP+2SP=SP+2堆栈操作指令示例堆栈操作指令示例 MOV AXMOV AX,1234H1234HMOV BXMOV BX,5678H5678HPUSH AXPUSH AXPUSH BXPUSH BXPOP CXPOP CXPOP DXPOP DX入栈操作示意入栈操作示意SPSP1212H H3434H HSPSP1212H H3434H H5656H H7878H HSPSP出栈操作示意出栈操作示意PUSH AXPUSH AXPUSH PUSH BXBXPOPPOP C CX XPOPPOP D DX X堆栈操作注意事项堆栈操作注意事项堆栈操作均为堆栈操作均为1616位位(字)操

43、作;(字)操作;不能不能将将立即数立即数压入堆栈;压入堆栈;进栈和出栈的操作伴随着堆栈指针进栈和出栈的操作伴随着堆栈指针SPSP的调整,的调整,SS:SPSS:SP永远指向堆栈段的栈顶。永远指向堆栈段的栈顶。堆栈只有一个出口。堆栈只有一个出口。堆栈指令练习堆栈指令练习 利用堆栈利用堆栈将将两个两个字变量字变量A A、B B的内容互换的内容互换A DW 1234HA DW 1234HB DW 5678HB DW 5678HPUSH APUSH APUSH BPUSH BPOP APOP APOP BPOP B标志操作指令标志操作指令 CLC CLC ;CF=0CF=0 ;Clear Carry

44、FlagClear Carry Flag STC STC ;CF=1CF=1 ;Set Carry Flag Set Carry Flag CMC CMC ;CFCF取反取反 ;Complement Carry FlagComplement Carry FlagLEA指令指令(Load Effective Address) LEA r16LEA r16,memmem;r16=memr16=mem的偏移地址的偏移地址 例如:例如: LEA BXLEA BX,SI+06HSI+06H;若;若SI=1000HSI=1000H,则,则BX=1006HBX=1006HLEA指令示例指令示例 WVAR D

45、W 1234HWVAR DW 1234H;设其偏移地址为;设其偏移地址为0001H0001H 请说明下列语句的执行结果请说明下列语句的执行结果 MOV BXMOV BX,WVAR WVAR ;_LEA SILEA SI,WVAR WVAR ;_MOV DXMOV DX,SI SI ;_BX=1234HBX=1234HSI=0001HSI=0001HDX=1234HDX=1234H加减法指令加减法指令 ADD destADD dest,srcsrc;dest=dest+srcdest=dest+src SUB destSUB dest,srcsrc;dest=dest-srcdest=dest-

46、srcADD加法指令加法指令(Addition) ADD reg ADD reg ,imm/reg/memimm/reg/memADD mem ADD mem ,imm/regimm/reg 目的操作数不能为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。 按定义影响按定义影响6 6个状态标志位。个状态标志位。SUB减法指令减法指令(Subtraction) SUB regSUB reg,imm/reg/memimm/reg/memSUB memSUB mem,imm/regimm/reg 目的操作数不能为

47、立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。 按定义影响按定义影响6 6个状态标志位。个状态标志位。加减法指令示例加减法指令示例 MOV AHMOV AH,96H96H ;ADD AHADD AH,78H78H ;ADD AHADD AH,78H78H ;(1) (1) AH=0EH AH=0EH (0000000011101110B B) CF=1CF=1,PF=0PF=0,AF=0AF=0,ZF=0ZF=0,SF=0SF=0,OF=0OF=0(2) (2) AH=86HAH=86H (1000100

48、001100110B B) CF=0CF=0,PF=0PF=0,AF=1AF=1,ZF=0ZF=0,SF=1SF=1,OF=1OF=1带进带进/ /借位加减法指令借位加减法指令 ADC destADC dest,srcsrc;dest=dest+src+CFdest=dest+src+CF SBB destSBB dest,srcsrc;dest=dest-src-CFdest=dest-src-CFADC指令指令(Add with Carry) ADC regADC reg,imm/reg/memimm/reg/memADC memADC mem,imm/regimm/reg 目的操作数不能

49、为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。 按定义影响按定义影响6 6个状态标志位。个状态标志位。SBB指令指令(Subtract with Borrow) SBB reg SBB reg ,imm/reg/memimm/reg/memSBB mem SBB mem ,imm/regimm/reg 目的操作数不能为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。 按定义影响按定义影响6 6个状态标志位。个状态标志

50、位。ADC指令指令和和SBB指令指令的应用的应用 ADCADC指令用于与指令用于与ADDADD指令结合实现指令结合实现多精度数的加法多精度数的加法。 先将两个操作数的低先将两个操作数的低1616位相加位相加( (用用ADDADD指令指令) )。 再加高位部分、并将进位加到高位再加高位部分、并将进位加到高位( (用用ADCADC指令指令) )。 SBBSBB指令用于与指令用于与SUBSUB指令结合实现指令结合实现多精度数的减法多精度数的减法。 先将两个操作数的低先将两个操作数的低1616位相减位相减( (用用SUBSUB指令指令) )。 再减高位部分、并减去借位再减高位部分、并减去借位( (用用

51、SBBSBB指令指令) )。带进带进/ /借位加减法指令示例借位加减法指令示例X DD 12345678HX DD 12345678HY DD 9ABCDEF0HY DD 9ABCDEF0HMOV AXMOV AX,WORD PTR XWORD PTR X ; ;ADD AXADD AX,WORD PTR YWORD PTR Y ; ;MOV DXMOV DX,WORD PTR X+2WORD PTR X+2 ; ;ADC DXADC DX,WORD PTR Y+2WORD PTR Y+2 ; ;AX=5678H AX=5678H AX=3568H,CF=1 AX=3568H,CF=1 DX=

52、1234H,CF=1 DX=1234H,CF=1 DX=ACF1H,CF=0 DX=ACF1H,CF=0 CMP比较指令比较指令(Compare) CMP destCMP dest,srcsrc;dest-srcdest-src 按定义影响按定义影响6 6个状态标志位。个状态标志位。 CMPCMP指令通过减法运算影响状态标志位,指令通过减法运算影响状态标志位,常用于比较两个操作数的大小关系。常用于比较两个操作数的大小关系。 CMPCMP指令执行前后两操作数内容均不变。指令执行前后两操作数内容均不变。比较大小与标志位比较大小与标志位 若若ZF=1ZF=1,则相等;,则相等; 若若ZF=0ZF=0

53、,则不等。,则不等。 无符号数,主要看无符号数,主要看CFCF:若若CF=1CF=1,为小于(有借位),为小于(有借位) 若若CF=0CF=0,为大于(无借位),为大于(无借位) 有符号数,看有符号数,看OFOF和和SFSF关系(了解即可):关系(了解即可): 若若OFSFOFSF,为小于;,为小于; 若若OF=SFOF=SF,为大于。,为大于。INC增量指令增量指令(Increment) INC reg/memINC reg/mem;reg/mem=reg/mem+1reg/mem=reg/mem+1 常用于计数器和地址指针的调整。常用于计数器和地址指针的调整。 不影响不影响CFCF标志,但

54、影响其它状态标志位标志,但影响其它状态标志位。DEC减量指令减量指令(Decrement) DEC reg/memDEC reg/mem;reg/mem=reg/mem-1reg/mem=reg/mem-1 常用于计数器和地址指针的调整。常用于计数器和地址指针的调整。 不影响不影响CFCF标志,但影响其它状态标志位标志,但影响其它状态标志位。NEG指令指令(Negate) NEG reg/memNEG reg/mem;reg/mem=0-reg/memreg/mem=0-reg/mem 按定义影响按定义影响6 6个状态标志位。个状态标志位。 注意事项(理解,不要死记):注意事项(理解,不要死记

55、): 通常情况下,通常情况下,OF=0OF=0(只有(只有当操作数为当操作数为 - -128128 或或 - -3276832768 时,操作数不变,时,操作数不变,OFOF= =1 1)a)a)通常通常情况下,情况下,CF=1CF=1,除非操作数为,除非操作数为0 0。MUL无符号乘法指令无符号乘法指令(Multiplication) MUL r8/m8 MUL r8/m8 ;AX=ALAX=ALr8/m8r8/m8 隐含操作数隐含操作数AX,ALAX,AL MUL r16/m16MUL r16/m16;DX.AX=AXDX.AX=AXr16/m16r16/m16 隐含操作数隐含操作数DX,

56、AXDX,AXIMUL有符号乘法指令有符号乘法指令 (Integer Multiply) IMUL r8/m8 IMUL r8/m8 ;AX=ALAX=ALr8/m8r8/m8隐含操作数隐含操作数AX,ALAX,AL IMUL r16/m16IMUL r16/m16;DX.AX=AXDX.AX=AXr16/m16r16/m16 隐含操作数隐含操作数DX,AXDX,AX乘法指令对标志位的影响乘法指令对标志位的影响 乘法指令乘法指令只影响只影响OFOF和和CFCF,对其它状态标志,对其它状态标志无定义无定义。 对于无符号乘法,若乘积中对于无符号乘法,若乘积中AH=00H(8AH=00H(8位乘法位

57、乘法) )或或DX=0000H(16DX=0000H(16位乘法位乘法) ),OF=CF=0OF=CF=0( (说明没有超出乘数说明没有超出乘数的表达范围的表达范围) );否则均为;否则均为1 1。 对于有符号乘法,若乘积的高一半是低一半的对于有符号乘法,若乘积的高一半是低一半的符号符号扩展扩展,则,则OF=CF=0OF=CF=0;否则均为;否则均为1 1。DIV无符号除法指令无符号除法指令(Division) DIV r8/m8 DIV r8/m8 ;AL=AXAL=AXsrcsrc的商的商 ;AH=AXAH=AXsrcsrc的余的余 DIV r16/m16DIV r16/m16 ;AX=D

58、X.AXAX=DX.AXsrcsrc的商的商 ;DX=DX.AXDX=DX.AXsrcsrc的余的余IDIV有符号除法指令有符号除法指令(Integer Division) IDIV r8/m8 IDIV r8/m8 ;AL=AXAL=AXsrcsrc的商的商 ;AH=AXAH=AXsrcsrc的余的余 IDIV r16/m16IDIV r16/m16 ;AX=DX.AXAX=DX.AXsrcsrc的商的商 ;DX=DX.AXDX=DX.AXsrcsrc的余的余除法指令对标志位的影响除法指令对标志位的影响 除法指令对除法指令对6 6个状态标志位均无定义。个状态标志位均无定义。 但当除数为但当除

59、数为0 0或商溢出时将产生编号为或商溢出时将产生编号为0 0的内的内部中断,指示除法错误部中断,指示除法错误(并不是将(并不是将OFOF置置1 1)符号扩展指令符号扩展指令CBW,CWD CBW CBW (Convert Byte to Word)(Convert Byte to Word) ALAL符号扩展成符号扩展成AXAX 若若ALAL的最高有效位是的最高有效位是0 0,则,则AH=00HAH=00H; 若若ALAL的最高有效位是的最高有效位是1 1,则,则AH=FFHAH=FFH; C CWDWD (Convert (Convert WordWord to to D DWord)Wor

60、d) AXAX符号扩展成符号扩展成DX.DX.AXAX 若若AXAX的最高有效位是的最高有效位是0 0,则,则DX=0000HDX=0000H; 若若AXAX的最高有效位是的最高有效位是1 1,则,则DX=FFFFHDX=FFFFH;符号扩展指令符号扩展指令CBW,CWD例例: :MOV ALMOV AL, 64H 64H ;CBW CBW ;ADD AXADD AX, 0FF00H 0FF00H ;CWD CWD ;AL=64HAL=64HAX=0064HAX=0064HAX=FF64HAX=FF64HDX.AX=FFFFFF64HDX.AX=FFFFFF64H符号扩展指令不改变数值大小符号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论