微机原理及应用(陈继红、徐晨)课后习题答案 下载本文

微机原理及应用(陈继红、徐晨)课后习题答案

第三章

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

3.1 总结计算机中十进制、二进制、八进制及十六进制数的书写形式。 123D、0AFH、

77Q、1001110B分别表示什么计数制的数?

答案:123D、0AFH、77Q、1001110B分别表示十进制、十六进制、八进制、二进制。

3.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。

3.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。

3.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。

3.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。 3.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 0000;16位二进制数原码 :0000 0000

0001 0000 补码: 0000 0000 0001 0000。 (2)-16 8位二进制数原码 :1001 0000 补码

:1111 0000;16位二进制数原码 :1000 0000

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

:0000 0000 补码:0000 0000;16位二进制数原码 :0000 0000

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

:1000 0000 补码:0000 0000;16位二进制数原码 :1000 0000

0000 0000 补码: 0000 0000 0000 0000。 (5)127 8位二进制数原码

:0111 1111 补码: 0111 1111;16位二进制数原码 :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 1001;16位二进制数原码 :0000 0000

0111 1001 补码: 0000 0000 0111 1001。 (8)-9 8位二进制数原码

:1000 1001 补码:1111 0111;16位二进制数原码 :1000 0000

1000 1001 补码:1111 1111 1111 0111。 3.7 试实现下列转换。

(1)[X]原=10111110B,求[X]补 (2)[X]补=11110011B,求[-X]补 (3)[X]补=10111110B,求[X]原 (4)[X]补=10111110B,求[X]反 1

微机原理及应用(陈继红、徐晨)课后习题答案

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

3.8 假设两个二进制数

A=01101010,B=10001100,试比较它们的大小。 (1)A、B两数均为带符号的补码数 (2)A、B两数均为无符号数

答案:(1)A、B两数均为带符号的补码数: A>B

(2)A、B两数均为无符号数 :A<B

3.9 下列各数均为十进制数,请用

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

其运算结果,并判断是否溢出,验证教材中所给的判断依据。 (1)90+71 (2)90-71 (3)-90-71 (4)-90+71 (5)-90-(-71) 答案:(1)90+71=161>127 溢出

[90]补+[71]补=0101 1010+0100 0111=1010 0001=0A1H=[-91]补 (2)90-71=19<127 无溢出

[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)11001100∧10101010 (2)11001100∨10101010 (3)11001100⊕10101010 (4)10101100∧10101100 (5)10101100⊕10101100 (6)10101100∨10101100 (7)10101100

答案:(1)11001100∧10101010=1000 1000 (2)11001100∨10101010=1110 1110 (3)11001100⊕10101010=0110 0110 (4)10101100∧10101100=1010 1100 (5)10101100⊕10101100=0000 0000 (6)10101100∨10101100=1010 1100 (7)10101100=0101 0011 3.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报警。

3.12 把以下十进制数分别以压缩 BCD码、非压缩

BCD码、ASCII码串表示。 (1)2 (2)78

答案:(1)2压缩

BCD码:0010、非压缩

BCD码:0000 0010、ASCII码:011 0010 (2)78压缩

BCD码:0111 1000、非压缩

BCD码:0000 0111 0000 1000、ASCII码:0110111 011100

3.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

微机原理及应用(陈继红、徐晨)课后习题答案

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

+9=1001,补码:1001,尾数:[ -0.101101001010000]补=1.010010110110000 规格化浮点数

:0 0001001 1 010010110110000

3.14 设某计算机用

12位表示一个浮点数,该浮点数从高位到低位依次为:阶符 1位、 阶码

3位(原码表示)、数符 1位、尾数 7位(补码表示 ),则

0 100 1 0110011的真值是多少? 答案:-9.625

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

解:寻址方式分为

:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。 其中,寄存器操作数寻址方式的指令执行速度最快。

3.16 在直接寻址方式中

,一般只指出操作数的偏移地址 ,那么,段地址如何确定?如果要用 某个段寄存器指出段地址 ,指令中应该如何表示 ?

解:默认的数据访问 ,操作数在

DS段;堆栈操作在 SS段;串操作源操作数 (SI)在 DS

段,目的操作数 (DI)在 ES段;用

BP作为指针在

SS段。如果要显式地指定段地址,则在操作 数中规定段寄存器。例如:

MOV AX, ES:(BX+10H)

3.17 8086系统中,设

DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H, BP=0100H,VAR的偏移量为

0600H,请指出下列指令的目标操作数的寻址方式,若目 标操作数为存储器操作数,计算它们的物理地址。

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

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

(4)MOV VAR,8 ;目标操作数为存储器直接寻址 PA=10600H

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

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

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

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

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

3.18 下面这些指令中哪些是正确的?那些是错误的?如果是错误的,请说明原因。 (1)XCHG CS,AX ;错,CS不能参与交换

(2)MOV [BX],[1000] ;错,存储器之不能交换 (3)XCHG BX,IP;错, IP不能参与交换

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

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

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

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

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

(9)MOV BX,OFFSET VAR[SI] ;OFFSET只能取变量的偏移地址 (10)MOV AX,[SI][DI] ;SI、DI不能成为基址加变址

(11)MOV COUNT[BX][SI],ES:AX ;AX是寄存器,不能加段前缀 3.19 试述以下指令的区别: ⑴ 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 AX,MEM 的执行结果是把 MEM的偏移量送 AX。

(4) JMP SHORT L1 与 JMP NEAR PTR L1 3

微机原理及应用(陈继红、徐晨)课后习题答案

答案: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.20 设

DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的 具体操作:

MOV BYTE PTR [BP], 20H MOV WORD PTR [BX], 20H 解:前一条指令是把立即数 20H,传送至堆栈段 (BP的默认段 )偏移量由

BP规定的字节单

元,地址为:52000H+6200H=58200H 第二条指令是把立即数 20H,传送至数据段 (BX的默认段

)偏移量由

BX规定的字单元 ,地

址为:21000H+1400H = 22400H。

3.21 设当前

SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执 行

PUSH BX 指令后,栈顶地址和栈顶 2个字节的内容分别是什么? 答案:当前栈顶的地址 =2FF00H

当执行

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

(2FEFEH)=57H (2FEFFH)=34H

3.22 设

DX=78C5H,CL=5,CF=1,确定下列各条指令执行后, DX和

CF中的值。 (1)

SHR DX,1;DX=3C62H CF=1 (2)

SAR DX,CL;DX=03C6H CF=0 (3)

SHL DX,CL;DX=18A0H CF=1 (4)

ROR DX,CL;DX=2BC6H CF=0 (5)

RCL DX,CL;DX=18B7H CF=1 (6)

RCR DH,1 ;DX=BCC5H CF=0 3.23 设

AX=0A69H,VALUE字变量中存放的内容为 1927H,写出下列各条指令执行 后寄存器和

CF、ZF、OF、SF、PF的值。

AX CF ZF OF SF PF(1)XOR AX,VALUE ; 134EH 0 0 0 0 1

(2)AND AX,VALUE ;

0821H 0 0 0 0 1

(3)SUB AX,VALUE ; F142H 1 0 0 1 1

(4)CMP AX,VALUE ; 0A69H 1 0 0 1 1

(5)NOT AX ; F596H X X X X X

(6)TEST AX,VALUE ; 0A69H 0 0 0 0 1

3.24 设 AX和

BX中是符号数, CX和

DX是无符号数,请分别为下列各项确定 CMP

和条件转移指令。 CX值超过 DX转移。 AX未超过 BX转移。 DX为 0转移。

CX值等于小于 DX转移。 答案:

(1)

CMP CX,DX JA NEXT (2)

CMP AX,BX JLE NEXT (3)

CMP DX,0 JZ NEXT 4

微机原理及应用(陈继红、徐晨)课后习题答案

(4)

CMP CX,DX JBE NEXT

3.25 阅读分析下列指令序列: ADD AX,BX JNO L1 JNC L2

SUB AX,BX JNC L3 JNO L4 JMP L5

若 AX和

BX的初值分别为以下

5种情况,则执行该指令序列后,程序将分别转向何处 (L1~L5中的一个)。

AX=13C6H, BX=80DCH

AX=0B568H,BX=54B7H

AX=42C8H, BX=608DH

AX=0D023H,BX=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.26 用普通运算指令执行 BCD码运算时

,为什么要进行十进制调整 ?具体地讲,在进行

BCD码的加、减、乘、除运算时

,程序段的什么位置必须加上十进制调整指令 ?

解:因为

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

要进行调整。在加、减、乘法指令之后加上 BCD调整指令

,而在除法指令之前先用 BCD调

整指令再用除法指令。

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

BX中的数除以

10,结果仍然放在 BX中。

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

1位相当于将操作数除 2。用

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

MOV CL 0AH

MOV AX,BX

IDIV CL

MOV BX,AX

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

MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、 STOSB/STOSW列表说明和 SI、DI及 DF的关系。 解答:

SI DI DF

MOVSB/MOVSW指出源地 址

指出目的地 址 不带

REP重复前缀时, DF=0,每传送一次, SI、 DI加 1或加

2,DF=1,SI、DI则减 1或减 2

CMPSB/CMPSW 存放源字 符串首地 址

存放目的字 符串首地址

DF=0,每次比较后, SI、DI加 1或加 2,CX减

1,DF=1,SI、DI减 1或减 2,CX减 1

SCASB/SCASW 无指出字符串 首址偏移量 无

LODSB/LODSW作为地址 指针

存放处理结 果

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

微机原理及应用(陈继红、徐晨)课后习题答案

STOSB/STOSW 无存放目的地 址 无

3.29 用串操作指令设计实现以下功能的程序段:首先将 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.30求双字长数 DX∶AX的相反数。 答: NEG DX NEG AX SBB DX,0

3.31试对数据段偏移地址为

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.32 试编写一个程序,比较两个同长字符串 STRING1和

STRING2所含字符是否相同, 若相同

MATCH单元赋值 1,若不相同 MATCH单元赋值 0。 答案: 6

微机原理及应用(陈继红、徐晨)课后习题答案

程序段为: ;数据定义

STRING1 DB ‘ABCDEFGHIJK

STRING2 DB ‘ABCDFGKJMATCH DB ? ;功能代码

MOV AX,SEG STRING1 MOV DS,AX

MOV AX,SEG STRING2 MOV ES,AX LEA SI, STRING1 LEA DI, STRING2

MOV CX, STRING1- STRING2 CLD

REPE CMPSB JZ EQUAL

MOV MATCH,0 JMP OVER

EQUAL:MOV MATCH,1 OVER:HLT

;串

1,作为源串 ;串

2,作为目标串 ;定义

MATCH单元

;源串段地址送 DS

;目标串段地址送 ES

;源串偏移地址送 SI

;目标串偏移地址送 DI

;重复次数送 CX

;地址增

;相等继续比较,不相等退出 ;退出时,若

ZF=1,表示两串相等 ;不相同,

MATCH单元赋值 0

;相同

MATCH单元赋值 1

3.34编写代码 ,计算

a+10b+100c+20d,其中

a、b、c、d均为单字节无符号数,结果为 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 7

微机原理及应用(陈继红、徐晨)课后习题答案

mov al,20 mul md add dx,ax mov SUM,dx

code ends end start

3.35试编写一段程序把 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.36设

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:0082H;80H对应的负数为 -80H(向上转移,负位移量) (3)转向目标的物理地址是: (CS)*10H+(IP)+0078H=CS:0180H

(4)转向目标的物理地址是:

(CS)*10H+(IP)+0FFE0H=CS:00E2H;E2H对应的负数为 -1EH(向上转移,负位移量)

3.37不使用除法指令,将堆栈段中

10H、11H单元中的双字节带符号数除以8,结果存 入

12H、13H单元(注:多字节数存放格式均为低位在前,高位在后)。 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.38数据段中 3030H起有两个

16位的带符号数,试求它们的积,存入 3034H-3036H单 元中。 答案: 8

微机原理及应用(陈继红、徐晨)课后习题答案

MOV AX,[3030H] MOV BX,[3032H] IMUL BX

MOV [3034H],AX MOV [3036H]

3.39考虑以下调用序列: (1)MAIN调用 NEAR的

SUBA过程(返回的偏移地址为 150BH);

(2)SUBA调用 NEAR的

SUBB过程(返回的偏移地址为 1A70H);

(3)SUBB调用 FAR的

SUBC过程(返回的偏移地址为 1B50H,段地址为 1000H); (4)从 SUBC返回 SUBB; (5)从 SUBB返回 SUBA; (6)从 SUBA返回 MAIN。

请画出每次调用或返回时,堆栈内容和堆栈指针变化情况。 答: 150BH *****

1A70H 150BH *****

1B50H 1000H 1A70H 150BH *****

(SP)

(SP)

(SP)

(1) (2) (3) 1A70H 150BH *****

150BH *****

*****

(SP)

(SP)

(SP)

(4) (5) (6) 9

微机原理及应用(陈继红、徐晨)课后习题答案

第四章汇编语言程序设计习题答案(部分)

4.1 什么是标号?它有哪些属性?

答:标号是一种特殊的标识符,它代表代码段中的某个具体位置,它主要用于表明 转移的目标位置。源程序中的标号都有三种属性:段、偏移及类型。

4.2 什么是变量?它有哪些属性?

答:变量名代表存储器中的一个数据区的名字。源程序中的变量有五种属性:段、偏 移、类型、长度、规模。

4.3 什么是伪指令?什么是宏指令?伪指令在什么时候被执行?宏指令在程序中如何 被调用?

答:伪指令语句是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应 如何汇编。伪指令语句是在汇编程序对源程序汇编期间由汇编程序处理的操作。

宏是若干语句组成的程序段,宏指令语句用来定义宏。一旦把某程序段定义成宏,则可 以用宏名代替那段程序。在汇编时,要对宏进行宏展开,展开的过程是将宏名用程序段代替。

4.4 汇编语言表达式中有哪些运算符?它们所完成的运算是在什么时候进行的? 答:汇编语言表达式中的运算符有: 算术运算符

+、-、*、/、MOD 逻辑运算符

AND、OR、NOT、XOR 关系运算符

EQ、NE、LT、GT、LT、LE、GE

分析运算符SEG、OFFSET、TYPE、LENGTH、SIZE 属性运算符

PTR、THIS、SHORT 其它

LOW、HIGH

这些运算符都是在在汇编时由汇编程序对其运算的。

4.5 画出下列语句中的数据在存储器中的存储情况。 ORG 100H

VARB DB 34,34H,‘GOOD’,2 DUP(1,2 DUP(0) ))

VARW DW 5678H,‘CD’,$+2,2 DUP(100) VARC EQU 12

VARB DS:0100H

22H 34H 47H 4FH 4FH 44H 01H 00H 00H 01H 00H

DS:010BH

DS:0101H

VARW DS:010CH

DS:0102H

DS:010DH

DS:0103H

DS:010EH

DS:0104H

DS:010FH

DS:0105H

DS:0110H

DS:0106H

DS:0111H

DS:0107H

DS:0112H

DS:0108H

DS:0113H

DS:0109H

DS:0114H

DS:010AH

DS:0115H

00H 78H 56H 44H 43H 12H 01H 64H 00H 64H 00H

4.6 按下列要求,写出各数据定义语句。 DB1为

10H个重复的字节数据序列:1,2,5个 3,4。

DB2为字符串‘STUDENTS’

DB3为十六进制数序列:12H,ABCDH 用等值语句给符号 COUNT赋以

DB1数据区所占字节数,该语句写在最后。 解答: 10

微机原理及应用(陈继红、徐晨)课后习题答案

DB1 DB 16 DUP(1,2,5 DUP(3),4) DB2 DB ‘STUDENTS’ DB3 DW 12H,0ABCDH COUNT EQU DB2-DB1

4.7 指令

OR AX,1234H OR 0FFH中两个

OR有什么差别?这两个操作数分别在什么时 候执行? 解答:(1)指令

OR AX,1234H OR 0FFH中的第一个 OR是指令系统中的 “或”指令,而 第二个

OR是表达式中表示逻辑 “或”关系的。(2)指令

OR AX,1234H OR 0FFH中的第一个 OR是在

CPU执行指令操作时才会执行。而第二个 OR是在汇编时就会将 1234H和 0FFH作

逻辑“或”运算,得到结果 12FFH。然后执行第一个 OR指令,完成 AX的内容与 12FFH的

逻辑“或”运算。

4.8 对于下面的数据定义,各条

MOV指令单独执行后,有关寄存器的内容是什么? PREP DB ?

TABA DW 5 DUP(?) TABB DB ‘NEXT’

TABC DD 12345678H

(1)MOV AX,TYPE PREP;AX=1 (2)MOV AX,TYPE TABA;AX=2 (3)MOV AX,LENGTH TABA;AX=5

(4)MOV AX,SIZE TABA;AX=10 (5)MOV AX,LENGTH TABB;AX=1 (6)MOV DX,SIZE TABC;AX=4

4.9 设数据段

DSEG中符号及数据定义如下,试写出数据在内存中的存储示意图。 (数据段

DSEG定义略 )

解答:

DAB DS:0100H

2FH 47H 4FH 54H 4FH 2FH 0DH 0AH 05H 13H 61H

DS:0113H

DS:0101H

DS:0114H

DS:0102H

DS:0115H

DS:0103H

DS:0116H

DS:0104H

DS:0117H

DS:0105H

DS:0118H

DS:0106H

DS:0119H

DS:0107H

DS:011AH

DBB DS:0108H

DS:011BH

DS:0109H

DDW DS:011CH

DS:010AH

DS:011DH

CCB DS:010BH

DS:011EH

DS:010CH

DS:011FH

DS:010DH

DS:0120H

DS:010EH

DS:0121H

DS:010FH

DS:0122H

DS:0110H

DS:0123H

DS:0111H

DS:0124H

DS:0112H

DS:0125H

32H 31H 64H 00H 33H 03H 78H 00H 64H 00H

4.10 若自

STRING单元开始存放有一个字符串(以字符 ‘$’结束),试完成:

(1)编程统计该字符串长度(不包含 $字符,并假设长度为两字节)。 (2)把字符串长度放在

STRING 单元,把整个字符串往下移两个单元。 11

微机原理及应用(陈继红、徐晨)课后习题答案

程序段为: (1)

MOV SI, OFFSET STRING XOR BX, BX

CONT:MOV AL, [SI] CMP AL, ‘$’ JZ NEXT INC BX INC SI JMP CONT

NEXT:MOV AH, 4CH INT 21H

(2)STRING DB ‘ $’ COUNT EQU $-STRING MOV SI, OFFSET STRING MOV CX, COUNT ADD SI, CX CONT: DEC SI MOV AL, [SI] MOV [SI+2], AL LOOP CONT

MOV CX, COUNT MOV STRING, CX MOV AH, 4CH INT 21H

4.11 将字符串

STRING中的‘&’字符用空格代替,字符串 STRING“It is FEB&03”。 解答程序为: DATA SEGMENT

STRING DB ‘It is FEB&03’ COUNT EQU $-STRING DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA

MOV DS,AX

MOV SI,OFFSET STRING

MOV CX,COUNT MOV AL,‘$’

CONT:CMP AL,[SI] JNZ NEXT

MOV BYTE PTR[SI],‘ ’

NEXT: INC SI

LOOP CONT MOV AH,4CH INT 21H

CODE ENDS END START

4.12 设 BLOCK起有

20个单字节的数,试将它们按降序排列。 解答程序为: DATA SEGMENT ORG 0100H

BLOCK DB 12H,87H,51H,68H,00H,02H,0FFH,0D6H,45H,77H,80H,9FH LEN EQU $-BLOCK 12

微机原理及应用(陈继红、徐晨)课后习题答案

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA MOV DS,AX

MOV BX,LEN-1 ;BX比较轮数 LOP0: MOV SI,LEN-1 ;SI第 N个数在数据表中的偏移量 MOV CX,BX ;CX比较次数计数值 MOV DX,0 ;DX置交换标志为第 N个数在数据表中偏移量 LOP1: MOV AL,BLOCK[SI]

CMP AL,BLOCK[SI-1] ;比较相邻两数 JLE NEXT

MOV AH,BLOCK[SI-1] ;交换两数 MOV BLOCK[SI-1],AL MOV BLOCK[SI],AH

MOV DX,1 ;DX发生交换处的位置

NEXT: DEC SI ;修改数据地址

LOOP LOP1 ;一轮比较完吗?

CMP DX,0 ;本轮发生交换吗?

JZ STOP ;已全部排好序 ,转程序结束

DEC BX ;所有轮都比较完否?

JNZ LOP0 ;未完继续

STOP: MOV AH,4CH

INT 21H

CODE ENDS

END START

4.14试编写一个汇编语言程序

,要求对键盘输入的小写字母用大写字母显示出来。 解答程序为: data segment

message db 'please enter the small letter:',0ah,0dh,'$' message2 db 'the capital letter is:',0ah,0dh,'$'

error db 'enter must be small!please enter again:',0ah,0dh,'$' message3 db 'the capital letter is:','$' letter db ? data ends stack segment db 100h dup(?) stack ends code segment

assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax jmp l1 xor ax,ax

error1:lea dx,error mov ah,09h int 21h

l1:lea dx,message mov ah,09h int 21h lea dx,letter mov ah,01h int 21h push ax 13

微机原理及应用(陈继红、徐晨)课后习题答案

mov dl,0ah mov ah,02h int 21h mov dl,0dh int 21h

lea dx,message3 mov ah,09h int 21h pop ax

cmp al,'z' ;比较,判断是否小写字母 ja error1 cmp al,'a'

jb error1 ;大写字母重新输入 sub al,20H ;减

20H转换为大写字母 mov dl,al mov ah,02h int 21h

mov ax,4c00h int 21h code ends end start

4.15 键盘输入十个学生的成绩,试编制一个程序统计 69~69分, 70~79分, 80~89分, 90~99分及

100分的人数,分别存放到 S6,S7,S8,S9及 S10单元中。 解答程序为:

DATA SEGMENT BUF DB 10 DUP(?) S6 DB ? S7 DB ? S8 DB ?

S9 DB ? S10 DB ? DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV SI,OFFSET S6 XOR AL,AL

MOV CX,0504H CONT: MOV [SI],AL INC SI

LOOP CONT MOV CX,10

MOV SI,OFFSET BUF CONT1: MOV AH,1 INT 21H SHL AL,CL MOV BL,AL MOV AH,1 INT 21H SUB AL,30H OR AL,BL MOV [SI],AL CMP AL,70H JAE NEXT1

INC BYTE PTR S6 14

微机原理及应用(陈继红、徐晨)课后习题答案

NEXT1: CMP AL,80H JAE NEXT2

INC BYTE PTR S7 NEXT2: CMP AL,90H JAE NEXT3

INC BYTE PTR S8 NEXT3: CMP AL,99H JA NEXT4

INC BYTE PTR S9 JMP NEXT5

