汇编语言程序设计习题答案(2)

2019-08-03 11:44

(2) 和为A5C1H;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,OF=0 3.17 写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。

(1) Z←W+(Z-X) (2) Z←W-(X+6)-(R+9) (3) Z←(W*X)/(Y+6),R←余数 (4) Z←((W-X)/5*Y)*2 答:(1) MOV 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,标志位不变 MOV 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寄存器及CF、SF、ZF和OF的内容是什么?

6

MOV AX, 0 DEC AX ADD AX, 7FFFH ADD AX, 2 NOT AX SUB AX, 0FFFFH ADD AX, 8000H SUB AX, 1 AND AX, 58D1H SAL AX, 1 SAR AX, 1 NEG AX ROR AX, 1 答:见注释。

;(AX)=0, ;(AX)=0FFFFH, ;(AX)=7FFEH, ;(AX)=8000H, ;(AX)=7FFFH, ;(AX)=8000H, ;(AX)=0, ;(AX)=0FFFFH, ;(AX)=58D1H, ;(AX)=0B1A2H, ;(AX)=0D8D1H, ;(AX)= 272FH, ;(AX)= 9397H, 标志位不变

CF不变,SF=1,ZF=0,OF=0 CF=1,SF=0,ZF=0,OF=0 CF=0,SF=1,ZF=0,OF=1 标志位不变

CF=1,SF=1,ZF=0,OF=1 CF=1,SF=0,ZF=1,OF=1 CF=1,SF=1,ZF=0,OF=0 CF=0,SF=0,ZF=0,OF=0 CF=0,SF=1,ZF=0,OF=1 CF=0,SF=1,ZF=0,OF=0 CF=1,SF=0,ZF=0,OF=0 CF=1,SF和ZF不变,OF=1

3.20 变量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)。

(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

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

7

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

MOV 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和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,PF=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

8

SHR BX, CL

答:(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 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)=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和第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

9

REP MOVSB (2) MOV CX, 20

STD MOV SI, SEG CONAME MOV DS, SI MOV ES, SI LEA SI, 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’ 答:程序段如下:

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中查找最后一个‘-’。

(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

10


汇编语言程序设计习题答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:党的基本理论和基本知识600题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: