《进制算术运算》PPT课件.ppt

上传人:牧羊曲112 文档编号:5611193 上传时间:2023-08-02 格式:PPT 页数:94 大小:206KB
返回 下载 相关 举报
《进制算术运算》PPT课件.ppt_第1页
第1页 / 共94页
《进制算术运算》PPT课件.ppt_第2页
第2页 / 共94页
《进制算术运算》PPT课件.ppt_第3页
第3页 / 共94页
《进制算术运算》PPT课件.ppt_第4页
第4页 / 共94页
《进制算术运算》PPT课件.ppt_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《《进制算术运算》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《进制算术运算》PPT课件.ppt(94页珍藏版)》请在三一办公上搜索。

1、第10章 二进制算术运算,10.1 加法与减法指令(ADD与SUB)10.2 无符号数与带符号数 10.3 乘法 10.4 除法 10.5 改变符号和符号扩展指令 10.6 寻址与加、减法运算练习,10.1 加法与减法指令(ADD与SUB),ADD与SUB指令是加法与减法指令,可进行二进制数的字节或字的加、减运算。加法运算与手工加法相似,按逢二进一求和。而对于减法运算,计算机是利用对减数求补与被减数相加的方法来处理。方法是:将第二个操作数(减数),每一位变反(01或10),然后加1,这个过程称为求补;最后再与第一个操作数(被减数)相加。对于操作数的寻址有下列五种可能:,立即数与存储器的加/减立

2、即数与寄存器的加/减寄存器与寄存器的加/减寄存器与存储器的加/减存储器与寄存器的加/减,例10.1 加法指令ADD与减法指令SUB的使用。其中,子程序B10ADD使用ADD指令来处理字节的相加,C10SUB使用SUB指令来处理字的相减。源程序清单如下:;filename:L101.ASM;CODE SEGMENT ASSUME CS:CODE,DS:CODE,SS:CODE,ORG 100H BEGIN:JMP SHORT MAIN;BYTEA DB 64H;数据定义,BYTEB DB 40H BYTEC DB 16H WORDA DW 4000H WORDB DW 2000H WORDC D

3、W 1000H;MAIN PROC NEAR CALL B10ADD;调用加法子程序 CALL C10SUB;调用减法子程序,RET MAIN ENDP;B10ADD PROC MOV AL,BYTEA MOV BL,BYTEB ADD AL,BL;寄存器与寄存器 ADD AL,BYTEC;存储器与寄存器 ADD BYTEA,BL;寄存器与存储器,ADD BL,10H;立即数与寄存器 ADD BYTEA,25H;立即数与存储器 RETB10ADD ENDP;C10SUB PROC MOV AX,WORDA MOV BX,WORDB SUB AX,BX;寄存器与寄存器,SUB AX,WORDC;

4、存储器与寄存器 SUB WORDA,BX;寄存器与存储器 SUB BX,1000H;立即数与寄存器 SUB WORDA,256H;立即数与存储器 RETC10SUB ENDP;CODE ENDS END BEGIN,因为不允许存储器与存储器之间直接进行数据运算,所以可以使用寄存器来作为中间桥梁。例如,WORDA与WORDB均定义成WORD(字),要将WORDA加到WORDB的运算,可以写出如下语句:MOV AX,WORDA ADD AX,WORDB MOV WORDB,AX,1.溢出 一个字节所能表示的带符号二进制数的范围为-128+127,当运算的结果超出这个范围时就称为溢出。通常的算术运算

5、很容易超过一个字节寄存器的容量。例如,当寄存器AL中的和超过其最大容量时,不会自动地将溢出扩充到AH寄存器中。假设AL60H,若 ADD AL,20H,AL中将产生和的结果80H;同时设定溢出标志位CF1,符号标志位SF1。80H的二进制为10000000,表示为一个负数为-128。两个正数求和结果为负,这是为什么?问题的原因就是AL寄存器的容量太小,需要将和放在AX寄存器中。下列CBW指令可将字节转换成字,将AL中的60H根据其正负号扩展AH成为0060H存入AX中。这时ADD在AX中才能产生正确的结果:0080H或+128。CBW;将AL扩展到AH ADD AX,20H;20H加入AX中,

