IBM-PC汇编语言程序设计课后习题答案(第二版 - 沈美明) 联系客服

发布时间 : 星期一 文章IBM-PC汇编语言程序设计课后习题答案(第二版 - 沈美明)更新完毕开始阅读

答:MOV 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 ┇

MOV BX, OFFSET TABLE 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指令。试画出堆栈区和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;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的内容是什么?

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 AX, 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 变量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 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单元中。 答:程序段如下: