xu微机原理及应用-ch4_第1页
xu微机原理及应用-ch4_第2页
xu微机原理及应用-ch4_第3页
xu微机原理及应用-ch4_第4页
xu微机原理及应用-ch4_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

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

文档简介

1、4.1 汇编语言指令的格式与寻址方式汇编语言指令的格式与寻址方式4.2 数据传输类指令数据传输类指令4.3 算术加法类指令算术加法类指令4.4 逻辑操作类指令逻辑操作类指令4.5 程序转移类指令程序转移类指令4.6 字符串操作指令(了解)字符串操作指令(了解)4.7 处理器控制类指令(了解)处理器控制类指令(了解)指令系统指令系统 根据设计使某型计算机所具有的指令的集合便根据设计使某型计算机所具有的指令的集合便是计算机的指令系统。是计算机的指令系统。l指令的表达形式:机器码指令和汇编语言指令。指令的表达形式:机器码指令和汇编语言指令。 用二进制代码表示的指令称为用二进制代码表示的指令称为机器码

2、指令机器码指令或或目目标代码指令标代码指令。 因为机器码指令难以记忆和编程,就将指令操因为机器码指令难以记忆和编程,就将指令操作功能的英文缩写作为指令的符号,称为助记符。作功能的英文缩写作为指令的符号,称为助记符。用助记符表示的指令便于记忆和编程,但不能被用助记符表示的指令便于记忆和编程,但不能被计算机直接识别和执行,必须经过汇编转换为机计算机直接识别和执行,必须经过汇编转换为机器码后才能执行器码后才能执行,汇编语言指令由此而得名。汇编语言指令由此而得名。 例:一条加法指令的机器码为:02CFH = 000000 10 11001111;前6个0,表示加法操作,为操作码字段,剩余部分说明操作数

3、。该指令的助记符为: ADD CL,BH,即实现:CL CL + BH。l 操作数可以有一个、二个或更多,通常分别称为单操操作数可以有一个、二个或更多,通常分别称为单操作数指令作数指令( (一地址指令一地址指令) )、双操作数指令、双操作数指令 ( (二地址指令二地址指令) )。 ADD CL,BH 是双操作数指令; INC AL 是单操作数指令。l 在双操作数指令格式中,提供两个操作数,分别称为在双操作数指令格式中,提供两个操作数,分别称为目标操作数目标操作数( (前面的那个前面的那个) )和和源操作数源操作数( (后面的那个后面的那个) )。当指。当指令执行时,两个操作数同时参与运算,并把

4、运算结果返回令执行时,两个操作数同时参与运算,并把运算结果返回目标操作数中,也就是说,目标操作数中,也就是说,目标操作数原有内容在运算后目标操作数原有内容在运算后将会改变。将会改变。4.1 汇编语言指令的格式和寻址方式汇编语言指令的格式和寻址方式一、一、8086汇编语言指令的格式汇编语言指令的格式 标号标号:(:(助记符助记符) 操作数操作数 ,操作数,操作数 ;注释注释 1. 标号是给该指令所在地址取的名字,必须后跟标号是给该指令所在地址取的名字,必须后跟“:”,它可以缺省,是可供选择的标识符。,它可以缺省,是可供选择的标识符。2. 指令助记符是指令功能的代表符号,它是指令语指令助记符是指令

5、功能的代表符号,它是指令语句中的关键字段,不可缺省,它表示本指令的操句中的关键字段,不可缺省,它表示本指令的操作功能。作功能。3. 操作数是参加指令操作的数据操作数是参加指令操作的数据 ,可缺省,可缺省l源操作数源操作数指令中参与操作的数据,源地址指令中参与操作的数据,源地址l目的操作数目的操作数指令操作结果,目的地址指令操作结果,目的地址4. 注释可缺省,必须用注释可缺省,必须用“;”指明。指明。例:例: MOV BX, 1000H ;将;将1000H送送BX INC CX ;将;将CX内容加内容加1 NOP ;空操作;空操作.操作码操作码05H05H代代码码段段05H05H.ALAL指指令

6、令二、二、8086的寻址方式的寻址方式寻址方式寻址方式寻找操作数所在寻找操作数所在地址地址的方式。七种的方式。七种 立即数寻址立即数寻址 例:例: MOV AL, 05H ; 将将05H送入送入AL1. MOV AX, 3064H ; 3064H AX, 64HAL , 30HAH存储单元或某存储单元或某个寄存器个寄存器.操作码操作码64H64H30H30H代代码码段段64H64H.30H30HALALAHAH指指令令2. 寄存器寻址寄存器寻址 操作数在操作数在CPU内部寄存器中,指令指定寄存器名称。内部寄存器中,指令指定寄存器名称。 对于对于16位操作数,寄存器可以是位操作数,寄存器可以是:

7、 AX, BX, CX, DX, SP, BP, SI, DI, DS, CS, ES, SS 对于位操作数,寄存器可以是对于位操作数,寄存器可以是: AL, AH, BL, BH, CL, CH, DL, DH注意:注意:(1)目标操作数)目标操作数不能不能是代码段寄存器(是代码段寄存器(CS);两个操作数);两个操作数不能不能同时是同时是段寄段寄存器。存器。(2)当指令中的源操作数和目标操作数均为寄存器时,必须采用)当指令中的源操作数和目标操作数均为寄存器时,必须采用同样长度同样长度的寄存器;的寄存器;(3)这种寻址方式因为操作数在寄存器中,寄存器在)这种寻址方式因为操作数在寄存器中,寄存

8、器在CPU内部,操作就在内部,操作就在CPU内部进行,不需要访问存储器来取得操作数,因此内部进行,不需要访问存储器来取得操作数,因此运算速度较高运算速度较高。(4)可以对源操作数采用寄存器寻址,也可以对目的操作数采用寄存器寻)可以对源操作数采用寄存器寻址,也可以对目的操作数采用寄存器寻址,还可以两者都采用寄存器寻址方式。址,还可以两者都采用寄存器寻址方式。不包含不包含IPIP寄寄存器存器例:例:指令执行前指令执行前:(AX)3064 (SS)1234 MOV SS,AX指令执行后指令执行后: (SS)3064H (AX)保持不变。)保持不变。 指令执行前:指令执行前:指令执行后指令执行后:寄存

9、器寻址方式寄存器寻址方式3. 直接寻址直接寻址 操作数操作数地址的地址的16位偏移量,直接包含在指令中位偏移量,直接包含在指令中,存放在代码段中指令操作码之后,存放在代码段中指令操作码之后,但但操作数一般存放操作数一般存放在数据段在数据段(DS)中中,必须先求出操作数的,必须先求出操作数的物理地址物理地址,然,然后再访问存储器才能取得操作数。后再访问存储器才能取得操作数。 物理地址物理地址 : PA16d(DS)+EA注意:注意:(1)直接寻址方式适用于处理单个变量。)直接寻址方式适用于处理单个变量。(2)直接寻址方式)直接寻址方式隐含的段寄存器是隐含的段寄存器是 DS,8086允许段允许段跨

10、越,即允许使用跨越,即允许使用 CS、 SS 、ES作为段寄存器,这时,作为段寄存器,这时,必须在令中特别标明。必须在令中特别标明。例:例: MOV AX,3100H (DS)=6000H , (63100H)=3050H 则则:(AX)=3050H又:用符号地址代替数值地址。又:用符号地址代替数值地址。 MOV AX,VALUE 或或 MOV AX,VALUE VALUE有效操作数单元的有效操作数单元的符号地址。符号地址。如:如:VALUE在附加段中,在附加段中,则应则应指定段跨越。指定段跨越。 MOV AX,ES:VALUE 或或 MOV AX,ES:VALUE直接寻址方式直接寻址方式【例

11、】设【例】设 DS=4000H,(42000H)=12H,(42001H)=34H,执行,执行指令指令 MOV AX,2000H后,后,AX = ? 根据指令中给出的有效地址得到存储单元的物理地址:l DS 16 + 2000H = 42000H 把该内存单元开始的两个字节的内容传送到AX中。低地址单元内容传送到AL中,高地址单元内容传送到AH中。 AX = 3412H 执行过程如图所示: 说明:直接寻址允许数据存于附加段、堆栈段、代码段,这称为“段超越”,此时,需要段说明,例如数据存于附加段中,操作数物理地址为:ES10H + 0100H。存储器操作码00H20H34H 12HAHAL代码段

12、直接寻址示意图12H34H数据段AXDS=4000H 10H40000H 2000H42000H42000H4. 寄存器间接寻址方式寄存器间接寻址方式 操作数在操作数在存储器(内存)存储器(内存)中中, 操作数地址的操作数地址的16位位偏移量包含在偏移量包含在: BP、BX、SI、DI寄存器中寄存器中。 (1) 若选择若选择SI、DI、BX作为间接寻址作为间接寻址 操作数一般在现行数据段区域中,用操作数一般在现行数据段区域中,用(DS)作为作为段地址。段地址。 即操作数物理地址为:即操作数物理地址为: 物理地址物理地址PA=16 d (DS)+(BX) 物理地址物理地址PA=16 d (DS)

13、+(SI) 物理地址物理地址PA=16 d (DS)+(DI)例:例: MOV BX,DI (DS)= 6000H (DI)= 2000H PA=62000H(62000H)=50A0H (BX)=50A0H若采用直接寻址方式:若采用直接寻址方式:MOV BX, 2000H寄存器间接寻址方式寄存器间接寻址方式(2) 若选择若选择寄存器寄存器BP作为间作为间接寻址接寻址操作数在堆栈段区域中,操作数在堆栈段区域中,用用SS寄存器的内容作为段寄存器的内容作为段地址。地址。操作数物理地址操作数物理地址: PA=16d(SS)+(BP)例:例:MOV BP, AX执行前:执行前:(SS)=1000H ,

14、 (BP)=3000H , (AX)=1234H执行后:执行后:PA=13000H (13000H)=1234H寄存器间接寻址方式寄存器间接寻址方式(3) 用用 SI、DI、BX 、BP作为间接寻址允许段跨越作为间接寻址允许段跨越 指令中可以指定段跨越前缀来取得其他段中的数指令中可以指定段跨越前缀来取得其他段中的数据。据。例:例:MOV ES:DI, AX MOV DX, DS:BP这种寻址方法可以用于表格处理。这种寻址方法可以用于表格处理。5.基址寻址方式(基址寻址方式(BX,BP) 操作数的有效地址是一个基址寄存器的内容和指操作数的有效地址是一个基址寄存器的内容和指令中指定的令中指定的8位

15、或位或16位位移量(位位移量(displacement)之和。)之和。EA=BXBP+8位位移量位位移量16位位移量位位移量 用用BX寄存器进行基址寻址时,默认的段寄存器为寄存器进行基址寻址时,默认的段寄存器为数据段数据段DS。 用用BP寄存器进行基址寻址时,默认的段寄存器为寄存器进行基址寻址时,默认的段寄存器为堆栈段堆栈段SS。 例:例: MOV AX,COUNTBP或或MOV AX, COUNT+BP或或MOV AX, COUNT+BP COUNT为为16位位移量。位位移量。指令执行前指令执行前: (SS)=5000H, (BP)=3000H, COUNT=2040H, (AX)=1234

16、H指令执行后指令执行后: EA=5040H PA=55040H (55040H)=5548H (AX)=5548H 基址寻址方式基址寻址方式 MOV AX,COUNTBP6. 变址寻址方式(变址寻址方式(SI,DI) 操作数的有效地址是一个变址寄存器的内容和指令操作数的有效地址是一个变址寄存器的内容和指令中指定的中指定的8位或位或16位位移量之和,变址寄存器名均有指位位移量之和,变址寄存器名均有指令指定。令指定。 所用寄存器为所用寄存器为SI和和DI,它们分别称为源变址寄存器,它们分别称为源变址寄存器和目的变址寄存器。这两个寄存器中的内容在串操作和目的变址寄存器。这两个寄存器中的内容在串操作指

17、令执行过程中会自动修改,以指向下一个操作数。指令执行过程中会自动修改,以指向下一个操作数。 默认为段寄存器为默认为段寄存器为DS。EA=SIDI+8位位移量位位移量16位位移量位位移量例:例: MOV AX, DI+COUNT或或 MOV AX, COUNTDI执行指令前执行指令前: (DS)=3200H, COUNT=0456H, (DI) =1094H (334EAH)=67H (334EBH)=45H执行指令后执行指令后: EA=14EAH PA=334EAH (AX)=4567H变址寻址方式变址寻址方式 7. 基址加变址寻址方式基址加变址寻址方式 操作数有效地址是一个基址寄存器和一个变

18、址寄操作数有效地址是一个基址寄存器和一个变址寄存器的内容和存器的内容和8位或位或16位位移量之和位位移量之和 。EA=SIDI+8位位移量位位移量16位位移量位位移量BXBP+ 当基址寄存器选用当基址寄存器选用BX时,数据隐含存于数据段时,数据隐含存于数据段DS中;中;当基址寄存器选用当基址寄存器选用BP时,数据隐含存于堆栈段时,数据隐含存于堆栈段SS中,中,即操作数的物理地址为:即操作数的物理地址为: PA1 = DS 10H + EA1或 PA2 = SS 10H + EA2例: MOV AX, MASKBXDIMOV AX, MASK BX+DIMOV AX, MASX+BX+DI执行指

19、令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H执行指令后:EA=2A7AHPA=32A7AH(AX)=4050H 基址加变址基址加变址MOV AX, MASK+BX+DI【例】设【例】设 SS=2000HSS=2000H,BP=1000HBP=1000H,SI=0100HSI=0100H,(21105H)=78H(21105H)=78H,执行指令,执行指令 MOV ALMOV AL,5BPSI5BPSI后,后,AL = ?AL = ? 根据指令中给出的寄存器名及寄存器内容,得到存储单元的物理地址:l SS 16 + BP +

20、SI + disp = 21105H 把该内存单元中内容传送到AL中。 AL = 78H 执行过程如图所示: 存储器78H堆栈段相对基址变址寻址示意图78HAL21105HSS10H BP SI disp 21105HSS=2000H BP=1000H SI=0100H disp=5用途:用途: 这种寻址方式为堆这种寻址方式为堆栈处理提供方便:栈处理提供方便: (BP) 栈顶(一栈顶(一般般 BP 可指向栈顶)可指向栈顶) 从栈顶到数组的首从栈顶到数组的首地址可以用位移量地址可以用位移量表示表示(MASK). 变址寄存器变址寄存器(SI)或或(DI)指向数组中指向数组中某个元素。某个元素。低地

21、址低地址高地址高地址BP栈顶栈顶DI位移量位移量A(0)A(1)A(2)A(n) 8086的指令系统的指令系统 8086的指令系统中共有的指令系统中共有92种基本指令,可种基本指令,可以分成以分成6个功能组:个功能组:1数据传输数据传输2算术运算算术运算3逻辑运算和移位指令逻辑运算和移位指令4程序转移程序转移5字符串操作(了解)字符串操作(了解)6处理器控制(了解)处理器控制(了解)4.2 数据传送指令数据传送指令功能:功能: 负责把数据、地址或负责把数据、地址或立即数立即数传送到传送到寄存器或存寄存器或存储单元储单元。特点:特点: 它是计算机最基本、最重要的一种操作,使用它是计算机最基本、最

22、重要的一种操作,使用比例最高。比例最高。种类种类( (分四种分四种) ):(一)通用传送指令(一)通用传送指令(二)目标地址传送指令(二)目标地址传送指令(三)标志位传送指令(三)标志位传送指令(四)输入输出指令(四)输入输出指令 8086提供方便灵活的通用的传送操作,适用于大多提供方便灵活的通用的传送操作,适用于大多数操作数。数操作数。通用传送指令包括:通用传送指令包括: 1、传输指令、传输指令 MOV 2、堆栈操作指令、堆栈操作指令 PUSH POP 3、交换指令、交换指令 XCHG 4、换码指令、换码指令 XLAT1MOV dest, src ; (dest) (src) 目的目的 源源

23、 目的目的 源源功能:功能: (1)把一个字节)把一个字节(B)或一个字(或一个字(W)操作数由源传送)操作数由源传送至目的。至目的。(2)实现)实现: 寄存器寄存器 寄存器寄存器/存储器之间;存储器之间;立即数立即数寄存器寄存器/存储器存储器寄存器寄存器/存储器存储器段寄存器之间的数据传送。段寄存器之间的数据传送。 具体说,通用数据传送指令能实现:具体说,通用数据传送指令能实现: CPU内部寄存器之间的数据的任意传送内部寄存器之间的数据的任意传送(除了代(除了代码段寄存器码段寄存器CS和指令指针和指令指针IP以外)。以外)。例:例:MOV DL,CH; 8位寄存器位寄存器 8位寄存器位寄存器

24、 MOV AX,DX ; 16位寄存器位寄存器 16位寄存器位寄存器 MOV SI,BP MOV DS,BX ;通用寄存器;通用寄存器 段段寄存器寄存器 MOV AX, CS ;段段寄存器寄存器 通用寄存器通用寄存器立即数传送至立即数传送至CPU内部通用内部通用(专用)寄存器组专用)寄存器组 用于给寄存器(用于给寄存器(AX、BX、CX、DX、BP、SP、SI、DI)赋初值。)赋初值。 不能直接给段寄存器赋值不能直接给段寄存器赋值例:例: MOV CL,04H;立即数;立即数8位位寄存器寄存器 MOV AX,03FFH;立即数;立即数16位位寄存器寄存器 MOV WORD PTR SI ,05

25、7BH ;立即数;立即数存存储器储器MOV BYTE PTR MEM, 5 ;立即数;立即数存储器存储器CPU内部寄存器(除内部寄存器(除CS和和IP外)与存储器(所有寻外)与存储器(所有寻址方式)之间数据传送。可以实现一字节或一个字址方式)之间数据传送。可以实现一字节或一个字的传送。的传送。 例:例: MOV MEM , AX; 累加器累加器存储器存储器,直接寻址直接寻址MOV MEM ,DS;段寄存器;段寄存器存储器,直接寻址存储器,直接寻址MOV BX ,CX;寄存器;寄存器存储器,基址寻址存储器,基址寻址MOV AX , SI;存储器;存储器累加器,变址寻址累加器,变址寻址MOV DS

26、 , MEM ;存储器;存储器段寄存器,直接寻址段寄存器,直接寻址MOV CX , BX SI ;存储器;存储器累加器,基址加累加器,基址加变址变址 MOV MEM2 , MEM1 错错MOV AX , MEM1 对对MOV MEM2 , AX 对对 例例 : MOV DS,2000H 错。错。MOV AX, 2000HMOV DS , AX 对对 MOV ES , DS ; 错错MOV AX , DSMOV ES , AX例:例: MOV CS,AX ; 错错 MOV AX,CS ;对对 。 MOV IP, SI ;错错 MOV SI, IP ; 对。对。; 对对 。(2)段地址的默认)段地

27、址的默认BX、SI、DI寻址寻址默认段地址寄存器为默认段地址寄存器为DS,BP寻址寻址默认段地址寄存器默认段地址寄存器SS。(3)【了解】【了解】凡是遇到给凡是遇到给SS赋值指令,系统自动禁止赋值指令,系统自动禁止外部中断,执行本条指令和下条指令后,恢复对外部中断,执行本条指令和下条指令后,恢复对SS寄寄存器赋值前的中断开放情况。存器赋值前的中断开放情况。 这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SS和和SP寄存器赋值,同时又防止堆栈空间变动过程出现中寄存器赋值,同时又防止堆栈空间变动过程出现中断。断。(除(除SAHF、POPF指令以外)。指令以外)。2

28、 PUSH POP 这是两条堆栈操作指令。这是两条堆栈操作指令。堆栈堆栈按照按照先进后出先进后出原则组织的一段内存区域,原则组织的一段内存区域, 下推式的(规定堆栈设置在堆栈段内)改变下推式的(规定堆栈设置在堆栈段内)改变SP的内容的内容 随着随着推入堆栈内容增加,推入堆栈内容增加,SP的值减少。的值减少。 先进后出先进后出工作原则(工作原则(Last In First Out 简称简称LIFO) 可以可以用一条立即数传送指令给用一条立即数传送指令给SP赋赋值值,确定,确定SP在在SS段中的初始位置。段中的初始位置。 例:设:例:设:(SS)=9000H , 堆栈段为堆栈段为64KB则整个堆栈

29、段的物理地址范围为:则整个堆栈段的物理地址范围为: MOV SP, 0E200H ; (SP)=0E200H堆栈在内存中的情况如右图所示:堆栈在内存中的情况如右图所示:堆栈在内存中的情况堆栈在内存中的情况 (堆栈操作指令有两条堆栈操作指令有两条):格式:格式:PUSH src ; (SP) (SP)-2 ;(SP)+1,(SP) (src) 字字例:例: PUSH AX格式:格式:POP dest ;(dest) (SP)+1,(SP) ; (SP) (SP)+2例:例: POP BXq 调用子程序(或过程)或发生中断时要调用子程序(或过程)或发生中断时要保护断点的保护断点的地址地址,子程序或

30、中断返回时恢复断点。,子程序或中断返回时恢复断点。注意:注意:SP堆栈指针堆栈指针,始终指向栈顶。始终指向栈顶。SP初值用初值用MOV SP,i m来设定。来设定。q 存放存放CPU寄存器或存储器中暂时不使用的数据寄存器或存储器中暂时不使用的数据,使用数据时将其弹出:使用数据时将其弹出: PUSH AX; 将将(AX)入栈入栈(AX)(AX)使用数据时将其弹出:使用数据时将其弹出:POP BXq 调用子程序(或过程)或发生中断时要保调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。护断点的地址,子程序或中断返回时恢复断点。子程序嵌套子程序嵌套断点地址压入和弹出情况断

31、点地址压入和弹出情况 应用时注意:应用时注意: 堆栈操作都按堆栈操作都按字字操作。操作。 PUSH , POP 指令的指令的操作数操作数可能有三种:可能有三种: a. 寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器); b. 段寄存器段寄存器(CS除外,除外,PUSH CS 合法,合法,POP CS 非法非法); c. 存储器。存储器。 执行执行PUSH 指令指令, (SP)-2 (SP),低字节放在低地址,高字节低字节放在低地址,高字节放在高地址。放在高地址。随着推入堆栈内容增加,堆栈就扩展,随着推入堆栈内容增加,堆栈就扩展,SP的值减少,的值减少,但但S

32、P总是指向栈顶。总是指向栈顶。 堆栈工作原则堆栈工作原则后进先出。后进先出。 PUSH ,POP指令应该成对使用,保指令应该成对使用,保持堆栈原有状态。持堆栈原有状态。 堆栈最大容量即为堆栈最大容量即为SP的初值与的初值与SS之间的差。之间的差。堆栈应用举例:堆栈应用举例: 例:例:MOV BP,SPPUSH AXPUSH BXPUSH CXMOV CX,BP-6 MOV BX,BP-4MOV AX,BP-2ADD SP, 6例例 : PUSH AXPUSH BXPUSH CXPOP CXPOP BX POP AX格式:格式:XCHG dest , src;(dest) (src)执行操作:执

33、行操作: 可以实现:可以实现: 注意:注意:(1) 存储器(内存)之间不能交换,存储器(内存)之间不能交换,两个操作数中两个操作数中必须有一个在寄存器中;必须有一个在寄存器中;(2)段寄存器段寄存器不能作为一个操作数;不能作为一个操作数;(3) 允许字或字节操作,允许字或字节操作,不影响标志位不影响标志位。应用举例:应用举例:XCHG BL, DLXCHG AX, SIXCHG COUNTDI, AXXCHG BX,DI(错)错)XCHG DS, AX (错)错)该指令不影响标志位。该指令不影响标志位。格式:格式:XLAT ;AL)(BX )+(AL) 起始地址预存在起始地址预存在BX中,中,

34、AL中存放的是偏移地址。中存放的是偏移地址。XLAT指令使用方法:指令使用方法: 先建立一个字节表格;先建立一个字节表格; (相对与表格首地址位移量)(相对与表格首地址位移量); (表中第一个元素的序号为(表中第一个元素的序号为0) 。(AL)为转换的代码。为转换的代码。 若把字符的若把字符的扫描码扫描码转换成转换成ASCII码码; 或或数字数字09转转换成换成7段数码所需要的相应代码(段数码所需要的相应代码(字形码字形码)等就要用)等就要用XLAT指令。指令。例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCII码码表。表。 首地址为:首地址为:Hex_tab

35、le ,欲查出表中第欲查出表中第10个元素个元素(A)执行指令序列执行指令序列:MOV BX,OFFSET Hex_tableMOV AL,0AH XLAT 假设:假设:(DS)=F000H, Hex_table=0040H(AL)=0AH执行执行XLAT以后:以后: (AL)= 41H=(F004AH),),即即“A”的的ASCII码。码。30H30H31H31H32H32H.39H39H41H41H42H42H.46H46H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2Hex_table+0AHHex_tabl

36、e+0AHHex_table+0BHHex_table+0BHHex_table+0FHHex_table+0FHFFBBAA9911220016进制数的进制数的ASCII码表码表分析运算符分析运算符取偏移地址取偏移地址物理地址物理地址输入输出指令共两条:输入输出指令共两条: 输入指令输入指令用于用于CPU从外设端口接收数据从外设端口接收数据(读(读RD*),), 输出指令输出指令用于用于CPU向外设端口发送数据向外设端口发送数据(写(写WR*)。)。 无论接受还是发送数据,必须通过无论接受还是发送数据,必须通过累加器累加器AX(字字)或或AL(字节字节),又称累加器专用传送指令又称累加器专用

37、传送指令 。 输入、输出指令不影响标志位。输入、输出指令不影响标志位。 每个外设要占几个端口:数据口,状态口和控每个外设要占几个端口:数据口,状态口和控制口。每个端口像存储单元一样要赋予一个地址,制口。每个端口像存储单元一样要赋予一个地址,称端口地址。称端口地址。 在在IBMPC机里,可以配接许多外部设备,每个外机里,可以配接许多外部设备,每个外设与设与CPU之间交换数据、状态信息和控制命令,每之间交换数据、状态信息和控制命令,每一种信息交换都要通过一个端口来进行。一种信息交换都要通过一个端口来进行。端口数:外部设备最多有端口数:外部设备最多有65536=64K个个I/O端口。端口。 由由A0

38、A15译码形成。译码形成。端口号:端口号(即外设端口地址)为端口号:端口号(即外设端口地址)为 0000HFFFFH。必须先把端口号放到必须先把端口号放到DX寄存器中,通过寄存器中,通过DX寻址。寻址。寻址方式(两种)寻址方式(两种)格式:格式:IN acc(AL 或或 AX), port ; (acc) (port)具体形式有四种:具体形式有四种: IN AL, data8 ; 端口地址端口地址8位,输入一个字节位,输入一个字节 IN AX, data8 ;端口地址;端口地址8位,输入一个字位,输入一个字 IN AL, DX ;端口地址;端口地址16位,输入一个字节位,输入一个字节 IN A

39、X, DX ;端口地址;端口地址16位,输入一个字位,输入一个字 必须通过累加器必须通过累加器AX(字)或字)或AL(节)节)输入输入数据。数据。与地址长与地址长短无关短无关格式:格式: OUT port, acc ;(port) (acc)具体形式有四种:具体形式有四种: OUT data8 , AL ; 端口地址端口地址8位,输出一个字节位,输出一个字节 OUT data8, AX ;端口地址;端口地址8位,输出一个字位,输出一个字 OUT DX , AL ;端口地址;端口地址16位,输出一个字节位,输出一个字节 OUT DX , AX ;端口地址;端口地址16位,输出一个字位,输出一个字

40、 必须通过累加器必须通过累加器AX(字)或字)或AL(字节)字节)输出输出数据。数据。例例1:实现端口(:实现端口(28H)(DATA_WORD) IN AX,28H MOV DATA_WORD,AX例例2:从端口:从端口3FCH 送一个字到送一个字到AX寄存器寄存器MOV DX,3FCH IN AX,DX ; (AL)(3FCH),), (AH)(3FDH) 例例3:实现将(:实现将(AL) 端口端口(05H) OUT 5,AL;(;(05H)(AL) 8086 /8088 提供三条提供三条:地址指针写入指定寄存器或寄存器对指令。地址指针写入指定寄存器或寄存器对指令。1、LEA(Load E

41、ffective Address)2、LDS (Load pointer using DS)3、LES (Load pointer using ES)格式:格式: LEA reg16 , mem16 ;EA(reg16)功能:取有效地址(偏移地址),用于写进地址指针。功能:取有效地址(偏移地址),用于写进地址指针。 。例:设(例:设(BX)=0400H,(,(SI)=003CHLEA BX,BX+SI+0F62H执行指令后:执行指令后: EA=(BX)+(SI)+0F62H= 0400H+003CH+0F62H =139EH(BX)=139EH注意:设注意:设 (DS)=3000HBUFFER

42、=1000H(31000H)=0040H(1) LEA 指令与指令与MOV 的区别的区别LEA BX , BUFFER ;(;(BX)=1000HMOV BX , BUFFER ; (BX)=0040H LEA 指令与指令与MOV等价等价LEA BX , BUFFER ; (BX)=1000H MOV BX , OFFSET BUFFER ;(;(BX)=1000H(2),。(3)请思考下列指令的正、误)请思考下列指令的正、误LEA DX ,BXSILEA DX , AX 格式:格式:LDS reg16, mem32 ;(;(reg16)(EA)(DS)(EA)+2)功能:功能:。 将指令指定

43、将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏位偏移量移量)装入指定通用寄存器,把后两个单元内容装入指定通用寄存器,把后两个单元内容(段地段地址址) 装入到装入到DS段寄存器。段寄存器。 用于写远地址指针。用于写远地址指针。例例: 假设:假设: (DS)= C000H指令指令: LDS SI, 0010H执行指令后执行指令后: (SI)=0180H (DS)=2000H 格式:格式:LES reg16, mem32 ;(;(reg16)(EA) ;(;(ES)(EA)+2)功能:功能:将指令指定将指令指定mem32单元的前两单元的前两个单元内容个单元内容(16位偏移量位

44、偏移量)装入指定通用寄存器,把装入指定通用寄存器,把后两个单元内容后两个单元内容(段地址段地址) 装入到装入到ES段寄存器。段寄存器。用于写远地址指针。用于写远地址指针。例例: 假设:假设: (DS)=B000H (BX)=080AH指令指令: LES DI, BX执行指令后执行指令后: (DI)=05A2H (ES)=4000H综合举例:综合举例:设:设: (DS)=5000H TABLE=1000H分析下列指令执行结果:分析下列指令执行结果: (1) MOV BX,TABLE (2) MOV BX,OFFSET TABLE (3) LEA BX,TABLE (4) LES BX,TABLE

45、 (5) LDS BX,TABLE 采用了隐含寄存器(采用了隐含寄存器(AH、Flags)操作数方式。操作数方式。 8086有四条标志传送操作指令:有四条标志传送操作指令:1LAHF2SAHF3PUSHF4POPF 格式:格式:LAHF ;(;(AH)(PSW的低字节)的低字节)功能:功能:。LAHF指令操作图示意指令操作图示意2SAHF格式:格式:SAHF ;(;(PSW的低字节)的低字节)(AH)功能:(功能:(AH)送标志寄存器低八位。)送标志寄存器低八位。3PUSHF格式:格式:PUSHF;(;(SP)(SP)-2 (SP)+1,(,(SP)(PSW)功能功能 : 标志进栈。标志进栈。

46、4POPF 格式:格式:POPF;(;(PSW)(SP)+1,(,(SP)(SP)(SP)+2 功能功能 :标志出栈。:标志出栈。注意:注意:(1) 标志位的影响标志位的影响LAHF、PUSHF不影响标志位不影响标志位,SAHF、POPF由装入的值确定标志位的值,由装入的值确定标志位的值, 即影响标志位。即影响标志位。(2)PUSHF、POPF用于保护调用过程前(用于保护调用过程前(PSW),过程返回后过程返回后恢复。恢复。例:例:PUSH AXPUSH CXPUSHFCALL TRANSPOPFPOP CXPOP AX(Arithmetic)内容:内容: 利用十进制调整指令和利用十进制调整指

47、令和ASCII调整指令对调整指令对BCD码表示的码表示的 十进制数进行十进制数进行算术运算;算术运算; (一)加法指令(一)加法指令(Arithmetic)(二)减法指令(二)减法指令(Subtraction)(三)乘法指令(三)乘法指令(Multiplication)(四)除法指令(四)除法指令(Division)(五)转换指令(五)转换指令 ,不同指令影响不同不同指令影响不同: (1) (一)加法指令(一)加法指令(Arithmetic) 1、 ADD(Addition)加法指令加法指令 2、 ADC(Add with carry)带进位加法指令带进位加法指令 3、 INC(Increme

48、nt by 1)加加 1指令指令 : 无符号数和带符号数无符号数和带符号数 ; : OF=1, 8位带符号数相加,和超出范围(位带符号数相加,和超出范围(128127), 16位带符号数相加,和超出范围位带符号数相加,和超出范围(-32768+32767);CF=1, 8位无符号数相加,和超过位无符号数相加,和超过255, 16位无符号数相加,和超过位无符号数相加,和超过65535。其他条件标志(其他条件标志(SF,AF,PF,ZF)根据定义设定。根据定义设定。例例MOV AL,7EH;(AL)=7EHMOV BL, 5BH;(BL)=5BHADD AL,BL;(AL)=7EH+5BH=D9H

49、影响标志位的情况影响标志位的情况:1 11 11 11 11 11 10 00 00 01 10 01 11 10 01 11 1+ +1 11 10 01 11 10 00 01 1AF=1AF=1 SF=1 , 结果最高位结果最高位1 ZF=0 ,结果不等于,结果不等于0AF=1 ,D3 位向位向D4 有进位有进位PF=0 ,”1”的个数为奇数的个数为奇数CF=0 ,无进位,无进位OF=1 ,和超过,和超过127(两个正数相加,结果为负;反之亦是)(两个正数相加,结果为负;反之亦是)2、 ADC(Add with carry)带进位加法指令带进位加法指令格式:格式:ADC dest,src

50、 ;(;(dest)(dest)+(src)+ 进位标志进位标志CF的现行值的现行值()特点特点: 与与ADD同。同。用途:主要用于多字节运算中。用途:主要用于多字节运算中。类型举例:类型举例:ADC CX, 300 ;寄存器寄存器+立即数立即数+CFADC AL, BL;寄存器寄存器+寄存器寄存器+CFADC DX, COUNTSI;寄存器寄存器+存储器存储器CFADC BLOCKDI, BX;存储器存储器+寄存器寄存器+CFADC BYTE PTR MEM, 6;存储器存储器+立即数立即数+CFl【例】设【例】设DX=4652H,执行指令,执行指令ADD DX,7A08H后,后,DX=?,

51、?,CF=?,?,SF=?,?,ZF=?,?,OF=?根据计算:根据计算:DX=C05AH,结果不为,结果不为0,ZF=0;运算结;运算结果没有进位,果没有进位,CF=0;运算结果的最高位为;运算结果的最高位为1,SF=1;加数、被加数均为正数,而结果为负数,产生溢出,加数、被加数均为正数,而结果为负数,产生溢出,OF=1。3、INC (Increment by 1 )加加 1 指令指令格式:格式:INC dest ;(B/W), (dest)(dest)+1 dest : 功能:对指定的目标操作数功能:对指定的目标操作数+1 操作数单元。操作数单元。用途:用于在循环程序中修改地址指针和循环次

52、用途:用于在循环程序中修改地址指针和循环次数。数。标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。 例:例: INC DL; 8位寄存器位寄存器1 INC SI;16位寄存器位寄存器1 INC BYTE PTR BXSI ;存储器;存储器1(字节(字节操作)操作) INC WORD PTR DI;存储器;存储器1(字操(字操作)作) INC DS; 错错(二)减法指令(二)减法指令(Subtraction) 8086有有5条减法指令条减法指令 :1、SUB(Subtraction)减法指令减法指令2、SBB(Subtraction with borrow)带进位减法指令带

53、进位减法指令 3、DEC(Decrement by 1 ) 减减 1 指令指令4、NEG(Negate) 求补指令求补指令5、CMP(Compare) 比较指令比较指令格式:格式:SUB dest,src;(;(dest)(dest)-(src)1、SUB(Subtraction)减法指令减法指令例:例:SUB AL, 37H;寄存器寄存器-立即数立即数 SUB BX, DX;寄存器寄存器-寄存器寄存器 SUB CX, VAR1;寄存器寄存器-存储器存储器 SUB ARRAYSI, AX;存储器存储器-寄存器寄存器SUB WORD PTR ALPHABXDI, 512H;存储器减立即数存储器减

54、立即数例:例:SBB BX,100H;寄存器寄存器-立即数立即数 -CFSBB CX,DX;寄存器寄存器-寄存器寄存器-CFSBB AL, DATA1SI;寄存器寄存器-存储器存储器-CFSBB DISPBP, BL;存储器存储器-寄存器寄存器-CFSBB BYTE PTRALPHASI+6,96H;存储器存储器-立即数立即数-CF2、SBB(Subtraction with borrow)带进位减法指令带进位减法指令 格式:格式:SBB dest,src;(;(dest)(dest)-(src)-CFCF: 进位标志进位标志CF的现行值的现行值(上条指令上条指令CF值值)Src:立即数,寄存

55、器,存储器。:立即数,寄存器,存储器。dest:寄存器,存储器。:寄存器,存储器。指令影响标志位、指令影响标志位、B/W数运算情况同数运算情况同SBB用途:用于多字节数相减用途:用于多字节数相减3、DEC (Decrement by 1 ) 减减 1 指令指令格式:格式: DEC dest ;(B/W) (dest)(dest)-1功能:对指定的目标操作数功能:对指定的目标操作数-1 操作数单元。操作数单元。用途:用于在循环程序中修改地址指针和循环次数。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。 不影响不影响CF。4、N

56、EG (Negate) 求补指令求补指令格式:格式: NEG dest ;B/W, (dest) 0 - (dest)dest : 寄存器寄存器 、存储器。、存储器。操作操作: 把操作数按位求反后末位把操作数按位求反后末位+1。 (dest) 0FFFFH -(dest)+1影响标志:影响标志:AF、CF、OF、PF、SF、ZF。CF:操作数为操作数为0时求补时求补, CF=0 ; 一般使一般使CF=1.OF: 对对128 或或32768求补,求补,OF=1; 否则否则OF=0.MOV AX,0FF64H ; (AH=0FFH,AL=64H)NEG AL ; AX=0FF9CH (0-64H=

57、9CH)SUB AL,9DH ; AX=0FFFFH(9CH-9DH=0FFH)NEG AX ; AX=0001H (0-0FFFFH=1H)DEC AL ; AX=0NEG AX ; AX=0例例1: 例例2 设设DL=78H,执行指令,执行指令NEG DL后,后,DL=?,?,CF=?,?,SF=?,?,ZF=?,?,OF=?分析:分析:求补有两种方法:求补有两种方法:一是将一是将0减去源操作数;减去源操作数;二是将源操作数求反后再加二是将源操作数求反后再加1。执行执行NEG指令后,指令后,OF0。此外,计算机内部采。此外,计算机内部采用第一种方法,所以用第一种方法,所以CF1。 运行结果

58、:运行结果:DL=88H,CF=1,SF=1,ZF=0,OF=0。格式:格式:CMP dest,src; B/W 5、CMP(Compare) 比较指令比较指令src: 立即数,寄存器,存储器。立即数,寄存器,存储器。dest:寄存器,存储器寄存器,存储器。影响标志:影响标志:AF、CF、OF、PF、SF、ZF。例:例: CMP AL,0AH;寄存器与立即数比较寄存器与立即数比较CMP CX, DI ;寄存器与寄存器比较寄存器与寄存器比较CMP AX, AREA1;寄存器与存储器比较寄存器与存储器比较CMP BX+5, SI;存储器与寄存器比较存储器与寄存器比较CMP WORD PTR ALP

59、HAGAMMA,100H;存储器与立即数存储器与立即数比较比较 用比较指令来比较两个数之间的关系:用比较指令来比较两个数之间的关系:两者是否相等,两个数中哪个大。两者是否相等,两个数中哪个大。(1) 根据根据ZF标志,判断两者是否相等;标志,判断两者是否相等;(2)根据根据CF标志,标志, 判断两个无符号数的大小;判断两个无符号数的大小;(3)用用SF、OF标志,判断标志,判断两两个带符号数的大小。个带符号数的大小。 CMP指令应用举例:指令应用举例: 第一个数取出第一个数取出 ( AX), 取出第二个数(第二个字单元内容)与取出第二个数(第二个字单元内容)与(AX)比比较较 : (AX)第二

60、个数,不做交换,第二个数,不做交换, 否则,(第二个字单元内容)否则,(第二个字单元内容) (AX)。)。 再取第三个数,再取第三个数, 经过经过99次比较,在(次比较,在(AX)中得到最大数。)中得到最大数。 若自若自BLOCK开始的内存缓冲区中,有开始的内存缓冲区中,有100个带符号数。个带符号数。找出最大值。并存放到找出最大值。并存放到MAX单元中。单元中。指令指令助记符助记符格式格式操作操作无符号数无符号数乘乘MULMUL srcsrc为字节:为字节:AX AL srcsrc为字:为字:DX AX AX src符号数乘符号数乘IMULIMUL src无符号数无符号数除除DIVDIV s

温馨提示

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

评论

0/150

提交评论