NEXT4: INC BYTE PTR S10 NEXT5: INC SI LOOP CONT1 MOV AH,4CH INT 21H CODE ENDS END START

4.17 在有序表“11,22,33,44,55,66,77,88,99,00”中查找 44。若找到置 find为其在表中 的位置;未找到,find置0。

4.18 分别实现满足下面要求的宏定义:

(1)可对任一寄存器实现任意次数的左移操作。 (2)任意两个单元中的数据相加存入第三个单元中。 (3)将任意一个8位寄存器中的压缩BCD码转为两个ASCI II码,并在屏幕上显示。

(2)宏定义的代码段如下: ADDM MACRO M1,M2,M3 MOV AX,[M1] ADD AX,[M2] MOV [M3],AX ENDM 15

微机原理及应用(陈继红、徐晨)课后习题答案

第五章

8086系统时序和微机总线习题答案(部分)

5.1 什么是时钟周期、总线周期、指令周期?

答:8086CPU执行一条指令是由取指令、译码和执行等操作组成的,为了使 8086CPU

的各种操作协调同步进行,8086CPU必须在时钟信号 CLK 控制下工作,时钟信号是一个

周期性的脉冲信号,一个时钟脉冲的时间长度称为一个时钟周期 (Clock Cycle),是时钟频率

(主频)的倒数,时钟周期是计算机系统中的时间基准。

8086CPU要通过总线才能与外部交换信息, CPU通过总线接口单元与外部交换一次信

息,称为一次总线操作,所耗用的时间称为一个总线周期 (Bus Cycle),也称机器周期(Machine Cycle)。一个总线周期由若干个时钟周期组成,总线操作的类型不同,总线周期也不同。一 个总线周期内完成的数据传输,一般有传送地址和传送数据两个过程。

8086CPU执行一条指令所需要的时间称为指令周期( Instruction Cycle),一个指令周期 由若干个总线周期组成,

5.2 8086微处理器各个 T状态的主要功能。 答:(1)在

T1状态,CPU往多路复用总线上发出地址信息,以指出要寻址的存储单元或 外设端口的地址。

(2)在

T2状态,CPU从总线上撤消地址,而使总线的低 16位浮空,置成高阻状态,为 传输数据作准备。总线的最高 4位(

A19~A16)用来输出本总线周期状态信息。在这些状

态信息用来表示中断允许状态,当前正在使用的段寄存器名等。 (3)在

T3状态,多路总线的高

4位继续提供状态信息,而多路总线的低 16位( 8088则 为低

8位)上出现由

CPU写出的数据或者

CPU从存储器或端口读入的数据。

(4)在有些情况下,外设或存储器速度较慢,不能及时地配合 CPU传送数据。这时,外 设或存储器会通过 “READY”信号线在 T3状态启动之前向

CPU发一个“数据未准备好 ”信号, 于是 CPU会在 T3之后插入

1个或多个附加的时钟周期 Tw。Tw也叫等待状态,在 Tw状态,

总线上的信息情况和

T3状态的信息情况一样。当指定的存储器或外设完成数据传送时,便 在“READY”线上发出

“准备好”信号,CPU接收到这一信号后,会自动脱离 Tw状态而进入 T4状态。 (5)在

T4状态,总线周期结束。 5.3 8086和

8088有何区别? 答:这两种

CPU的主要区别如下: ⑴外部数据总线位数:

8086 CPU的外部数据总线有

16位,在一个总线周期内可输入 /

输出一个字( 16位数据),使系统处理数据和对中断响应的速度得以加快;而 8088 CPU的

外部数据总线为

8位,在一个总线周期内只能输入

/输出一个字节( 8位数据)。

⑵指令队列容量:

8086 CPU的指令队列可容纳

6个字节,且在每个总线周期中从存储 器中取出

2个字节的指令代码填入指令队列,这可提高取指操作和其它操作的并行率,从而 提高系统工作速度;而

8088 CPU的指令队列只能容纳

4个字节,且在每个总线周期中能取 一个字节的指令代码,从而增长了总线取指令的时间,在一定条件下可能影响取指令操作和 其它操作的并行率。 ⑶引脚特性:两种

CPU的引脚功能是相同的,但有以下几点不同: 1) AD15~AD0的定义不同:在 8086中都定义为地址 /数据复用总线;而 8088中,由于 只需

8条数据总线,因此,对应于 8086的

AD15~AD8这 8条引脚定义为 A15~A8,只作 地址线使用。

2) 34脚的定义不同:在 8086中定义为 BHE信号;而在 8088中定义为 SSO,它与 DT /R ,

IO /M 一起用作最小方式下的周期状态信号。 3) 28脚的相位不同,在 8086中为 M /IO ;而在

8088中被倒相,改为 IO / M,以便与

8080/8085系统的总线结构兼容。

5.4 8086是怎样解决地址线和数据线的复用问题的? ALE的作用是什么? 答:(1)、AD15-AD0采用分时的多路转换方法来实现对地址线和数据线的复用。在总 16

微机原理及应用(陈继红、徐晨)课后习题答案

线周期

T1状态下,这些引线表示为低 16位地址线,在总线周期为 T2、T3、TW状态,这

些引线用作数据总线,可见对复用信号是用时间来加以划分的,他要求在 T1 状态下先出现 低

16位地址时,用地址锁存器加以锁存,随后的 T状态,即使这些用作数据线,而低 16

位地址线的地址状态去被记录保存下来,并达到地址总线上。

(2)、ALE是地址锁存允许信号,高电平有效。 5.5 8086有哪

4种最基本的总线操作? 答:(1)存储器及 I/O的读/写操作 (2)中断响应操作

(3)总线请求及响应操作 (4)总线空闲 ——指

CPU正进行内部操作、不进行对外操作的总线空闲状态 Ti。

5.6 8086微处理器的输入控制信号有 HOLD、INTR和

NMI,其含义各是什么?当它们 有效时,8086将作出何种反应? 答:HOLD(输入):总线保持请求信号。当系统中 CPU之外的总线主设备要求使用总 线时,通过 HOLD引脚向

CPU发出请求,如果 CPU允许让出总线,则 CPU在当前周期的

T4状态或下一总线周期的 T1状态。,由

HLDA引脚向主设备输出高电平信号作为响应。同 时使地址总线、数据总线和相应的控制线处于浮空状态,总线请求主设备取得总线的控制权。 一旦总线使用完毕,总线请求主设备使 HOLD变为低电平,

CPU检测到

HOLD为低后,把

HLDA也置为低电平,CPU重新获得总线的控制权

INTR(输入):可屏蔽中断请求信号,高电平有效。 CPU在执行每条指令的最后一个 T

状态时,去采样

INTR信号,若发现为有效,而中断允许标志 IF又为 1,则

CPU在结束当

前指令周期后响应中断请求,转去执行中断处理程序。

NMI(输入):非屏蔽中断请求信号,上升沿触发。此请求不受 IF状态的影响,也不能

用软件屏蔽,只要此信号一出现, CPU就会在现行指令结束后引起中断。

5.7 什么是微型计算机的总线?总线可分为哪几类?

答:总线就是在多个模块之间或多个设备之间传送信息的公共通道。

按照总线的规模、用途和应用场合的不同,微型计算机系统中的总线可分为片总线、内 部总线和外部总线三类。

5 8 总线标准一般在哪几个方面进行了详细规定?

为了使计算机的各种模块或设备能够互连和扩展,不同厂商生产的部件能够相互替换, 需要制定一定的规范,因此需要标准化的总线标准。每个总线标准都有详细的规定,一般包 括以下四个特征:

⑴物理特性:物理特性是指总线的物理连接方式。包括总线的根数、总线的插头、插 座是什么形状的、引脚是如何排列的等。

⑵功能特性:功能特性描述这一组总线中每一根线的功能。从功能上看,总线分成 3

组:地址总线、数据总线和控制总线。地址总线的宽度指明了总线能够直接访问存储器的地 址范围。数据总线的宽度指明了访问一次存储器或外部设备最多能够交换数据的位数。控制 总线一般包括

CPU与外界联系的各种控制信号。

⑶电气特性:电气特性定义每一根线上信号的传递方向及有效电平范围。一般规定送

CPU的信号叫 IN(输入信号 ),从

CPU送出的信号叫 OUT(输出信号)。

⑷时间特性:时间特性定义了每根线在什么时间有效。也就是说用户什么时间可以用 总线上的信号或者用户什么时候把信号提供给总线, CPU才能正确无误地使用。 5.9 简要说明 ISA总线的特征。

ISA(Industry Standard Architecture)总线是在最早的 IBM PC机中的 PC总线基础上发

展起来的。PC总线是一个 8位的开放结构总线,有

62个引脚,提供地址线、数据线、控制 线及电源等。1984年,在 PC总线的基础上增加了一个 36引脚的扩展插座,成为 ISA总线。

ISA总线有 16位数据线、

24位地址线、中断线、支持 DMA通道的信号线、等待状态 17

微机原理及应用(陈继红、徐晨)课后习题答案

发生信号线、

+5V、-5V、12V电源线等。工作频率为 8MHz,最大传输率为 8MB/s。

5.10 简述

PCI接口的用途和特点。 ⑴最高操作时钟频率为 33MHz/66MHz,拥有 32位和 64位

2种数据通道。

⑵支持成组数据传送方式;若被传送的数据在内存中连续存放,则在访问第一个数据 时需要

2个时钟周期,第一个时钟周期内给出地址,第二个时钟周期内传送数据;从第二个

数据开始不必再给出地址,可直接传送数据,即每一个时钟周期传送一个数据。这种传送方 式也称为突发传送。

⑶支持总线主控方式,允许多处理器系统中的任何一个微处理器都可以成为总线主控 设备,对总线操作进行控制。 ⑷与

ISA、EISA等多种总线兼容。由于 PCI总线在

Pentium微处理器与其它总线间架 起了一座桥梁,它也支持像

ISA、EISA等这样的低速总线操作。

⑸支持所有目前的和将来的不同结构的微处理器。可以把 PCI局部总线看作是一个独

立的处理器,它可以与任何一种微处理器 —起使用,不局限于 80x86。这就确保了 80x86系

列机在更新换代时,也不会把

PCI局部总线抛弃。因此许多大的计算机公司都宣布支持 PCI

总线。 ⑹它支持 5V和

3.3V两种扩充插件卡。可以从 5V向

3.3V进行平滑的系统转换。 PCI

总线上装有一个很小的断路键,使用户在插卡时不会导致在系统主板上有不同的电压电源。 ⑺支持即插即用。PCI设备中有存放设备具体信息的寄存器,这些信息使系统 BIOS

和操作系统层的软件可以实现自动配置。 ⑻ PCI总线的引线,在每

2个信号之间都安排了一个地线,以减少信号间的相互干扰。 ⑼ PCI总线实现了触发级的中断,这种中断可支持中断共享。 ⑽ PCI总线能支持高达

l0个外围设备,其中的某些外围设备必须嵌入到系统主板上。 18

微机原理及应用(陈继红、徐晨)课后习题答案

第六章存储器习题答案(部分)

6.1 试说明半导体存储器的分类。 答:半导体分为: RAM和

ROM。RAM分为静态 RAM和动态

RAM。ROM分为:掩膜 ROM、

PROM、EPROM、E2PROM。 6.2 试说明

CMOS静态存储器基本存储电路数据读、写的原理。 19

微机原理及应用(陈继红、徐晨)课后习题答案

第七章基本输入/输出接口习题答案(部分)

7.1 简述

I/O接口的主要功能。 答:(1)对输入输出数据进行缓冲和锁存 (2)对信号的形式和数据的格式进行变换 (3)对

I/O端口进行寻址 (4)提供联络信号

7.2 CPU与外设之间的数据传输方式有哪些?简要说明各自含义。 答:(1)程序方式:微机系统与外设之间的数据传输过程在程序的控制下进行

(2)中断方式:在中断传输方式下,当输入设备将数据准备好或输出设备可以接收数 据时,便向

CPU发出中断请求,使

CPU暂时停止执行当前程序,而去执行数据输入/输出

的中断服务程序,与外设进行数据传输操作,中断服务程序执行完后, CPU又返回继续执 行原来的程序。

(3)直接存储器存取( DMA)方式:

DMA方式是指不经过 CPU的干预,直接在外设

和内存之间进行数据传输的方式。

7.3 什么是端口?通常有哪几类端口?计算机对 I/O端口编址时通常采用哪?在 80x86

系统中,采用哪一种方法? 每个

I/O接口内部一般由三类寄存器组成。 CPU与外设进行数据传输时,各类信息在

接口中进入不同的寄存器,一般称这些寄存器为 I/O端口。

I/O端口通常有数据端口、状态端口、控制端口。 计算机对

I/O端口编址时通常采用: I/O端口与内存统一编址、 I/O端口独立编址两种

方法。

80x86系统中,采用 I/O端口独立编址方法。

7.4 现有一输入设备,其数据端口地址为 FFE0H,状态端口地址为 FFE2H,当其 D0

1时表明输入数据准备好。试采用查询方式,编程实现从该设备读取 100个字节数据并保 存到

2000H:2000H开始的内存中。 程序为:

CODE SEGMENT ASSUME CS:CODE

START: MOV AX,2000H MOV DS,AX MOV SI,2000H MOV CX,100

CONT:

MOV DX,0FFE2H

CONT1:IN AL,DX TEST AL,01 JZ CONT1

MOV DX,0FFE0H IN AL,DX MOV [SI],AL INC SI

LOOP CONT MOV AH,4CH INT 21H

CODE ENDS END START

7.5 硬件如图

7.5所示,试编程实现: S0控制

8个发光二极管 1亮

7暗,S1控制 8 个

8个发光二极管 7亮

1暗,S2控制某一亮点(或暗点)以一定时间间隔循环向左移动, 20