6、2.多字节加法例10.2 多字节加法。源程序清单如下:,;filename:L102.ASM 多字节加法 CODE SEGMENT PARA CODE ASSUME CS:CODE,DS:CODE,SS:CODE ORG 100H BEGIN:JMP SHORT MAIN,;WORD1A DW 0123H;数据定义 WORD1B DW 0BC62H WORD2A DW 0012H WORD2B DW 553AH WORD3A DW?WORD3B DW?;,MAIN PROC NEAR CALL D10DWD;调用加法子程序1 CALL E10DWD;调用加法子程序2 RET MAIN ENDP

7、,;加法子程序1 D10DWD PROC MOV AX,WORD1B ADD AX,WORD2B MOV WORD3B,AX MOV AX,WORD1A ADC AX,WORD2A MOV WORD3A,AX RET,D10DWD ENDP;加法子程序2E10DWD PROC CLC MOV CX,02 LEA SI,WORD1B LEA DI,WORD2B LEA BX,WORD3B E20:MOV AX,SI,ADC AX,DIMOV BX,AX DEC SI;寄存器与寄存器 DEC SI;存储器与寄存器 DEC DIDEC DIDEC BXDEC BX,LOOP E20;寄存器与存储器

8、RET E10DWD ENDP CODE ENDS END BEGIN,例10.2 进行的是0123BC62+0012553A。例10.2中,加法子程序1(D10DWD)将一对字(WORD1A与WORD1B)加到第二对字(WORD2A与WORD2B),将和存到第三对字(WORD3A与WORD3B)中。运算先加最低的字:,WORD1B BC62WORD2B 553A 和 1119C,和为十六进制1119C,超过了AX寄存器的无符号数最大容量,进位标志CF1。下面将高字相加,ADC指令连同进位CF一起求和。,WORD1A 0123WORD2A 0012 CF 1 和 0136,使用DEBUG追踪该

9、算术运算,将会观察到AX中存有0136,WORD3A存有3601,WORD3B存有9C11。例10.2中,加法子程序2(E10DWD)可以作任意长度的加法。从数据的最低位开始加起,第一次循环加最低的字,第二次循环加次低的字,所以,SI、DI、BX的内容需要减2。可以用两条DEC减1指令,实现递减的运算。请注意,指令 SUB 寄存器,02 将会影响标志位,清除进位标志CF,产生不正确的结果。,因为使用循环,所以仅使用一次加法指令ADC。开始的CLC指令将进位标志CF清为0。使用循环的方法有如下要求:字的定义必须是连续的;由低地址到高地址处理;CX的初值为相加的字数。多字的减法是用带借位的减法指令

10、SBB取代ADC,就是将子程序2(E10DWD)中的ADC以SBB取代。,10.2 无符号数与带符号数,某些数是无符号的,例如用户编号和日期。某些数是带符号的数,例如用户应付的金额,温度的读数可能包含正值或负值。又例如产品价格和付款值永远都被认定为正值。表10-1给出了与寄存器宽度相匹配的无符号和带符号数据的最大值。,表10-1 无符号数与带符号数的最大值,对于不带符号的数,所有的位都表示数。8位寄存器可容纳的最大值是255(28-1),16位寄存器可容纳的最大值是65 535(216-1)。带正负号的数最高位表示正负号。在计算机中加、减法指令对于是否有正负号并不加以区别,而是所有的位都作加、

11、减运算。下列为两个二进制数相加,第一个数最高位为1,对于不带符号的数,代表249,如果是带符号数,则表示为-7:,无符号数 带符号数 1111 1001 249 7 0000 0010 2+2 1111 1011 251 5,带正负号与不带正负符号的运算结果是相同的。然而不带符号的结果是251,带符号的结果是-5。但是,其中总有一个应是你所需要的。当不带符号数的和产生进位(CF1)时,其结果不正确。,无符号数 带符号数 CF OF 1111 1100 252-4 0000 0101 5+5 0000 0001 1+1 1 0 不正确,当有符号数的和有进位给符号位却没有产生最高位进位,或没有进位

12、给符号位却有最高位的进位时,其结果不正确即有溢出。无符号数 带符号数 CF OF 0111 1001 121+121 0000 1011 11+11 1000 0100 132-124 0 1 不正确,进位和溢出同时发生的情况如下:无符号数 带符号数 CF OF 1111 0110 246-10 1000 1001 137-119 0111 1111 127+127 1 1 不正确 不正确,10.3 乘 法,对于乘法,MUL指令用于处理无符号数乘法,IMUL用来处理带符号数乘法。作为一个程序设计员,你必须控制所处理的数据格式并选择适当的指令。两个基本的乘法运算如下:,1.字节乘字节 被乘数放在

13、AL寄存器中,乘数放在寄存器或存储器的一个字节单元中(OPR),将乘积放在AX寄存器中。此运算会清除原存放在AH中的数据。如图10-1中的OPR是指令中的操作数,若OPR是字节型数据,AL的值与OPR相乘,16位的乘积放到AX中。,图10-1 字节乘法,2.字乘字 被乘数放在AX寄存器中,乘数放在寄存器或存储器的一个字单元中,将结果乘积的高16位部分放在DX中,低16位部分放在AX中。此运算将会清除原存于DX中的数据。若OPR是字型数据,把AX的值与OPR相乘,32位的乘积放到DX与AX中;DX放乘积的高16位,AX放乘积的低16位,如图10-2所示。,图10-2 字乘法,MUL与IMUL指令

14、中仅指定一个操作数(乘数)。指令如下:MUL MULTR;MULTR是存储器单元 指令默认被乘数一定放在AL或AX中,乘积的存放位置也是由指令本身确定的。这种由指令本身限定必须使用的操作数,称为隐含操作数。乘法中的乘数则需要在指令中用操作数的形式指明。如果MULTR定义为DB,则假设AL乘以字节数据;如果MULTR定义为DW,则假设AX乘以字数据。,当乘数放在寄存器中时,寄存器的长度决定运算数据的类型,如下所示:MUL CL;1字节数据相乘:被乘数放在AL,乘积放在AX MUL BX;1字数据相乘:被乘数放在AX,乘积放在DX:AX,10.3.1 无符号数乘法指令MUL MUL指令用作无符号数

15、的相乘。例10.3中C10MUL给出三个乘法的例子:字节乘以字节,字乘以字和字乘以字节。第一个例子为十六进制80(128)与十六进制40(64)两数相乘,乘积十六进制2000(8192)放在AX中。第二个例子所产生的乘积为十六进制10000000,存放在DX:AX中。,例10.3 乘法指令范例。源程序清单如下:;filename:L103.ASM 乘法范例TITLE EXMULT(COM)Example MUL&IMUL operationsCODESG SEGMENT PARA CODE ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H,BEGIN:

16、JMP SHORT MAIN;BYTE1 DB 80HBYTE2 DB 40HWORD1 DW 8000HWORD2 DW 2000H,;MAIN PROC NEAR CALL C10MUL CALL D10IMUL RETMAIN ENDP;Examples of MULC10MUL PROC MOV AL,BYTE1,MUL BYTE2MOV AX,WORD1 MUL WORD2 MOV AL,BYTE1 SUB AH,AH MUL WORD1 RETC10MUL ENDP,;Examples of IMULD10IMUL PROC MOV AL,BYTE1 IMUL BYTE2 MOV

17、AX,WORD1 IMUL WORD2 MOV AL,BYTE1 CBW,IMUL WORD1 RET D10IMUL ENDP CODESG ENDS END BEGIN 第三个例子是字与字节数据的乘,必须将BYTE1扩展为一个字数据。因为数值假设为无符号数,所以AH寄存器最高位假定为0,若使用CBW指令最高位可能是0或1。乘积存于DX:AX中,为十六进制00400000。,10.3.2 带符号数乘法指令IMUL IMUL指令用来处理带符号数相乘。例10.3中D10IMUL使用类似C10MUL中的三个范例,将MUL以IMUL取代。第一个例子中将十六进制80(负数)乘以十六进制40(正数)。乘

18、积为十六进制E000,存入AX寄存器中。使用相同的数据,MUL则产生十六进制2000的结果。由此可以看出使用MUL与IMUL两者的差别。MUL将十六进制80看作+128,IMUL则认为80为-128。-128与64二者相乘的乘积为-8192,相当于十六进制的E000H。,第二个例子将十六进制8000(负数)乘以十六进制2000(正数)。乘积为十六进制F0000000,存于DX:AX中,它是IMUL所产生的负值乘积。第三个例子将AX中的BYTE1扩展为一个字数据。因为数值被假定为带符号数,所以此处必须使用CBW将最高位扩展到AH寄存器:在AL中的十六进制80,使AX中的十六进制数为FF80。,因

