知ing

微机原理及应用(第二版)

陈继红 徐晨 王春明 徐慧 编著 / 高等教育出版社

✎๓❦╰★佪眸┅笑★ 上传

查看本书

第3章 8086/8088 指令系统和寻址方式 习题答案(部分)


1.1 总结计算机中十进制、二进制、八进制及十六进制数的书写形式。123D0AFH

77Q1001110B 分别表示什么计数制的数?

答案:123D0AFH77Q1001110B 分别表示十进制、十六进制、八进制、二进制。

1.2  字长为8 位、16 位二进制数的原码、补码表示的最大数和最小数分别是什么?

答案:8 位原码表示的最大数:(27-1)、8 位补码表示的最大数:(27-1)、8 位原码表示的最小数:-27-1)、8 位补码表示的最小数-27

16 位原码表示的最大数:(215-1)、16 位补码表示的最大数:(215-1)、16 位原码表示的最小数:-215-1)、16 位补码表示的最小数-215

1.3 把下列十进制数分别转换为二进制数和十六进制数。

(1)125 (2)255 (3)72 (4)5090

答案:(1) 125 二进制数:0111 1101B;十六进制数:7DH

(2)255 二进制数:1111 1111B;十六进制数:0FFH

(3)72 二进制数:0100 1000B;十六进制数:48H

(4)5090 二进制数:0001 0011 1110 0010B;十六进制数:13E2H

1.4 把下列无符号二进制数分别转换为十进制数和十六进制数。

(1)1111 0000 (2)1000 0000 (3)1111 1111 (4)0101 0101

答案:(1)1111 0000 十进制数:240D;十六进制数:0F0H

(2)1000 0000 十进制数:128D;十六进制数:80H

(3)1111 1111 十进制数:255D;十六进制数:0FFH

(4)0101 0101 十进制数:85D;十六进制数:55H

1.5 把下列无符号十六进制数分别转换为十进制数和二进制数。

(1)FF (2)ABCD (3)123 (4)FFFF

答案:(1)FF 十进制数:255D;二进制数;1111 1111B

(2)ABCD 十进制数:43981D;二进制数;1010 1011 1100 1101B

(3)123 十进制数:291D;二进制数;0001 0010 0011B

(4)FFFF 十进制数:65535D;二进制数;1111 1111 1111 1111B

1.6 分别用8 位二进制数和16 位二进制数写出下列十进制数的原码和补码。

(1)16 (2)-16 (3)+0 (4)-0 (5)127 (6)-128 (7)121 (8)-9

答案:

(1)16 8 位二进制数原码:0001 0000 补码:0001 000016 位二进制数原码:0000 0000

0001 0000 补码: 0000 0000 0001 0000

(2)-16 8 位二进制数原码:1001 0000 补码:1111 000016 位二进制数原码:1000 0000

0001 0000 补码:1111 1111 1111 0000

(3)+0 8 位二进制数原码:0000 0000 补码:0000 000016 位二进制数原码:0000 0000

0000 0000 补码:0000 0000 0000 0000

(4)-0 8 位二进制数原码:1000 0000 补码:0000 000016 位二进制数原码:1000 0000

0000 0000 补码: 0000 0000 0000 0000

(5)127 8 位二进制数原码:0111 1111 补码: 0111 111116 位二进制数原码:0000 0000

0111 1111 补码: 0000 0000 0111 1111

(6)-128 8 位二进制数原码: 补码: 1000 0000 16 位二进制数原码:1000 0000

1000 0000 补码:1111 1111 1000 0000

(7)121 8 位二进制数原码:0111 1001 补码: 0111 100116 位二进制数原码:0000 0000

0111 1001 补码: 0000 0000 0111 1001

(8)-9 8 位二进制数原码:1000 1001 补码:1111 011116 位二进制数原码:1000 0000

1000 1001 补码:1111 1111 1111 0111

1.7 试实现下列转换。

(1)[]10111110B,求[] (2)[]11110011B,求[-]

(3)[]10111110B,求[] (4)[]10111110B,求[]

答案:(1) 1100 0010 (2) 0000 1101 (3) 1100 0010 (4) 1011 1101

1.8 假设两个二进制数A01101010B10001100,试比较它们的大小。

(1)AB 两数均为带符号的补码数 (2)AB 两数均为无符号数

答案:(1)AB 两数均为带符号的补码数:AB

(2)AB 两数均为无符号数:AB

1.9 下列各数均为十进制数,请用8 位二进制数补码计算下列各题,用十六进制数表示

其运算结果,并判断是否溢出,验证教材中所给的判断依据。

(1)90+71 (2)90-71 (3)-90-71 (4)-90+71 (5)-90-(-71)

答案:(1)90+71=161127 溢出

[90]+[71]=0101 1010+0100 0111=1010 0001=0A1H=[-91]

(2)90-71=19127 无溢出

[90]+[-71]=0101 1010+1011 1001=0001 0011=13H=[19]

(3)-90-71=-161-128 溢出

[-90]+[-71]=1010 0110+1011 1001=0101 1111=5FH=[95]

(4)-90+71=-19-128 无溢出

[-90]+[71]=1010 0110+0100 0111=1110 1101=0EDH=[-19]

(5)-90-(-71)=-19-128 无溢出

[-90]+[71]=1010 0110+0100 0111=1110 1101=0EDH=[-19]

3.10 完成下列8 位二进制数的逻辑运算。

(1)1100110010101010 (2)1100110010101010

(3)1100110010101010 (4)1010110010101100

(5)1010110010101100 (6)1010110010101100

(7)10101100

答案:(1)1100110010101010=1000 1000 (2)1100110010101010=1110 1110

(3)1100110010101010=0110 0110 (4)1010110010101100=1010 1100

(5)1010110010101100=0000 0000 (6)1010110010101100=1010 1100

(7)10101100=0101 0011

1.11 以下均为2 位十六进制数,试说明当把它们分别看作无符号数或字符的ASCII

值,它们所表示的十进制数和字符是什么?

(1)30H (2)39H (3)42H (4)62H (5)20H (6)7H

答案:(1)30H 所表示的十进制数是:48D;字符是:0

(2)39H 所表示的十进制数是:57D;字符是:9

(3)42H 所表示的十进制数是:66D;字符是:B

(4)62H 所表示的十进制数是:98D;字符是:b

(5)20H 所表示的十进制数是:32D;字符是:sp 空格。

(6)7H 所表示的十进制数是:7D;字符是:BEL 报警。

1.12 把以下十进制数分别以压缩BCD 码、非压缩BCD 码、ASCII 码串表示。

(1)2 (2)78

答案:(1)2 压缩BCD :0010、非压缩BCD :0000 0010ASCII :011 0010

(2)78 压缩BCD :0111 1000、非压缩BCD :0000 0111 0000 1000ASCII :0110111

011100

1.13 设浮点数格式如下图所示:

阶码、尾数均以补码表示,基数为2,求:+25.6 -361.25 的规格化浮点数。

答案:1) +25.6D=11001.1001100110B=0.110011001100110×25

+5=0101B,补码:0101,尾数:[ 0.110011001100110]=0.110011001100110

规格化浮点数:0 0000101 0 110011001100110

2) -361.25D=-101101001.01B=29×(-0.101101001010000)

+9=1001,补码:1001,尾数:[ -0.101101001010000]=1.010010110110000

规格化浮点数:0 0001001 1 010010110110000

1.14 设某计算机用12 位表示一个浮点数,该浮点数从高位到低位依次为:阶符1 位、

阶码3 (原码表示)、数符1 位、尾数7 (补码表示),则0 100 1 0110011 的真值是多少?

答案:-9.625

 3.1 8086 汇编语言指令的寻址方式有哪几类?哪种寻址方式的指令执行速度最快?

解:寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。

其中,寄存器操作数寻址方式的指令执行速度最快。

3.2 在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用

某个段寄存器指出段地址,指令中应该如何表示?

解:默认的数据访问,操作数在DS 段;堆栈操作在SS 段;串操作源操作数(SI)DS

,目的操作数(DI)ES 段;用BP 作为指针在SS 段。如果要显式地指定段地址,则在操作

数中规定段寄存器。例如:

MOV AX ES(BX+10H)

3.3  8086 系统中,设DS=1000HES=2000HSS=1200HBX=0300HSI=0200H

BP=0100HVAR 的偏移量为0600H,请指出下列指令的目标操作数的寻址方式,若目

标操作数为存储器操作数,计算它们的物理地址。

1MOV BX12 ;目标操作数为寄存器寻址

2MOV [BX]12 ;目标操作数为寄存器间址 PA=10300H

3MOV ES[SI]AX ;目标操作数为寄存器间址 PA=20200H

4MOV VAR8 ;目标操作数为存储器直接寻址 PA=10600H

5MOV [BX][SI]AX ;目标操作数为基址加变址寻址 PA=10500H

6MOV 6[BP][SI]AL ;目标操作数为相对的基址加变址寻址 PA=12306H

7MOV [1000H]DX ;目标操作数为存储器直接寻址 PA=11000H

8MOV 6[BX]CX ;目标操作数为寄存器相对寻址 PA=10306H

9MOV VAR+5AX ;目标操作数为存储器直接寻址 PA=10605H

3.4下面这些指令中哪些是正确的?那些是错误的?如果是错误的,请说明原因。

1XCHG CS,AX ;错,CS 不能参与交换

2MOV [BX],[1000] ;错,存储器之不能交换

3XCHG BX,IP ;错,IP 不能参与交换

4PUSH CS ;错,CS 不能为PUSH 的操作数

5POP CS ;错,不能将数据弹到CS

6IN BX,DX ;输入/输出只能通过AL/AX

7MOV BYTE[BX],1000 1000 大于255,不能装入字节单元

8MOV CS,[1000] CS 不能作为目标寄存器

9MOV BX,OFFSET VAR[SI] OFFSET 只能取变量的偏移地址

10MOV AX,[SI][DI] SIDI 不能成为基址加变址

11MOV COUNT[BX][SI],ESAX AX 是寄存器,不能加段前缀

3.5 试述以下指令的区别:

 MOV AX,3000H  MOV AX,[3000H]

答案: MOV AX,3000H 指令源操作数的寻址方式为立即寻址方式,指令执行结果为:

(AX)=3000H MOV AX,[3000H]指令源操作数的寻址方式为直接寻址方式,指令执行结

果为:DS:3000H)_AX

 MOV AX,MEM  MOV AX,OFFSET MEM

答案: MOV AX,MEM 指令源操作数的寻址方式为直接寻址方式,指令执行结果为:

DS:MEM)_AX MOV AX,OFFSET MEM 指令的执行结果是把MEM 的偏移量送AX

 MOV AX,MEM  LEA AX,MEM

答案: MOV AX,MEM 指令的执行结果是LDS:MEM)_AX LEA AXMEM

的执行结果是把MEM 的偏移量送AX

(4) JMP SHORT L1  JMP NEAR PTR L1

答案:JMP SHORT L1 为段内无条件短程转移,跳转的范围不得超过带符号的8 位二进

制数表示的字节范围;JMP NEAR PTR L1 为段内无条件近程转移,跳转的范围不得超过带

符号的16 位二进制数表示的字节范围。

(5) CMP DX,CX  SUB DX ,CX

答案:CMP DX,CX 是比较,也是利用减法比较,但是dx 中的值不变,标志寄存器改

变。SUB DX ,CX 是做减法运算,dx 中为减后的值,标志寄存器改变

(6)MOV [BP][SI],CL  MOV DS:[ BP][SI],CL

答案:BP 默认的段基址是SS,物理地址PA=SS+BP+SI;第二个重定义为DS 段基址,

物理地址PA=DS+BP+SI

3.6 DS=2100HSS=5200HBX=1400HBP=6200H,说明下面两条指令所进行的

具体操作:

MOV BYTE PTR [BP], 20H

MOV WORD PTR [BX], 20H

:前一条指令是把立即数20H,传送至堆栈段(BP 的默认段)偏移量由BP 规定的字节单

,地址为:52000H+6200H=58200H

第二条指令是把立即数20H,传送至数据段(BX 的默认段)偏移量由BX 规定的字单元,

址为:21000H+1400H = 22400H

3.7 设当前 SS=2010HSP=FE00HBX=3457H,计算当前栈顶的地址为多少?当执

 PUSH BX 指令后,栈顶地址和栈顶2 个字节的内容分别是什么?

答案:当前栈顶的地址=2FF00H

当执行PUSH BX 指令后,栈顶地址=2FEFEH

(2FEFEH)=57H

(2FEFFH)=34H

3.8 DX=78C5HCL=5CF=1,确定下列各条指令执行后,DX CF 中的值。

1 SHR DX1 DX=3C62H CF=1

2 SAR DXCL DX=03C6H CF=0

3 SHL DXCL DX=18A0H CF=1

4 ROR DXCL DX=2BC6H CF=0

5 RCL DXCL DX=18B7H CF=1

6 RCR DH1 DX=BCC5H CF=0

3.9 AX=0A69HVALUE 字变量中存放的内容为1927H,写出下列各条指令执行

后寄存器和CFZFOFSFPF 的值。

AX CF ZF OF SF PF

1XOR AXVALUE  134EH 0 0 0 0 1

2AND AXVALUE  0821H 0 0 0 0 1

3SUB AXVALUE  F142H 1 0 0 1 1

4CMP AXVALUE  0A69H 1 0 0 1 1

5NOT AX  F596H X X X X X

6TEST AXVALUE  0A69H 0 0 0 0 1

3.10 AX BX 中是符号数,CX DX 是无符号数,请分别为下列各项确定CMP

和条件转移指令。

CX 值超过DX 转移。

AX 未超过BX 转移。

DX 0 转移。

CX 值等于小于DX 转移。

答案:

1 CMP CXDX

JA NEXT

2 CMP AXBX

JLE NEXT

3 CMP DX0

JZ NEXT

4 CMP CXDX

JBE NEXT

3.11 阅读分析下列指令序列:

ADD AXBX

JNO L1

JNC L2

SUB AXBX

JNC L3

JNO L4

JMP L5

AX BX 的初值分别为以下5 种情况,则执行该指令序列后,程序将分别转向何处

L1L5 中的一个)。

AX=13C6H BX=80DCH

AX=0B568HBX=54B7H

AX=42C8H BX=608DH

AX=0D023HBX=9FD0H

AX=9FD0H BX=0D023H

答案:(1)L1:不溢出,转移到L1 处;

(2)L1:不溢出,转移到L1 处;

(3)L2:溢出,不转移到L1 处,进位CF=0,转移到L2 处;

(4)L3:溢出,不转移到L1 处,进位CF=1,不转移到L2 处,减法借位CF=0,转移

L3 处;

(5)L5:溢出,不转移到L1 处,进位CF=1,不转移到L2 处,减法借位CF=1,不转

移到L3 处,不溢出OF=0,转移到L4 处;

3.12 用普通运算指令执行BCD 码运算时,为什么要进行十进制调整?具体地讲,在进行

BCD 码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?

解:因为8086 指令把操作数作为二进制数进行二进制运算,要得到正确的BCD 结果,

要进行调整。在加、减、乘法指令之后加上BCD 调整指令,而在除法指令之前先用BCD

整指令再用除法指令。

3.13 在编写乘除法程序时,为什么常用移位指令来代替乘除法指令?编写一段程序,实

现将BX 中的数除以10,结果仍然放在BX 中。

解:用移位指令时,左移l 位相当于将操作数乘2,右移1 位相当于将操作数除2。用

移位指令实现一些简单的乘除法程序,比用乘法指令和除法指令进行乘、除运算要快得多。

用除法指令实现:

MOV CL 0AH

MOV AX,BX

IDIV CL

MOV BX,AX

3.14 串操作指令使用时特别要注意和SI,DI 这两个寄存器及方向标志DF 密切相关。请

具体就指令MOVSB/MOVSWCMPSB/CMPSWSCASB/SCASWLODSB/LODSW

STOSB/STOSW 列表说明和SIDI DF 的关系。

解答:

SI DI DF

MOVSB/MOVSW 指出源地

指出目的地

不带 REP 重复前缀时,DF=0,每传送一次,SI

DI 1 或加2DF=1SIDI 则减1 或减2

CMPSB/CMPSW

存放源字

符串首地

存放目的字

符串首地址

DF=0,每次比较后,SIDI 1 或加2CX

1DF=1SIDI 1 或减2CX 1

SCASB/SCASW  指出字符串

首址偏移量 

LODSB/LODSW 作为地址

指针

存放处理结

DF=1 时,地址作增量修改,DF=0 时,地址作减

量修改

STOSB/STOSW  存放目的地

 

3.15 用串操作指令设计实现以下功能的程序段:首先将100H 个数从2170H 处搬到

1000H 处,然后,从中检索相等于VAL 中字符的单元,并将此单元值换成空格符。

解答:

START:MOV AX, DS

MOV ES, AX

MOV SI, 2170H

MOV DI, 1000H

MOV CX, 100H

CLD

REP MOVSB

ANOTHER:MOV DI, 1000H

MOV AL, VAL

MOV CX, 100H

CLD

AGE: SCASB

JZ FIN

DEC CX

JNZ AGE

JMP OVER

FIN: MOV BYTE PTR[DI-1],20H

CMP CX,0

JNZ AGE

OVER: RET

3.16  求双字长数DXAX 的相反数。

:

NEG DX

NEG AX

SBB DX,0

3.17 试对数据段偏移地址为101H 单元中的单字节数求补后存入102H,最高位不变,

7 位取反存入103H,高4 位置1,低4 位不变,存入104H

:

MOV AX,[0101H]

MOV BX,AX

MOV CX,AX

NOT AX

MOV [0102H],AX

XOR BX,7FH

MOV [0103H],BX

AND CX,0F0H

MOV [0104H]

3.19 试编写一个程序,比较两个同长字符串STRING1 STRING2 所含字符是否相同,

若相同MATCH 单元赋值1,若不相同MATCH 单元赋值0

答案:

程序段为:

;数据定义

STRING1 DB ‘ABCDEFGHIJK ;串1,作为源串

STRING2 DB ‘ABCDFGKJ ;串2,作为目标串

MATCH DB ? ;定义MATCH 单元

;功能代码

MOV AX,SEG STRING1

MOV DS,AX ;源串段地址送DS

MOV AX,SEG STRING2

MOV ES,AX ;目标串段地址送ES

LEA SI, STRING1 ;源串偏移地址送SI

LEA DI, STRING2 ;目标串偏移地址送DI

MOV CX, STRING1- STRING2 ;重复次数送CX

CLD ;地址增

REPE CMPSB ;相等继续比较,不相等退出

JZ EQUAL ;退出时,若ZF=1,表示两串相等

MOV MATCH,0 ;不相同,MATCH 单元赋值0

JMP OVER

EQUAL:MOV MATCH,1 ;相同MATCH 单元赋值1

OVER:HLT

3.20 编写代码,计算a+10b+100c+20d,其中abcd 均为单字节无符号数,结果为16

位,存入SUM 开始的两单元中。

data segment

ma db 12

mb db 21

mc db 86

md db 150

SUM dw 0

data ends

code segment

assume ds:data,cs:code

start:mov ax,data

mov ds,ax

mov dh,0

mov dl,ma

mov ah,0

mov al,10

mul mb

add dx,ax

mov ah,0

mov al,100

mul mc

add dx,ax

mov ah,0

mov al,20

mul md

add dx,ax

mov SUM,dx

code ends

end start

3.21 试编写一段程序把LIST LIST+100 中的内容传到BLK BLK+100 中去。

答案:

程序段为:

MOV AX,SEG LIST

MOV DS,AX ;源串段地址送DS

MOV AX,SEG BLK

MOV ES,AX ;目标串段地址送ES

LEA SI, LIST ;源串偏移地址送SI

LEA DI, BLK ;目标串偏移地址送DI

MOV CX, 101 ;重复次数送CX

CLD ;地址增

REP MOVSB

3.23 CS:0100H 单元有一条两字节的JMP SHORT LAB 指令,若其中的位移量为:

56H 80H 78H (4)0E0H

试写出转向目标的物理地址是多少?

答:因为CS:0100H 处存放两字节指令JMP SHORT LAB,所以当执行该指令时

(IP)=0102H

(1) 转向目标的物理地址是:(CS)*10H+(IP)+0056H=CS:0058H

(2) 转向目标的物理地址是:(CS)*10H+(IP)+0FF80H=CS:0082H80H 对应的负数为-80H

(向上转移,负位移量)

(3) 转向目标的物理地址是:(CS)*10H+(IP)+0078H=CS:0180H

(4) 转向目标的物理地址是:(CS)*10H+(IP)+0FFE0H=CS:00E2HE2H 对应的负数为

-1EH(向上转移,负位移量)

3.24 不使用除法指令,将堆栈段中10H11H 单元中的双字节带符号数除以8,结果存

12H13H 单元(注:多字节数存放格式均为低位在前,高位在后)。

POP AX

POP BX

TEST AX,8000H ;测试被除数符号位

MOV CL,3

JZ ZS ;若为正数,跳转到ZS

SAR AX,CL

JMP OVER

ZS: SHR AX,CL

OVER:PUSH AX

3.26 数据段中3030H 起有两个16 位的带符号数,试求它们的积,存入3034H-3036H

元中。

答案:

MOV AX,[3030H]

MOV BX,[3032H]

IMUL BX

MOV [3034H],AX

MOV [3036H]


查看更多