微机原理与接口技术课件.ppt

上传人:小飞机 文档编号:1614726 上传时间:2022-12-11 格式:PPT 页数:58 大小:474KB
返回 下载 相关 举报
微机原理与接口技术课件.ppt_第1页
第1页 / 共58页
微机原理与接口技术课件.ppt_第2页
第2页 / 共58页
微机原理与接口技术课件.ppt_第3页
第3页 / 共58页
微机原理与接口技术课件.ppt_第4页
第4页 / 共58页
微机原理与接口技术课件.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《微机原理与接口技术课件.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术课件.ppt(58页珍藏版)》请在三一办公上搜索。

1、2022年12月11日12时14分,1,第六讲,杭州电子科技大学,微机原理与接口技术,2022年12月11日12时14分,2,3-3 8086的指令系统,按功能可分为以下六类:数据传送指令算术运算指令逻辑运算和移位指令串操作指令转移指令处理器控制指令,2022年12月11日12时14分,3,3-3 8086的指令系统,一、数据传送指令 (14条),2022年12月11日12时14分,4,3-3 8086的指令系统数据传送指令,通用数据传送指令(General Purpose Data Tranfers),(1)MOV传送指令(Move) 指令格式:MOV 目的,源 指令功能:实现CPU的内部寄

2、存器间或寄存器与存储器间的数据传送。,例: MOV AX, 0FF00H MOV DI, AX MOV CX, 1000H MOV BL, 40H MOV WORD PTRSI, 01H MOV AL, BL,2022年12月11日12时14分,5,3-3 8086的指令系统数据传送指令,注意:指令中至少要有一项明确说明传送的是字节还是字;IP寄存器不能用作源操作数或目的操作数;立即数和CS寄存器不能用作目的操作数;除了源操作数为立即数的情况外,两个操作数中必有一个是寄存器,但不能都是段寄存器;即MOV指令不能在两个存储单元之间直接传送数据,也不能在两个段寄存器之间直接传送数据。,(1)MOV

3、传送指令(Move),2022年12月11日12时14分,6,3-3 8086的指令系统数据传送指令,(1)MOV传送指令(Move),【数据段】通常,数据通常存放在数据段中。例如,某个程序的数据段: DATASEGMENT ;数据段开始 AREA1DB 14H,3BH ;定义字节变量 AREA2DB 3 DUP(0) ;复制操作 ARRAYDW 3100H,01A6H ;定义字变量 STRINGDB GOOD DATAENDS ;数据段结束汇编后,DATA将被赋予一个具体的段地址。各变 量将自偏移地址0000H开始依次存放,各符号地址 等于它们在数据段中的偏移量。,2022年12月11日12

4、时14分,7,3-3 8086的指令系统数据传送指令,(1)MOV传送指令(Move),AREA1的偏移地址为0000H;AREA2的偏移地址为0002H;ARRAY的偏移地址为0005H;STRING的偏移地址为0009H。,DATA SEGMENT ;数据段开始 AREA1DB 14H,3BH ;定义字节变量 AREA2DB 3 DUP(0) ;复制操作 ARRAYDW 3l00H,01A6H ;定义字变量 STRINGDB GOOD DATAENDS ;数据段结束,2022年12月11日12时14分,8,3-3 8086的指令系统数据传送指令,(1)MOV传送指令(Move),例 MOV

5、 DX,OFFSET ARRAY解:ARRAY的偏移地址DX。(OFFSET:取后面的符号偏移地址的值) 设:ARRAY的定义如左图所示 则:DX = 0005H,例: MOV AL,AREA1 ;ALAREA1中的内容14H MOV AREA2,AL ; 0002H单元14H,2022年12月11日12时14分,9,3-3 8086的指令系统数据传送指令,(2)PUSH进栈指令(Push Word onto Stack),指令格式:PUSH 源 指令功能:数据入堆栈 工作过程: SPSP-2; (SP+1,SP)源 源操作数要求:可以是16位通用寄存器、段寄存器、存储器中的数据字,但不能是立

6、即数。,2022年12月11日12时14分,10,3-3 8086的指令系统数据传送指令,(3)POP出栈指令(Pop Word off Stack),指令格式:POP 目的 指令功能:数据出堆栈 工作过程:目的 (SP+1,SP)SPSP 2; 目的操作数要求: 可以是16位通用寄存器、段寄存器或存储单元,但CS不能作目的操作数。,2022年12月11日12时14分,11,3-3 8086的指令系统数据传送指令,PUSH、POP指令实例,2022年12月11日12时14分,12,3-3 8086的指令系统数据传送指令,(4)XCHG交换指令(Exchange),指令格式:XCHG 目的, 源

7、 指令功能:源操作数、目的操作数数据交换。 操作数要求: 交换可以在寄存器之间、寄存器与存储器之间进行;段寄存器不能作为操作数;不能直接交换两个存储单元中的内容。例 设AX=2000H,DS=3000H,BX=1800H,(31A00H)=1995H。 则执行指令XCHG AX,BX+200H后,结果如何?解:把内存中的一个字与AX中的内容进行交换。 源操作数物理地址300010H+1800H+200H31A00H, 指令执行后:AX1995H,(3lA00H)2000H,2022年12月11日12时14分,13,3-3 8086的指令系统数据传送指令,(5) XLAT表转换指令(Table

8、Lookup-Translation),指令格式: XLAT 转换表 或:XLAT 指令功能:使累加器(AL)中的一个值变换为内存表格中的某一个值,一般用来实现代码转换,即查表功能。XLAT指令使用步骤:使用之前必须先建立一个表格,表格中的内容是所需要转换的代码;将转换表的起始地址装入 BX寄存器;欲查的某项与表头地址的位移量 AL,即表格最多包含256个字节;执行XLAT指令后,根据位移量从表中查到转换后的代码值 AL寄存器中。,2022年12月11日12时14分,14,3-3 8086的指令系统数据传送指令,(5) XLAT表转换指令(Table Lookup-Translation),例

9、 若十进制数字09的LED七段码对照表如表所示,试用XLAT指令求数字5的七段码值。,十进制数的七段显示码表,2022年12月11日12时14分,15,3-3 8086的指令系统数据传送指令,(5) XLAT表转换指令(Table Lookup-Translation),程序如下: TABEL DB 40H,79H,24H,30H,19H ;七段数码表数据 DB 12H,02H,78H,00H,18H ;分别对应09的七段字型码 MOV AL,5 ;AL 数字5的位移量 MOV BX,OFFSET TABLE ;BX 表格首地址 XLAT TABLE ;查表得:AL = 12H,2022年12

10、月11日12时14分,16,3-3 8086的指令系统 数据传送指令,2输入输出指令(Input nnd Output),IN指令: 从数据端口输入数据或从状态端口输入状态字。OUT指令:输出数据或命令给指定的I/O端口。 直接输入输出指令 格式:IN AL, PORT ; AL (PORT) IN AX, PORT ; AX (PORT+1,PORT) OUT PORT,AL ; (PORT) AL OUT PORT,AX ; (PORT+1,PORT) AX注:PORT为输入输出端口号,范围为0255(00 FFH),2022年12月11日12时14分,17,间接输入输出指令 格式: IN

11、 AL, DX ; AL (DX) IN AX, DX ; AX (DX+1,DX) OUT DX,AL ; (DX) AL OUT DX,AX ; (DX+1,DX) AX 在间接输入输出指令之前,需将端口号送入DX寄存器。 MOV DX, XXXXH;例 OUT85H,AL;85H端口AL内容MOVDX,0FF4H;端口地址DX=0FF4HOUTDX,AL;FF4H端口AL内容 MOVDX,300H;DX指向300H OUTDX,AX;300H端口 AL内容, 301H端口AH内容,3-3 8086的指令系统 数据传送指令,2022年12月11日12时14分,18,3地址目标传送指令(Ad

12、dress Object Transfers):,专用于传送地址码的指令,它可以用来传送操作数的段地址和偏移地址,含以下三条指令: LEA取有效地址指令(Load Effective Address) 指令格式:LEA 目的,源 指令功能:取源操作数地址的偏移量,传送到目的操作数 操作数要求:源操作数必须是存储单元,目的操作数必须是一个除段寄存器之外的16位寄存器。使用时要注意与MOV指令的区别。例 假设SI1000H,DS5000H,(51000H)1234H LEA BX,SI ;执行完该指令后,BX1000H(送偏移地址) MOVBX,SI ;执行完该指令后,BX1234H(送内容),3

13、-3 8086的指令系统 数据传送指令,2022年12月11日12时14分,19,LDS将双字指针送到寄存器和DS指令(Load Pointer using DS),指令格式:LDS目的,源指令功能:从源操作数指定的存储单元中,取出一个变量的4字节地址指针,送进一对目的寄存器。其中前两个字节(表示变量的偏移地址)送到指令中指定的目的寄存器中,后两个字节(表示变量的段地址)送入DS寄存器。操作数要求:源操作数必是存储单元,该单元开始的连续4个字节存放一个变量的地址指针。目的操作数必须是16位寄存器,常用SI寄存器,但不能用段寄存器。例 设DS1200H,(12450H)F346H, (12452

14、H)0A90H, 执行指令LDS SI,0450H 后,SIF346H,DS0A90H注:源操作数的物理地址DS10H+450H=12450H,3-3 8086的指令系统 数据传送指令,2022年12月11日12时14分,20,LES将双字指针送到寄存器和ES指令(Load Pointer using Es)指令格式:LES目的,源指令功能:与LDS指令的操作基本相同,不同的是:要将源操作数所指向的 存储单元里存放的地址指针中的段地址部分送到ES寄存器中,而不是DS寄存器,目的操作数常用DI寄存器。例 设DS0100H,BX0020H,(01020H)0300H,(01022H)0500H。

15、执行指令LES DI,BX 后,DI0300H,ES0500H注:源操作数的物理地址DS10H+BX =0100H10H+0020H =01020H,3-3 8086的指令系统 数据传送指令,2022年12月11日12时14分,21,4标志传送指令(Flag Transfers):,读取标志指令 : LAHF (5、3、0为任意值) 标志寄存器低8位 AH设置标志指令: SAHF 标志寄存器低8位 AH,影响PSW把标志寄存器的内容压入堆栈:PUSHF从堆栈弹出到标志寄存器:POPF, 影响PSW,3-3 8086的指令系统 数据传送指令,2022年12月11日12时14分,22,3-3 80

16、86的指令系统 数据传送指令, LAHF 标志送到AH指令(Load AH from Flag) 指令格式: LAHF 指令功能:标志寄存器SF、ZF、AF、PF和CF AH寄存器的位7、6、4、2和0。 注意: 位5、3、1的内容未定义,是任意值。 执行这条指令后,标志位本身并不受影响。 这5个标志送进AH后,AH便相当于80808085的标志寄存器, 从而能对80808085程序进行转换,使它们能运行在80868088系统上。,2022年12月11日12时14分,23,3-3 8086的指令系统 数据传送指令, SAHF AH送标志寄存器(Store AH into Flags) 指令格式

17、:SAHF 指令功能: AH内容 标志寄存器。 注意: 位5、3、1的内容未定义,是任意值。 执行这条指令后,高位标志并不受影响。 为80808085提供兼容性。,2022年12月11日12时14分,24,3-3 8086的指令系统 数据传送指令,PUSHF标志入栈指令(Push Flag onto Stack) 指令格式:PUSHF 指令功能:将标志寄存器PSW中的内容 压入堆栈; 并修改堆栈指针,使SPSP2; 指令执行后对标志位无影响。POPF标志出栈指令(Pop Flag off Stack) 指令格式:POPF 指令功能:将堆栈指针SP所指的一个字弹入标志寄存器PSW;并修改堆栈指针

18、,使SPSP2。 注意:要成对使用PUSHF和POPF,可对标志寄存器进行保存和恢复。常用在:过程(子程序)调用,中断服务程序,对主程序的状态(即标志位)进行保护。也可用来改变追踪标志TF。在8086指令系统中没有直接改变TF(D8位)的指令。,2022年12月11日12时14分,25,3-3 8086的指令系统 算术运算指令,二、算术运算指令,算术运算指令可处理4种类型的数:无符号二进制整数带符号二进制整数无符号压缩十进制整数(Packed Decimal)无符号非压缩十进制整数(Unpacked Decimal)一个8位二进制数可看成4种不同类型的数,所表示的数值亦不同。,数的表示:二进制

19、数:可以是8位或16位,若是带符号数,则用补码表示。压缩十进制数:一个字节中存放两个BCD码十进制数。非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。例如,对十进制数字58:压缩十进制数表示:只需一个字节,即 0101 1000B;非压缩十进制数表示:需两个字节,即 0000 0101B 和 0000 1000B。,2022年12月11日12时14分,26,3-3 8086的指令系统 算术运算指令,4种类型数的表示方法,80868088指令系统提供:加、减、乘、除运算指令:处理无符号或带符号的8位/16位二进制数的算术运算;调整操作指令:进行压缩的或非压缩的十进制数的算术运算;加

20、法和减法运算指令:带符号数和无符号数的加法和减法的运算可以用同一条加法或减法指令来完成。乘法和除法运算:分别设置无符号数和带符号数的乘、除法指令。绝大部分算术运算指令都影响状态标志位。,2022年12月11日12时14分,27,3-3 8086的指令系统 算术运算指令,算术逻辑指令,2022年12月11日12时14分,28,1. 加法指令(Addition), ADD加法指令(Addition) 指令格式:ADD 目的, 源 指令功能:目的 源 十 目的 ADC带进位的加法指令(Addition with Carry) 指令格式:ADC 目的, 源 指令功能:目的 源 十 目的 十 CF注意:

21、源操作数可以是寄存器、存储器、立即数;目的操作数:只能用寄存器、存储单元。源、目的操作数不能同时为存储器,且类型必须一致,均为字节或字;这两条指令影响的标志位为:CF、OF、PF、SF、ZF和AF。,3-3 8086的指令系统 算术运算指令,2022年12月11日12时14分,29,3-3 8086的指令系统 算术运算指令,例:两种加法指令的实例 ADD AL,18H ;AL AL十18H ADC BL,CL ;BL BL十CL十CF ADC AX,DX ;AX AX十DX十CF ADD AL,COSTBX ;AL内容和地址DS:(COST+BX)的存储字节 ;相加,结果送AL ADD COS

22、TBX,BL;将BL与物理地址DS:(COST十BX)的存储字 节相加,结果留在该存储单元中例 :用加法指令对两个8位16进制数5EH和3CH求和,并分析加法运算指令执行后对标志位的影响。 解:MOV AL,5EH ;AL5EH(94) MOV BL,3CH ;BL3CH(60) ADD AL, BL ;结果AL9AH,2022年12月11日12时14分,30,3-3 8086的指令系统 算术运算指令,讨论ADD对标志位的影响:两个数的相加过程: 0101 1110 5EH = 94 + 0011 1100 即: + 3CH = 60 1001 1010 9AH = 154运算后标志位:ZF0

23、,AF1,CF0,SFl,PF1,OF1。对标志的解释(人为决定):两个加数都看成无符号数时,运算结果为9AH,即十进制数154。在这种情况下,SF和OF都没有意义,我们只关心ZF和CF标志,在BCD码运算或奇偶校验时才考虑AF或PF标志。两个加数都当成带符号数时,符号标志SF和溢出标志OF很重要,而进位标志CF没有意义。带符号数能表示的范围-128+127,而本例中,两个正数94和60相加,其和为154,由于154超过了范围,即产生了溢出,OF1,2022年12月11日12时14分,31,3-3 8086的指令系统 算术运算指令, INC增量指令(Increment) 指令格式:INC 目的

24、 指令功能:目的 目的 十1 操作数的要求:通用寄存器、内存。注意:这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改;指令执行后影响AF、OF、PF、SF和ZF,但不影响进位标志CF。该指令只有一个操作数时,如果要使内存单元的内容增1,程序中必须说明该存储单元是字还是字节。 例 INC BL ;BL寄存器中内容增1 INC CX ;CX寄存器中内容增1 INC BYTE PRRBX ;内存字节单元内容增1 INC WORD PTRBX ;内存字单元内容增1 其中,PTR为类型说明符,前面加BYTE说明操作数类型为字节,加WORD则说明操作数类型为字。,2022年12月11日12时1

25、4分,32,3-3 8086的指令系统 算术运算指令, AAA加法的ASCII调整指令(ASCII Adjust for Addition) 指令格式:AAA 指令功能:在用ADD或ADC指令对两个非压缩十进制数或ASCII码表示的十进制数作加法后,运算结果已存在AL中,用此指令将AL寄存器中的运算结果调整为一位非压缩十进制数,仍保留在AL中。如果AF1,表示向高位有进位,则进到AH寄存器中。(注:非压缩十进制数的高4位为全0,低4位为十进制数字09。例如,将9表示成0000 1001) 调整过程: 若AL低4位9或AF1 则:ALAL十6 用与操作()将AL高4位清0 AF置1,CF置1,A

26、HAH十l 否则,仅将AL寄存器的高4位清0。,2022年12月11日12时14分,33,3-3 8086的指令系统 算术运算指令,例 若ALBCD 9,BLBCD 5,求两数之和。解:设AH0,则运算过程如下:,ASCII码表示的十进制数,高半字节均为3,运算时需用AND指令将它屏蔽。只要使用AAA指令,可以不必屏蔽高半字节,便能在AX中得到一个正确的非压缩十进制数。,2022年12月11日12时14分,34,3-3 8086的指令系统 算术运算指令,例 求ASCII码表示的数9(39H)与5(35H)之和。 设AH0,则运算过程如下:,在AAA指令后加上一条“或”指令OR AX,3030H

27、,便使AX中的结果变成了ACSII码3134H。,2022年12月11日12时14分,35,3-3 8086的指令系统 算术运算指令, DAA加法的十进制调整指令(Decimal Adjust for Addition) 指令格式:DAA 指令功能:将两个压缩BCD数相加后的结果调整为正确的压缩BCD数。注意:相加后的结果必须在AL中,才能使用DAA指令。 调整过程: 若AL的低4位9或AF1, 则AL AL十6,对低4位进行调整; 若此时AL的高4位9或CF1, 则AL AL十60H,对高4位进行调整,并使CF置1,否则CF置0。,2022年12月11日12时14分,36,3-3 8086的

28、指令系统 算术运算指令,例 若ALBCD 88,BLBCD 49,求两数之和。解 运算过程为:,2022年12月11日12时14分,37,3-3 8086的指令系统 算术运算指令,2. 减法指令(Subtration),SUB减法指令(Subraction) 指令格式: SUB 目的,源 指令功能: 目的 目的源 例 SUB AX,BX ;AX AX-BX SUB DX,1850H ;DX DX-1850H SUB BL,BX ;BL中内容减去物理地址DS:(BX)处的字节,结果存入BL SBB带借位的减法指令(Subtract with Borrow) 指令格式:SBB 目的,源 指令功能:

29、目的 目的源CF (SBB主要用于多字节减法中)例 SBB AL,CL;AL ALCLCF,2022年12月11日12时14分,38,3-3 8086的指令系统 算术运算指令, DEC减量指令(Decrement) 指令格式:DEC 目的 指令功能:目的 目的-l 例 DEC BX;BX BX-1 DEC WORD PTRBP;堆栈段中位于BP偏置处的字减1 NEG取负指令(Negate) 指令格式:NEG 目的 指令功能:目的 0目的,即对目的操作数取负 例 NEG AX ;将AX中的数取负 NEG BYTE PTRBX ;对数据段中位于BX偏置处的字节取负 CMP比较指令(Compare)

30、 指令格式:CMP 目的,源 指令功能:目的源, 结果不回送到目的操作数中,仅反映在标志位上。 用途:用在比较两个数大小又不破坏原操作数的场合。,2022年12月11日12时14分,39,3-3 8086的指令系统 算术运算指令,减法指令小结:(上述五种指令都做减法运算)对于双操作数指令(SUB、SBB、CMP):源操作数可以是寄存器、存储器或立即数;目的操作数可以是寄存器、存储器,但不能为立即数;两个操作数不能同时为存储器。对于单操作数指令(DEC、NEG):目的操作数可以是寄存器、存储器,但不能为立即数;如果是存储器操作数,还必须说明其类型是字节还是字。运算之后,除DEC指令不影响CF标志

31、外,其它均影响OF、SF、ZF、AF、PF和CF标志。在减法操作后,如果源操作数大于目的操作数,需要借位时,进位/借位标志CF将被置1。,2022年12月11日12时14分,40,3-3 8086的指令系统 算术运算指令,例 设AL1011 0001B,DL0100 1010B,求ALDL。 解:SUB AL,DL ;与加法操作一样,对结果的解释取决于参与运算的数的性质,运算过程如下:,二进制减法 当成无符号数 当成带符号数 1011 0001 177 79 0100 1010 74 )74 0110 0111 103 103 运算后标志位ZF0,AF1,CF0,SF0,PF0,OF1。讨论:

32、两数为无符号数:表示177与74的差是103。CF0表示没有借位,SF和OF无意义。两数为带符号数:表示79(74),结果应为153。但结果却为正数(103),这是由于153溢出造成的。此时,SF和OF有重要意义。,2022年12月11日12时14分,41,3-3 8086的指令系统 算术运算指令, AAS减法的ASCII调整指令(ASCII Adjust for Subtraction) 指令格式:AAS 指令功能:将AL寄存器中的运算结果调整为正确的非压缩十进制数之差, 仍保留在AL中。 使用前提:用SUB或SBB指令对两个非压缩十进制数或ASCII码表示的十进制数作减法,运算结果已存在A

33、L。 调整过程: 若AL寄存器的低4位9或AF1, 则:AL AL6,AF置1 将AL寄存器高4位清零 AH AHl,CF置l 否则,不需要调整,2022年12月11日12时14分,42,3-3 8086的指令系统 算术运算指令, DAS减法的十进制调整指令(Decimal Adjust for Subtracion) 指令格式: DAS 指令功能:将AL中两个压缩BCD数相减后的结果调整为正确的压缩BCD数。高4位和低4位分别进行调整。 使用前提:在两个压缩十进制数用SUB或SBB相减后,结果在AL中。 调整过程: 如果AL寄存器的低4位9或AF1 则:AL AL6,AF置1 如果此时AL高

34、半字节9或标志位CFl 则:AL AL60H,CF置1,2022年12月11日12时14分,43,3-3 8086的指令系统 算术运算指令,例 设ALBCD 56,CLBCD 98,求两数之差。 解:运算过程如下:,2022年12月11日12时14分,44,3-3 8086的指令系统 算术运算指令,3乘法指令(Multiply) MUL无符号数乘法指令(Multiply) 指令格式:MUL 源 指令功能:把源操作数和累加器中的数都当成无符号数,然后将两个数相乘,操作数可以是字节或字。 源操作数是一个字节:原操作数与累加器AL中的内容相乘,乘积为双倍长的16位数,高8位送到AH,低8位送AL。即

35、 AX AL* 源。 源操作数是一个字:原操作数与累加器AX的内容相乘,结果为32位数,高位字放在DX寄存器中,低位字放在AX寄存器中。即 (DX,AX) AX * 源 操作数要求:可以是寄存器、存储单元,但不能是立即数;源操作数是存储单元时,必须在操作数前加B或W说明是字节还是字。,2022年12月11日12时14分,45,3-3 8086的指令系统 算术运算指令,例 MUL DL ; AX AL * DL MUL CX ;(DX,AX) AX * CX MUL BSI ;AX AL * (内存中某字节),B说明字节乘法 MUL WBX ;(DX,AX) AX * (内存中某字),W说明字乘

36、法 注意: MUL指令执行后影响CF和OF标志。如果结果的高半部分(字节操作为AH、字操作为DX)不为零,表明其内容是结果的有效位,则CF和OF均置1。否则,CF和OF均清0。 据此可检测并去除结果中的无效前导零。 乘法指令使AF、PF、SF和 ZF的状态不定。 例 设AL55H,BL14H,计算它们的积。 解: MUL BL 结果:AX06A4H。 由于AH06H0,高位部分有效,所以置CF1,OF1。,2022年12月11日12时14分,46,3-3 8086的指令系统 算术运算指令,例 试计算FFHFFH。 解:用二进制表示成如下形式: 1111 1111 1111 1111 1111

37、1110 0000 0001 作为无符号数:表示25525565025,结果正确。 作为带符号数:表示(一1)(一1)一511,显然结果不正确。 用MUL指令作带符号数的乘法,会得到错误的结果,必须用IMUL指令,才能使(一1)(一1)得到正确的结果0000 0000 0000 0001。,2022年12月11日12时14分,47,3-3 8086的指令系统 算术运算指令, IMUL整数乘法指令(Integer Multiply) 指令格式:IMUL 源 指令功能:把源操作数和累加器中的数都作为带符号数,进行相乘。 存放结果的方式与MUL相同:源操作数为字节:与AL相乘,双倍长结果送到AX中;

38、源操作数为字:与AX相乘,双倍长结果送到DX和AX中,最后给乘积赋予正确的符号。对标志位的影响:乘积的高半部分不是低半部分的符号扩展(不是全0或全1),则高位部分为有效位,表示它是积的一部分,于是置CFOF1;结果的高半部分为全0或全1,表明它仅包含了符号位,那么使CF=OF0。AF、PF、SF和 ZF不定。,2022年12月11日12时14分,48,3-3 8086的指令系统 算术运算指令, AAM乘法的ASCII调整指令(ASCII Adjust for Multiply) 指令格式:AAM 指令功能: 对AL中的两个非压缩十进制数相乘的乘积进行十进制数的调整,在AX中得到正确的非压缩十进

39、制数的乘积,高位在AH中,低位在AL中。 调整过程: 把AL寄存器内容除以10,商放在AH中,余数在AL中。即:AH AL/10所得的商AL AH/10所得的余数 注意:两个ASCII码数相乘之前,先屏蔽掉每个数字的高半字节,使每个字节包含一个非压缩十进制数(BCD数),再用MUL指令相乘,乘积放到AL寄存器中,然后用AAM指令进行调整。标志位的影响:影响ZF、SF和PF,但AF、CF和OF无定义。8086的指令系统中,十进制乘法运算不允许采用压缩十进制数,故调整指令仅此一条。,2022年12月11日12时14分,49,3-3 8086的指令系统 算术运算指令,例 求两个非压缩十进制数09和0

40、6之乘积。 解:MOV AL,09H;置初值 MOV BL,06H MUL BL;AL 09与06之乘积36H AAM;调整得AH05H(十位),AL04H(个位) 结果:AX0504H,即BCD数54。 例 如果AL和BL中分别存放9和6的ASCII码,求两数之积。 解:用以下指令实现: AND AL,0FH ;屏蔽高半字节 AND BL,0FH MUL BL ;相乘 AAM ;调整 如要将结果转换成ASCII码,可用指令OR AX,3030H实现,使 AX3534H。,2022年12月11日12时14分,50,3-3 8086的指令系统 算术运算指令,4除法指令(Division) DIV

41、无符号数除法指令(Division,unsigned) 指令格式:DIV 源 指令功能:对两个无符号二进制数进行除法操作。 源操作数为字节:16位被除数必须放在AX中,8位除数为源操作数。AL AX源(字节)的商 AH AX源(字节)的余数 若被除数只有8位,必须把它放在AL中,并将AH清0。 源操作数为字:32位被除数在(DX,AX)中,16位除数作源操作数。 AX (DX,AX)源(字)的商 DX (DX,AX)源(字)的余数 若被除数、除数都是16位,则将16位被除数送到AX中,再将DX清0。 注意:源操作数可以是寄存器、存储单元; DIV指令执行后,所有标志位均无定义。,2022年12

42、月11日12时14分,51,3-3 8086的指令系统 算术运算指令, IDIV整数除法指令(Integer Division) 指令格式: IDIV 源 指令功能:对两个带符号二进制数进行除法操作(也称为带符号数除法) 注意: 操作与DIV相同;商和余数都是带符号数,且规定余数的符号和被除数的相同; 指令执行后,所有标志位均无定义。无论对 (DIV)还是 (IDIV),都要注意溢出问题:字节操作时:被除数的高8位绝对值大于除数的绝对值,则产生溢出。(对于无符号数,允许最大商为FFH;对于带符号数,允许商的范围为-127+127,或-81H+7FH);字操作时:被除数的高16位绝对值大于除数的

43、绝对值,则产生溢出。(对于无符号数,允许最大商为FFFFH;对于带符号数,允许商的范围为-32767+32767,或-8001H7FFFH)。,2022年12月11日12时14分,52,3-3 8086的指令系统 算术运算指令,带符号数除法指令,字节操作时要求被除数为16位,字操作时要求被除数为32位,如果被除数不满足这个条件,不能简单地将高位置0,而应该用符号扩展指令(Sign Extension)将被除数转换成除法指令所要求的格式。例 两个无符号数7A86H和04H相除,商应为多少?解:MOV AX,7A86H MOV BL,04H DIV BL 结果:正确的商应为1EA1H。 由于BL中

44、的除数04H为字节,被除数为字,商1EA1H大于AL中能存放的最大无符号数FFH,产生除法错误中断。,2022年12月11日12时14分,53,3-3 8086的指令系统 算术运算指令, CBW把字节转换为字指令(Convert Byte to Word) 指令格式:CBW 指令功能:把寄存器AL中字节的符号位扩充到AH的所有位。(AH被称为AL的符号扩充) 扩展方法:若AL中的D70,则将这个0扩展到AH中,使AH00H,即: D7 D0 D7 D0 AH AL AL=正数若AL中的D71,则将这个1扩展到AH中,使AHFFH,即: D7 D0 D7 D0 AH AL AL=负数 注意:CB

45、W指令执行后,不影响标志位。,2022年12月11日12时14分,54,3-3 8086的指令系统 算术运算指令, CWD把字转换成双字指令(Convert Word to Double Word) 指令格式:CWD 指令功能:把AX中字的符号值扩充到DX寄存器的所有位。 扩展方法:若AX的D150,则DX 0000H; 若AX的D151,则DX FFFFH。 注意:CWD指令执行后,也不影响标志位。 AAD除法的ASCII调整指令(ASCII Adjust for Division) 指令格式:AAD 指令功能:在做除法前,把BCD码转换成二进制数。 调整过程:AL AH10AL;AH 00

46、 注意:AX中的两位非压缩格式的BCD数除以一个非压缩的BCD数前,要先用AAD指令把AX中的被除数调整成二进制数,并存到AL中,才能用DIV指令进行运算。根据AL寄存器结果影响SF、ZF、PF,但对OF、CF、AF无定义。,2022年12月11日12时14分,55,3-3 8086的指令系统 算术运算指令,例 编写程序,计算756l 23 解:该除法运算过程表示如下:(注:75以BCD码的形式存放),2022年12月11日12时14分,56,3-3 8086的指令系统 算术运算指令,程序如下: FIRSTDB06H;除数6 SECONDDB75H ;被除数75H THIRDDB2 DUP(0

47、);存商 FOURDB?;存余数 MOVAH,00H;第一个被除数高位AH清0 MOVAL,SECOND;AL被除数75 ANDAL,0F0H;截取高4位 MOVCL,04H ROLAL,CL;移至低4位 DIVFIRST;AX/06,即000706; ;得结果:AL商为1,AH余数1 MOVTHIRD+1,AL;结果单元第一个商1,2022年12月11日12时14分,57,3-3 8086的指令系统 算术运算指令,MOVAL,SECOND;AL被除数75 ANDAL,0FH ;AL截低4位,故AX0105H AAD;将AX中内容0105H调整为0FH DIVFIRST;0FH/6,结果:AL商为2,AH余数3 MOVTHIRD,AL;THIRD单元第二个商2 MOV FOUR, AH ; FOUR单元第二个余数3,数据存放格式,2022年12月11日12时14分,58,小 结,1重点寻址方式、指令系统2难点指令的正确应用3作业 P120 8 P121 9、10、11、12、13,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号