《汇编语言第七章答案.pdf》由会员分享,可在线阅读,更多相关《汇编语言第七章答案.pdf(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!7.1 编写一条宏指令 CLRB,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。答:宏定义如下:CLRB MACRO N,CFIL MOV CX,N CLD MOV AL,;取空格符的 ASCII 码 LEA DI,CFIL REP STOSB ENDM 7.2 某工厂计算周工资的方法是每小时的工资率 RATE 乘以工作时间 HOUR,另外每工作满10小时加奖金3元,工资总数存放在 WAG 中。请将周工资的计算编写成一条宏指令 WAGES,并展开宏调用:WAGES R1,42,
2、SUM 答:宏定义如下:WAGES MACRO RATE,HOUR,WAG MOV AL,HOUR;计算周工资(WAG),公式为:HOUR*RATE MOV BL,RATE MUL BL MOV WAG,AX MOV AL,HOUR;计算奖金存入(AX),公式为:HOUR/10的商*3 MOV AH,0 MOV BL,10 DIV BL MOV BL,3 MUL BL ADD WAG,AX;计算周工资总数 ENDM 宏调用:WAGES R1,42,SUM 宏展开:1 MOV AL,42 1 MOV BL,R1 1 MUL BL 1 MOV SUM,AX 1 MOV AL,42 1 MOV AH
3、,0 1 MOV BL,10 1 DIV BL 1 MOV BL,3 1 MUL BL 1 ADD SUM,AX 7.3 给定宏定义如下:(注意:此宏指令的功能是 V3|V1-V2|)DIF MACRO X,Y 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV AX,X SUB AX,Y ENDM ABSDIF MACRO V1,V2,V3 LOCAL CONT PUSH AX DIF V1,V2 CMP AX,0 JGE CONT NEG AX CONT:MOV V3,AX POP AX ENDM 试展开以下调用,并判定调用是否有效。(1)
4、ABSDIF P1,P2,DISTANCE(2)ABSDIF BX,SI,XDI,CX(3)ABSDIF BXSI,XBXSI,240H(4)ABSDIF AX,AX,AX 答:(1)宏调用 ABSDIF P1,P2,DISTANCE 的宏展开如下:此宏调用有效。1 PUSH AX 1 DIF P1,P2 1 MOV AX,P1 1 SUB AX,P2 1 CMP AX,0 1 JGE?0000 1 NEG AX 1?0000:MOV DISTANCE,AX 1 POP AX(2)宏调用 ABSDIF BX,SI,XDI,CX 的宏展开如下:此宏调用有效。1 PUSH AX 1 DIF BX,
5、SI 1 MOV AX,BX 1 SUB AX,SI 1 CMP AX,0 1 JGE?0001 1 NEG AX 1?0001:MOV XDI,AX 1 POP AX(3)宏调用 ABSDIF BXSI,XBXSI,240H 的宏展开如下:此宏调用无效。1 PUSH AX 1 DIF BXSI,XBXSI 1 MOV AX,BXSI 1 SUB AX,XBXSI 1 CMP AX,0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!1 JGE?0002 1 NEG AX 1?0002:MOV 240H,AX 1 POP AX(4)宏调用 ABSD
6、IF AX,AX,AX 的宏展开如下:此宏调用有效但无多大意义。1 PUSH AX 1 DIF AX,AX 1 MOV AX,AX 1 SUB AX,AX 1 CMP AX,0 1 JGE?0003 1 NEG AX 1?0003:MOV AX,AX 1 POP AX 7.4 试编制宏定义,要求把存储器中的一个用 EOT(ASCII 码04H)字符结尾的字符串传送到另一个存储区去。答:宏定义如下:SEND MACRO SCHARS,DCHARS LOCAL NEXT,EXIT PUSH AX PUSH SI MOV SI,0 NEXT:MOV AL,SCHARSSI MOV DCHARSSI,
7、AL CMP AL,04H;是 EOT 字符吗?JZ EXIT INC SI JMP NEXT EXIT:POP SI POP AX ENDM 7.5 宏指令 BIN_SUB 完成多个字节数据连减的功能:RESULT(A-B-C-D-)要相减的字节数据顺序存放在首地址为 OPERAND 的数据区中,减数的个数存放在 COUNT单元中,最后结果存入 RESULT 单元。请编写此宏指令。答:宏定义如下:BIN_SUB MACRO RESULT,A,OPERAND,COUNT LOCAL NEXT_SUB PUSH CX PUSH BX PUSH AX MOV CX,COUNT MOV AL,A L
8、EA BX,OPERAND 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!CLC NEXT_SUB:SBB AL,BX INC BX LOOP NEXT_SUB MOV RESULT,AL POP AX POP BX POP CX ENDM 7.6 请用宏指令定义一个可显示字符串 GOOD:GOOD STUDENTS:CLASSX NAME,其中X 和 NAME 在宏调用时给出。答:宏定义如下:DISP_GOOD MACRO X,NAME GOOD DB GOOD STUDENTS:CLASS&X&NAME,0DH,0AH,$ENDM 7.7 下
9、面的宏指令 CNT 和 INC1完成相继字存储。CNT MACRO A,B A&B DW?ENDM INC1 MACRO A,B CNT A,%B B=B+1 ENDM 请展开下列宏调用:C=0 INC1 DATA,C INC1 DATA,C 答:宏展开如下:C=0 INC1 DATA,C 1 DATA0 DW?INC1 DATA,C 1 DATA0 DW?(注意:C 为0没有变)7.8 定义宏指令并展开宏调用。宏指令 JOE 把一串信息MESSAGE NO.K存入数据存储区XK 中。宏调用为:I=0 JOE TEXT,I JOE TEXT,I JOE TEXT,I 答:宏定义如下:MARY
10、MACRO X,K 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!X&K DB MESSAGE NO.&K ENDM JOE MACRO A,I MARY A,%I I=I+1 ENDM 宏调用和宏展开:I=0 JOE TEXT,I 1 TEXT0 DB MESSAGE NO.0 JOE TEXT,I 1 TEXT1 DB MESSAGE NO.1 JOE TEXT,I 1 TEXT2 DB MESSAGE NO.2 7.9 宏指令 STORE 定义如下:STORE MACRO X,N MOV X+I,I I=I+1 IF I-N STORE X
11、,N ENDIF ENDM 试展开下列宏调用:I=0 STORE TAB,7 答:宏展开如下:I=0 STORE TAB,7 1 MOV TAB+0,0 1 MOV TAB+1,1 1 MOV TAB+2,2 1 MOV TAB+3,3 1 MOV TAB+4,4 1 MOV TAB+5,5 1 MOV TAB+6,6 7.10 试编写非递归的宏指令,使其完成的工作与7.9题的 STORE 相同。答:宏定义如下:STORE MACRO K MOV TAB+K,K ENDM 宏调用:I=0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!REPT 7
12、 STORE%I I=I+1 ENDM 7.11 试编写一段程序完成以下功能,如给定名为 X 的字符串长度大于5时,下列指令将汇编10次。ADD AX,AX 答:程序段如下:X DB ABCDEFG IF($-X)GT 5 REPT 10 ADD AX,AX ENDM ENDIF 7.12 定义宏指令 FINSUM:比较两个数 X 和 Y(X、Y 为数,而不是地址),若 XY 则执行SUMX+2*Y;否则执行 SUM2*X+Y。答:宏定义如下:CALCULATE MACRO A,B,RESULT;计算 RESULT2*A+B MOV AX,A SHL AX,1 ADD AX,B MOV RES
13、ULT,AX ENDM FINSUM MACRO X,Y,SUM IF X GT Y CALCULATE Y,X,SUM ELSE CALCULATE X,Y,SUM ENDIF ENDM 7.13 试编写一段程序完成以下功能:如变元 X=VT55,则汇编 MOV TERMINAL,0;否则汇编 MOV TERMINAL,1。答:宏定义如下:BRANCH MACRO X IFIDN,MOV TERMINAL,0 ELSE MOV TERMINAL,1 ENDIF ENDM 7.14 对于 DOS 功能调用,所有的功能调用都需要在 AH 寄存器中存放功能码,而其中有一些功能需要在 DX 中放一个
14、值。试定义宏指令 DOS21,要求只有在程序中定义了缓冲区时,汇编为:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV AH,DOSFUNC MOV DX,OFFSET BUFF INT 21H 否则,无 MOV DX,OFFSET BUFF 指令。并展开以下宏调用:DOS21 01 DOS21 0AH,IPFIELD 答:宏定义如下:DOS21 MACRO DOSFUNC,BUFF MOV AH,DOSFUNC IFDEF BUFF MOV DX,OFFSET BUFF ENDIF INT 21H ENDM 宏展开:DOS21 01 1 M
15、OV AH,01 1 INT 21H DOS21 0AH,IPFIELD 1 MOV AH,0AH 1 MOV DX,OFFSET IPFIELD 1 INT 21H 7.15 编写一段程序,使汇编程序根据 SIGN 中的内容分别产生不同的指令。如果(SIGN)=0,则用字节变量 DIVD 中的无符号数除以字节变量 SCALE;如果(SIGN)=1,则用字节变量DIVD 中的带符号数除以字节变量 SCALE,结果都存放在字节变量 RESULT 中。答:程序段如下:MOV AL,DIVD IF SIGN MOV AH,0 DIV SCALE ELSE CBW IDIV SCALE ENDIF M
16、OV RESULT,AL 7.16 试编写宏定义 SUMMING,要求求出双字数组中所有元素之和,并把结果保存下来。该宏定义的哑元应为数组首址 ARRAY,数组长度 COUNT 和结果存放单元 RESULT。答:宏定义如下:SUMMING MACRO ARRAY,COUNT,RESULT LOCAL ADDITION MOV ESI,0 MOV ECX,COUNT ADDITION:MOV EAX,ARRAYESI*4;双字为4字节 ADD RESULT,EAX 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!ADC RESULT+4,0;将进位加
17、到结果的高位双字中 INC ESI LOOP ADDITION ENDM 7.17 为下列数据段中的数组编制一程序,调用题7.16的宏定义 SUMMING,求出该数组中各元素之和。DATA DD 101246,274365,843250,475536 SUM DQ?答:程序如下:SUMMING MACRO ARRAY,COUNT,RESULT LOCAL ADDITION MOV ESI,0 MOV ECX,COUNT ADDITION:MOV EAX,ARRAYESI*4;双字为4字节 ADD RESULT,EAX ADC RESULT+4,0;将进位加到结果的高位双字中 INC ESI L
18、OOP ADDITION ENDM.MODEL SMALL.386.DATA DATA DD 101246,274365,843250,475536 SUM DQ?.CODE START:MOV AX,DATA MOV DS,AX SUMMING DATA,4,SUM MOV AX,4C00H INT 21H END START 7.18 如把题7.16中的宏定义存放在一个宏库中,则题7.17的程序应如何修改?答:程序修改如下:.MODEL SMALL.386.DATA DATA DD 101246,274365,843250,475536 SUM DQ?.CODE START:MOV AX,
19、DATA MOV DS,AX SUMMING DATA,4,SUM MOV AX,4C00H 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!INT 21H END START 3.1 给定(BX)=637DH,(SI)=2A9BH,位移量 D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1)立即寻址(2)直接寻址(3)使用 BX 的寄存器寻址(4)使用 BX 的简接寻址(5)使用 BX 的寄存器相对寻址(6)基址变址寻址(7)相对基址变址寻址 答:(1)操作数在指令中,即立即数;(2)EA=D=7237H;(3)无 EA,操作数为(
20、BX)=637DH;(4)EA=(BX)=637DH;(5)EA=(BX)+D=0D5B4H;(6)EA=(BX)+(SI)=8E18H;(7)EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此 EA=004FH。3.2 试根据以下要求写出相应的汇编语言指令(1)把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器中。(2)用寄存器BX 和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到 AL 寄存器中。(3)用寄存器 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
21、(4)用位移量为 0524H 的直接寻址方式把存储器中的一个字与数 2A59H 相加,并把结果送回存储单元中。(5)把数 0B5H 与(AL)相加,并把结果送回 AL 中。答:(1)ADD DX,BX(2)ADD AL,BXSI(3)ADD BX+0B2H,CX(4)ADD WORD PTR 0524H,2A59H(5)ADD AL,0B5H 3.3 写出把首地址为 BLOCK 的字数组的第 6 个字送到 DX 寄存器的指令。要求使用以下几种寻址方式:(1)寄存器间接寻址(2)寄存器相对寻址(3)基址变址寻址 答:(1)MOV BX,OFFSET BLOCK ADD BX,(61)*2 MOV
22、 DX,BX(2)MOV BX,OFFSET BLOCK 改为:MOV BX,(6-1)*2 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(2)OBJ=0624H+02H+6BH=0691H(3)OBJ=0624H+02H+0C6H=05ECH ;C6H 对应的负数为-3AH(向上转移,负位移量)3.8 假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名
23、 VAL 的偏移地址为 0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?(1)MOV AX,0ABH (2)MOV AX,BX(3)MOV AX,100H (4)MOV AX,VAL(5)MOV AX,BX (6)MOV AX,ES:BX(7)MOV AX,BP (8)MOV AX,SI(9)MOV AX,BX+10 (10)MOV AX,VALBX(11)MOV AX,BXSI (12)MOV AX,VALBXSI 答:(1)立即方式;操作数在本条指令中(2)寄存器寻址方式;操作数为(BX)=0100H(3)直接寻址方式;PA=20100H(4)直接寻址方式;PA=2
24、0050H(5)BX 寄存器间接寻址方式;PA=20100H(6)附加段 BX 寄存器间接寻址方式;PA=21100H(7)BP 寄存器间接寻址方式;PA=15010H(8)SI 寄存器间接寻址方式;PA=200A0H(9)BX 寄存器相对寻址方式;PA=20110H(10)BX 寄存器相对寻址方式;PA=20150H(11)BX 和 SI 寄存器基址变址寻址方式;PA=201A0H(12)BX 和 SI 寄存器相对基址变址寻址方式;PA=201F0H 3.9 在 ARRAY 数组中依次存储了七个字数据,紧接着是名为 ZERO 的字单元,表示如下:ARRAY DW 23,36,2,100,32
25、000,54,0 ZERO DW?(1)如果 BX 包含数组 ARRAY 的初始地址,请编写指令将数据 0 传送给 ZERO 单元。(2)如果 BX 包含数据 0 在数组中的位移量,请编写指令将数据 0 传送给 ZERO 单元。答:(1)MOV AX,BX+(7-1)*2 MOV BX+(7)*2,AX(2)MOV AX,ARRAY BX MOV ARRAY BX+2,AX 3.10 如 TABLE 为数据段中 0032 单元的符号名,其中存放的内容为 1234H,试问以下两条指令有什么区别?指令执行完后 AX 寄存器的内容是什么?MOV AX,TABLE LEA AX,TABLE 答:MOV
26、 AX,TABLE 是将 TABLE 单元的内容送到 AX,(AX)=1234H LEA AX,TABLE 是将 TABLE 单元的有效地址送到 AX,(AX)=0032H 3.11 执行下列指令后 AX 寄存器中的内容是什么?TABLE DW 10,20,30,40,50 ;000AH,0014H,001EH,0028H,0032H ENTRY DW 3 0AH 00H 14H 00H 1EH 00H 28H 00H 32H 00H TABLE TABLE+3 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV BX,OFFSET TABLE
27、 ADD BX,ENTRY MOV AX,BX 答:(AX)=1E00H (TABLE 的存储方式如右图所示)3.12 下列 ASCII 码串(包括空格符)依次存储在起始地址为 CSTRING 的字节单元中:CSTRING DB BASED ADDRESSING 请编写指令将字符串中的第 1 个和第 7 个字符传送给 DX 寄存器。答:MOV DH,CSTRING MOV DL,CSTRING+7-1 3.13 已知堆栈段寄存器 SS 的内容是 0FFA0H,堆栈指针寄存器 SP 的内容是 00B0H,先执行两条把 8057H 和 0F79H 分别进栈的 PUSH 指令,再执行一条 POP 指
28、令。试画出堆栈区和 SP 的内容变化过程示意图(标出存储单元的物理地址)。答:堆栈区和 SP 的内容变化过程示意图如下左图所示。3.14 设(DS)=1B00H,(ES)=2B00H,有关存储单元的内容如上右图所示。请写出两条指令把字变量 X 装入 AX 寄存器。答:MOV BX,2000H MOV AX,ES:BX 3.15 求出以下各十六进制数与十六进制数 62A0H 之和,并根据结果设置标志位 SF、ZF、CF 和 OF 的值。(1)1234H (2)4321H (3)CFA0H (4)9D60H 答:(1)和为 74D4H;SF=0,ZF=0,CF=0,OF=0(2)和为 A5C1H;
29、SF=1,ZF=0,CF=0,OF=1(3)和为 3240H;SF=0,ZF=0,CF=1,OF=0(4)和为 0000H;SF=0,ZF=1,CF=1,OF=0 3.16 求出以下各十六进制数与十六进制数 4AE0H 的差值,并根据结果设置标志位 SF、ZF、CF 和 OF 的值。(1)1234H (2)5D90H (3)9090H (4)EA04H 答:(1)差为 C754H;SF=1,ZF=0,CF=1,OF=0(2)差为 12B0H;SF=0,ZF=0,CF=0,OF=0(3)差为 45B0H;SF=0,ZF=0,CF=0,OF=1(4)差为 9F24H;SF=1,ZF=0,CF=0,
30、OF=0 3.17 写出执行以下计算的指令序列,其中 X、Y、Z、R、W 均为存放 16 位带符号数单元的地址。79H 0FH 57H 80H FFAACH FFAB0H FFAAEH 首次进栈(SP)(SP)-2 再次进栈(SP)(SP)-2 出栈时(SP)(SP)+2 8000H 1B00:2000 2B00H X 1B00:2002 2B00:8000 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(1)ZW+(Z-X)(2)ZW-(X+6)-(R+9)(3)Z(W*X)/(Y+6),R余数 (4)Z(W-X)/5*Y)*2 答:(1)MO
31、V AX,Z ;以下程序都未考虑带符号数的溢出 SUB AX,X ADD AX,W MOV Z,AX(2)MOV BX,X ADD BX,6 MOV CX,R ADD CR,9 MOV AX,W SUB AX,BX SUB AX,CX MOV Z,AX(3)ADD Y,6 MOV AX,W IMUL X IDIV Y MOV Z,AX MOV R,DX(4)MOV AX,W SUB AX,X CWD MOV BX,5 IDIV BX IMUL Y SHL AX,1;(DX),(AX)*2 RCL DX,1 3.18 已知程序段如下:MOV AX,1234H;(AX)=1234H,标志位不变 M
32、OV CL,4 ;(AX)和标志位都不变 ROL AX,CL ;(AX)=2341H,CF=1,SF 和 ZF 不变 DEC AX ;(AX)=2340H,CF=1 不变,SF=0,ZF=0 MOV CX,4 ;(AX)和标志位都不变 MUL CX ;(AX)=8D00H,CF=OF=0,其它标志无定义 INT 20H 试问:(1)每条指令执行完后,AX 寄存器的内容是什么?(2)每条指令执行完后,进位、符号和零标志的值是什么?(3)程序结束时,AX 和 DX 的内容是什么?答:(1)见注释;(2)见注释;(3)(AX)=8D00H,(DX)=0 3.19 下列程序段中的每条指令执行完后,AX
33、 寄存器及 CF、SF、ZF 和 OF 的内容是什么?欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV AX,0 ;(AX)=0,标志位不变 DEC AX ;(AX)=0FFFFH,CF 不变,SF=1,ZF=0,OF=0 ADD AX,7FFFH ;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0 ADD AX,2 ;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1 NOT AX ;(AX)=7FFFH,标志位不变 SUB AX,0FFFFH ;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1 ADD A
34、X,8000H ;(AX)=0,CF=1,SF=0,ZF=1,OF=1 SUB AX,1 ;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0 AND AX,58D1H ;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0 SAL AX,1 ;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1 SAR AX,1 ;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0 NEG AX ;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0 ROR AX,1 ;(AX)=9397H,CF=1,SF 和 ZF 不变,OF=1 答:见注释。3.20 变
35、量 DATAX 和变量 DATAY 的定义如下:DATAX DW 0148H DW 2316H DATAY DW 0237H DW 4052H 请按下列要求写出指令序列:(1)DATAX 和 DATAY 两个字数据相加,和存放在 DATAY 中。(2)DATAX 和 DATAY 两个双字数据相加,和存放在从 DATAY 开始的双字单元中。(3)解释下列指令的作用:STC MOV BX,DATAX ADC BX,DATAY(4)DATAX 和 DATAY 两个字数据相乘(用 MUL)。(5)DATAX 和 DATAY 两个双字数据相乘(用 MUL)。(6)DATAX 除以 23(用 DIV)。(
36、7)DATAX 双字除以字 DATAY(用 DIV)。答:(1)MOV AX,DATAX ADD DATAY,AX MOV AX,DATAX+2 ADD DATAY+2,AX(2)MOV AX,DATAX ADD DATAY,AX MOV AX,DATAX+2 ADC DATAY+2,AX MOV DATAY+4,0 ;用于存放进位位 ADC DATAY+4,0(3)DATAX 和 DATAY 两个字数据之和加 1,结果存入 BX 寄存器。(4)RESULT1 DW 0 DW 0 RESULT2 DW 0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的
37、文档!DW 0 MOV AX,DATAX MUL DATAY MOV RESULT1,AX MOV RESULT1+2,DX MOV AX,DATAX+2 MUL DATAY+2 MOV RESULT2,AX MOV RESULT2+2,DX(5)AA DW 0 BB DW 0 CC DW 0 DD DW 0 MOV AX,DATAX MUL DATAY MOV AA,AX MOV BB,DX MOV AX,DATAX MUL DATAY+2 ADD BB,AX ADC CC,DX MOV AX,DATAX+2 MUL DATAY ADD BB,AX ADC CC,DX ADC DD,0 MO
38、V AX,DATAX+2 MUL DATAY+2 ADD CC,AX ADC DD,DX(6)MOV AX,DATAX MOV BL,23 DIV BL(7)MOV DX,DATAX+2 MOV AX,DATAX DIV DATAY 3.21 写出对存放在 DX 和 AX 中的双字长数求补的指令序列。答:NEG DX 也可为:NOT DX NEG AX NOT AX SBB DX,0 ADD AX,1 ADC DX,0 3.22 试编写一程序求出双字长数的绝对值。双字长数在 A 和 A+2 单元中,结果存放在 B 和欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您
39、提供优质的文档!B+2 单元中。答:程序段如下:MOV AX,A MOV DX,A+2 CMP DX,0 JNS ZHENSHU;不是负数则转走 NEG DX NEG AX SBB DX,0 ZHENSHU:MOV B,AX MOV B+2,DX INT 20H 3.23 假设(BX)=0E3H,变量 VALUE 中存放的内容为 79H,确定下列各条指令单独执行后的结果。(1)XOR BX,VALUE ;(BX)=9AH,CF、OF 都为 0,AF 无定义,SF=1,ZF=0,PF=1(2)AND BX,VALUE ;(BX)=61H,CF、OF 都为 0,AF 无定义,SF=0,ZF=0,P
40、F=0(3)OR BX,VALUE ;(BX)=0FBH,CF、OF 都为 0,AF 无定义,SF=1,ZF=0,PF=0(4)XOR BX,0FFH ;(BX)=1CH,CF、OF 都为 0,AF 无定义,SF=0,ZF=0,PF=0(5)AND BX,0 ;(BX)=00H,CF、OF 都为 0,AF 无定义,SF=0,ZF=1,PF=1(6)TEST BX,01H ;(BX)=0E3H,CF、OF 都为 0,AF 无定义,SF=1,ZF=0,PF=0 答:见注释。3.24 试写出执行下列指令序列后 BX 寄存器的内容。执行前(BX)=6D16H。MOV CL,7 SHR BX,CL 答:
41、(BX)=00DAH。3.25 试用移位指令把十进制数+53 和-49 分别乘以 2。它们应该用什么指令?得到的结果是什么?如果要除以 2 呢?答:MOV AL,53 SAL AL,1 ;(AL)=(+53*2)=6AH MOV AL,-49 SAL AL,1 ;(AL)=(-49*2)=9EH MOV AL,53 SAR AL,1 ;(AL)=(53/2)=1AH MOV AL,-49 SAR AL,1 ;(AL)=(-49/2)=0E7H 3.26 试分析下面的程序段完成什么功能?MOV CL,04 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文
42、档!SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 答:本程序段将(DX),(AX)的双字同时左移 4 位,即将此双字乘以 10H(16)。3.27 假定(DX)=0B9H,(CL)=3,(CF)=1,确定下列各条指令单独执行后 DX 中的值。(1)SHR DX,1 ;(DX)=05CH(2)SAR DX,CL ;(DX)=17H(3)SHL DX,CL ;(DX)=5C8H(4)SHL DL,1 ;(DX)=72H(5)ROR DX,CL ;(DX)=2017H(6)ROL DL,CL ;(DX)=0CDH(7)SAL DH,1 ;(DX)=
43、0B9H(8)RCL DX,CL ;(DX)=2CCH(4)RCR DL,1 ;(DX)=0DCH 答:见注释。3.28 下列程序段执行完后,BX 寄存器的内容是什么?MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL 答:(BX)=0C02DH。3.29 假设数据段定义如下:CONAME DB SPACE EXPLORERS INC.PRLINE DB 20 DUP()用串指令编写程序段分别完成以下功能:(1)从左到右把 CONAME 中的字符串传送到 PRLINE。(2)从右到左把 CONAME 中的字符串传送到 PRLINE。(3)把 CONAME 中的第 3
44、 和第 4 个字节装入 AX。(4)把 AX 寄存器的内容存入从 PRLINE+5 开始的字节中。(5)检查 CONAME 字符串中有无空格字符,如有则把第一个空格字符的地址传送给 BX寄存器。答:(1)MOV CX,20 CLD MOV SI,SEG CONAME MOV DS,SI MOV ES,SI LEA SI,CONAME LEA DI,PRLINE REP MOVSB(2)MOV CX,20 STD 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV SI,SEG CONAME MOV DS,SI MOV ES,SI LEA SI,
45、CONAME ADD SI,20-1 LEA DI,PRLINE ADD DI,20-1 REP MOVSB(3)MOV AX,WORD PTR CONAME+3-1(4)MOV WORD PTR PRLINE+5,AX(5)MOV AL,;空格的 ASCII 码送 AL 寄存器 CLD MOV DI,SEG CONAME MOV ES,DI LEA DI,CONAME REPNE SCASB JNE NEXT DEC DI MOV BX,DI NEXT:3.30 编写程序段,把字符串 STRING 中的&字符用空格符代替。STRING DB The date is FEB&03 答:程序段如
46、下:MOV CX,18 MOV AL,&CLD MOV DI,SEG STRING MOV ES,DI LEA DI,STRING REPNE SCASB JNE NEXT DEC DI MOV ES:BYTE PTR DI,;送空格符 NEXT:3.31 假设数据段中数据定义如下:STUDENT_NAME DB 30 DUP(?)STUDENT_ADDR DB 9 DUP(?)PRINT_LINE DB 132 DUP(?)分别编写下列程序段:(1)用空格符清除 PRINT_LINE 域。(2)在 STUDENT_ADDR 中查找第一个-。(3)在 STUDENT_ADDR 中查找最后一个-
47、。(4)如果 STUDENT_NAME 域中全是空格符时,填入*。(5)把 STUDENT_NAME 移到 PRINT_LINE 的前 30 个字节中,把 STUDENT_ ADDR欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!移到 PRINT_LINE 的后 9 个字节中。答:公共的程序段如下:MOV DI,DS MOV ES,DI(1)MOV CX,132 MOV AL.,;空格的 ASCII 码送 AL 寄存器 CLD LEA DI,PRINT_LINE REP STOSB(2)MOV CX,9 MOV AL.,-CLD LEA DI,ST
48、UDENT_ ADDR REPNE SCASB JNE NO_DASH DEC DI NO_DASH:(3)MOV CX,9 MOV AL.,-STD LEA DI,STUDENT_ ADDR ADD DI,9-1 REPNE SCASB JNE NO_DASH INC DI NO_DASH:(4)MOV CX,30 MOV AL,;空格的 ASCII 码送 AL 寄存器 CLD LEA DI,STUDENT_NAME REPE SCASB JNE NEXT MOV CX,30 MOV AL,*;“*”的 ASCII 码送 AL 寄存器 LEA DI,STUDENT_NAME REP STOS
49、B NEXT:(5)MOV CX,30 CLD LEA SI,STUDENT_NAME LEA DI,PRINT_LINE REP MOVSB MOV CX,9 STD 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!LEA SI,STUDENT_ADDR+9-1 LEA DI,PRINT_LINE+132-1 REP MOVSB 3.32 编写一程序段:比较两个 5 字节的字符串 OLDS 和 NEWS,如果 OLDS 字符串不同于NEWS 字符串则执行 NEW_LESS;否则顺序执行程序。答:程序段如下:MOV CX,5 CLD MOV DI,
50、SEG OLDS MOV DS,DI MOV ES,DI LEA SI,OLDS LEA DI,NEWS REPE CMPSB JNE NEW_LESS NEW_LESS:3.33 假定 AX 和 BX 中的内容为带符号数,CX 和 DX 中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:(1)若 DX 的内容超过 CX 的内容,则转去执行 EXCEED。(2)若 BX 的内容大于 AX 的内容,则转去执行 EXCEED。(3)若 CX 的内容等于 0,则转去执行 ZERO。(4)BX 与 AX 的内容相比较是否产生溢出?若溢出则转 OVERFLOW。(5)若 BX 的内容小于等于