19、为乘数WORD1也是负数,所以乘积为正。实际上在DX:AX中的十六进制00400000与MUL有相同的结果。MUL是假定两个正数相乘。实际上,如果乘数与被乘数有相同的正负符号,则MUL与IMUL会产生相同的结果。但如果乘数与被乘数的正负符号不相同,则MUL产生一个正号的乘积,IMUL则产生一个负号的乘积。你可以用DEBUG来追踪上述的例子。,10.3.3 运算效率 如果乘数是2的乘方如2、4、8等,使用向左移位将更有效率,左移1位相当于乘2,左移2位相当于乘4,左移3位相当于乘8。超过一次的移位,需将移位的次数存入CL寄存器中。下例中假设被乘数存放在AL或AX中:SHL AL,1;AL左移1位

20、乘2 MOV CL,3 SHL AX,CL;AX左移3位乘8,10.3.4 多字节数的乘法 字所能容纳的最大的带符号数为+32 767。若要处理更大的数值,则需要用特殊处理的方法。处理的算法是将多字分别相乘并将各乘积相加。例如,下面十进制的乘法:,1365 12 2730 1365 16380,如果十进制算术仅能处理两位数的相乘,将如何处理?你可以将13与65分别乘上12,如下例所示:,13 65 12 12 26 130 13 65 156 780,然后将两乘积相加,但应记得,因为13是百位数,所以实际上的积应该为15 600,结果为,15600 780 16380,10.4 除 法,对于除

21、法,DIV指令用来处理无符号数除法,IDIV指令用来处理带符号数除法。你可以根据实际的需求来加以选择。现将指令的功能介绍如下。,1.字除以字节 被除数放在AX中,除数为一字节数据,存放在寄存器或存储器单元中。运算完毕后,余数放在AH中,商放在AL中,见图10-3。因为一个字节的商非常小,无符号数的最大值为+255(十六进制FF),带符号数的最大值为+127(十六进制7F),所以指令的运算可用性不高。,图10-3 字节除法,图10-4 字除法,2.双字除以字 被除数放在DX:AX中,除数为一字数据,存放在寄存器或存储器单元中。运算完毕后,余数放在DX中,商放在AX中,见图10-4。一个字的商,无

22、符号数时最大值为65 535(十六进制为FFFF),带符号数时的最大值为+32 767(十六进制为7FFF)。与乘法指令类似,DIV指令也限定了隐含的操作数,包括被除数和结果的存放位置。特别的是,除法运算的结果包括商和余数两部分。,DIV与IDIV的操作数是指除数而言,假设指令如下:DIV DIVISOR;DIVISOR是存储单元 如果DIVISOR定义成DB,则运算被看作是字节除法;如果DIVISOR定义成DW,则运算被看作是字除法。,10.4.1 无符号数除法指令DIV 例10.4中子程序D10DIV提供4个例子:字除以字节,字节除以字节,双字除以字,字除以字。第一个例子是以十六进制的20

23、00(8192)除以十六进制的80(128),余数00存放在AH中,而商为十六进制40(64),存放在AL中。第二个例子中先将BYTE1扩展为字数据。因为假定为无符号数,故AH所有的位设定为0。余数十六进制12存放在AH中,商为十六进制05,存放在AL中。,第三个例子产生的余数为十六进制1000,存放在DX中,商为十六进制0080,存放在AX中。第四个例子中需将WORD1扩展为双字,存于DX中。运算完毕后得出余数为十六进制0000,存放在DX中,商为十六进制0002,存放在AX中。,例10.4 除法指令范例。源程序清单如下:;filename:L104.ASM 除法指令范例 TITLE EXD

24、IV(COM)Examples of DIV&IDIV operations CODESG SEGMENT PARA CODE ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H BEGIN:JMP SHORT MAIN,;BYTE1 DB 80H BYTE3 DB 16H WORD1 DW 2000H WORD2 DW 0010H WORD3 DW 1000H;,MAIN PROC NEAR CALL D10DIV CALL E10IDIV RET MAIN ENDP;Examples of DIVD10DIV PROCMOV AX,WORD1,DIV

25、 BYTE1MOV AL,BYTE1SUB AH,AHDIV BYTE3MOV DX,WORD2MOV AX,WORD3DIV WORD1MOV AX,WORD1SUB DX,DX,DIV WORD3RET D10DIV ENDP;Examples of IDIV E10IDIV PROC MOV AX,WORD1IDIV BYTE1MOV AL,BYTE1CBWIDIV BYTE3,MOV DX,WORD2 MOV AX,WORD3 IDIV WORD1 MOV AX,WORD1 CWD IDIV WORD3 RET E10IDIV ENDP CODESG ENDS END BEGIN,10

26、.4.2 带符号数除法指令IDIV IDIV OPR是带符号数的除法指令。例10.4中子程序E10IDIV提供了类似D10DIV中的四个例子,仅用IDIV取代了DIV。第一个例子以十六进制2000(正数)除以十六进制80(负数)。余数为十六进制00,存于AH中,商为C0(-64),存于AL中。使用相同的数据,以DIV指令处理时,其商为+64。,其余的三个例子所得的结果如下:IDIV 余数 商(2)EE(-18)FB(-5)(3)1000(4096)0080(128)(4)0000 0002,只有第四个例子会产生与DIV相同的结果。事实上,如果被除数与除数为同符号时,则DIV与IDIV有相同的结

27、果。但如果二者正负号不同时,则DIV的商为正,IDIV的商则为负。你可以用DEBUG来追踪以上的例子。带符号数的除法还涉及到余数的符号问题。例如,(+5)除以(-3)可以有两种计算结果:一种是商为-1,余数+2;另一种是商为-2,余数-1。尽管这两种结果都有其正确的含义,但在计算机中却不能允许两种结果并存。8086/8088及高档次的Intel系列CPU在设计上对这一问题做了规定:余数与被除数的符号相同,因此前一种结果是正确的。,10.4.3 运算效率 如果除数为2的乘方(2、4、8等),则用向右移位的方法将更有效。以下的例子,假定被除数存于AX寄存器中:SHR AX,1;AX右移1位除以2

28、MOV CL,3 SHR AX,CL;AX右移3位除以8,10.4.4 溢出与中断 使用DIV特别是IDIV指令,存放除数、商和余数的位数相等;而被除数的位数是它们的两倍,商就有可能不够放。这种商不够放的现象称为“除法溢出”,当除数为0时也视为“溢出”;“溢出”所引起的中断是不可预料的,将在屏幕上显示溢出信息“Divide Overflow”,并结束该指令所在程序的执行,返回操作系统。,除法产生溢出的规则之一:若除数是一个字节,它的内容必须小于被除数的最左边的字节(AH);若除数是一个字,它的内容必须小于被除数最左边的字(DX),否则就会产生“溢出”。例如,除数为1时,所产生的商与被除数相同,

29、就会引起中断的发生,其他值也适用。例如:被除数 除数 商 0123 01 123 0001 4926 0001 14026,上述两个例子,商都超过存放它的寄存器的最大容量。编程时你可以在DIV或IDIV运算之前加以检测,做出选择。例如,下面的第一个例子,假设DIVBYTE是一个字节的除数,被除数存于AX中。第二个例子中DIVWORD是一个字的除数,被除数存于DX:AX中。,字除以字节 双字除以字 CMP AH,DIVBYTE CMPAX,DIVWORD JNB OVERFLOW-RTNE JNB OVERFLOW-RTNE DIV DIVBYTE DIV DIVWORD 对于IDIV,必须考虑

30、到除数与被除数可能为负值的情况。方法是检测除数的符号,可以暂时使用NEG指令将负数设为正数。,10.5 改变符号和符号扩展指令,10.5.1 改变符号指令NEG NEG指令用于改变二进制数的正负号,即从正号变为负号或从负号变为正号。NEG指令类似于NOT指令,先将所有的位由0变1、由1变0,然后再加上1。假设,AX为十六进制FFFF(-1),BL为十六进制FF(-1),BINAMT为十六进制0001(+1)。例如:,NEG AX;AX0001 NEG BL;BL01NEG BINAMT(在内存的字或字节);BINAMTFFFF,结果,要改变32位或更大数值的正负号,需要更多的步骤;假设在DX:

31、AX中含有32位的二进制数,由于NEG指令不能对DX:AX同时起作用,若使用NEG指令将引起不正确的结果。而应使用NOT指令:NOT DX;取DX的反码 NOT AX;取AX的反码 ADD AX,1;AX加1 ADC DX,0;进位加给DX,10.5.2 字节转换成字指令CBW CBW 指令对AL中的带符号数进行符号扩展;当AL0时,AH被赋值为0FFH,否则AH被置为0。该指令不影响所有标志位。CBW指令用来将一个8位的带符号数变换成与其等值的16位带符号数,要求原数据放在AL中,而转换结果放在AX中,并且AX中的低8位部分(AL)不变。,CBW指令一般与IDIV指令配合使用。当程序中需要用

32、一个字节型带符号数去除以另一个字节型带符号数时,按IDIV指令的要求,必须把字型的被除数放在AX中。为此,就需要用CBW指令,把存放在AL中的字节型被除数进行符号扩展变成字型带符号数。然后,才能用IDIV指令进行除法运算。,10.5.3 字转换成双字指令CWD CWD指令将AX中的符号扩展到DX中。若AX的内容为正数,则扩展以后将0000送入DX;若 AX的内容为负数,则扩展以后将0FFFF送入DX。CBW指令和CWD指令格式中不带操作数,隐含对AL、AX中的内容或对AX、DX中的内容进行的运算。CWD指令的用法同CBW指令相同,与IDIV指令配合使用。不同之处是将16位的带符号数变换成32位

33、的带符号数。,10.6 寻址与加、减法运算练习,这一节是对本章内容的练习,通过对例题的练习与上机操作,可帮助你加深了解CPU字节操作数和字操作数的寻址特点,掌握加、减运算指令的特点(只能进行二进制数的运算)。练习内容:(1)字节与字的加、减法运算。(2)多字节加法运算。,10.6.1 练习一:字节与字的加、减法运算1.程序架构1)数据段定义数据段:BYTEA DB 64HBYTEB DB 40HBYTEC DB 16HWORDA DW 4000HWDORB DW 2000HWDROC DW 1000H结束数据段:,2)指令段按程序架构定义段、过程:程序按返回DOS的方式初始化:CALL B10

34、ADDCALL C10SUB程序按返回DOS的方式结束程序:按程序架构结束过程:;字节加法子程序B10ADDPROC,MOV AL,BYTEA MOV BL,BYTEB ADD AL,BL;寄存器加给寄存器 ADD AL,BYTEC;存储单元加给寄存器 ADD BYTEA,BL;寄存器加给存储单元 ADD BL,10H;立即数加给寄存器 ADD BYTEA,25H;立即数与存储单元加 RET B10ADD ENDP,;字减法子程序C10SUB PROC MOV AX,WORDA MOV BX,WORDB SUB AX,BX;寄存器减寄存器 SUB AX,WORDC;存储单元减寄存器存 SUB

35、WORDC,BX;寄存器减存储单元 SUB BX,1000H;立即数减寄存器 SUB WORDA,256H;立即数减存储单元,RET;指令段结束:源程序结束:,2.练习内容(1)补充完整的数据段和指令段的架构。(2)对源程序中每条指令分析并写出执行结果。(3)以图形的方式写出数据段内容的映像。注意:字内容的映像是逆序。(4)上机编辑源程序,汇编、链接生成.EXE文件。(5)用DEBUG调试追踪指令的执行过程,与你分析的结果进行对照,巩固对内容的理解。(6)选择教材中有关溢出、进位的数据,修改数据段内容,进行追踪调试,观察结果与标志位的变化。,10.6.2 练习二:多字加法 十六位寄存器的最大容

36、量是+32 767,限制了计算机处理算术运算的容量。采用编程的方法可以扩大运算范围即容量。下列程序是两个字(32位)的加法运算。参与运算的数分别为0123 BC62H和0012 553AH,求和的结果为0136 119CH。,1程序架构1)数据段WORD1A DW 0123HWORD1B DW 0BC62HWORD2A DW 0012HWORD2B DW 553AHWORD3A DW?WORD3B DW?,2)指令段 CALL D10DWDCALL E10DWD;直接寻址加,子程序D10DWD PROC MOV AX,WORD1B ADD AX,WORD2B MOV WORD3B,AX MOV

37、 AX,WORD1A ADC AX,WORD2A,MOV WORD3A,AX RETD10DWD ENDP;循环方式加,子程序(适用任意字加、减)E10DWD PROCCLCMOV CX,02LEA SI,WORD1BLEA DI,WORD2BLEA BX,WORD3B,E20:MOV AX,SI ADC AX,DI MOV BX,AX DEC SI DEC SI DEC DI DEC DI DEC BX DEC BX LOOP E20 RET E10DWD ENDP,2练习内容(1)补充完整的数据段和指令段。(2)对程序中的每一条指令,分析注释并写出结果。(3)编辑、汇编、链接产生.EXE文件。(4)用DEBUG单步追踪程序的执行,与你分析的结果进行对比。,3.练习参考 记录、分析下列问题:(1)执行子程序前数据段内容的映像。(2)执行完MOV WORD3B,AX指令后数据段的映像。(3)执行完MOV WORD3A,AX指令后数据段的映像。(4)若进行数据0123 BC62 F67BH+0012 553A AB65H=0136 119D A1E0H的运算。请修改程序和数据段。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号