第一章
1.1 IA-32结构微处理器直至Pentillm4,有哪几种?
解:80386、30486、Pentium、Pentium
Pro、Peruium II 、PentiumIII、Pentium4。
1.6 微处理器、微型计算机和微型计算机系统三者之间有什么不同?
解:把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微处理
器。微处理器加上一定数量的存储器和外部设备(或外部设备的接口)构成了微型
计算机。微型计算机与管理、维护计算机硬件以及支持应用的软件相结合就形成
了微型计算机系统。
1.7 CPU在内部结构上由哪几部分组成?CPU应该具备哪些主要功能?
解:CPU主要由起运算器作用的算术逻辑单元、起控制器作用的指令寄存器、指
令译码器、可编程逻辑阵列和标志寄存器等一些寄存器组成。其主要功能是进行
算术和逻辑运算以及控制计算机按照程序的规定自动运行。
1.8 微型计算机采用总线结构有什么优点?
解:采用总线结构,扩大了数据传送的灵活性、减少了连线。而且总线可以标准
化,易于兼容和工业化生产。
1.9 数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地
址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?
解:数据总线是双向的(数据既可以读也可以写),而地址总线是单向的。8086CPU
为了减少芯片的引脚数量,采用数据与地址线复用,既作数据总线也作为地址总
线。它们主要靠信号的时序来区分。通常在读写数据时,总是先输出地址(指定要
读或写数据的单元),过一段时间再读或写数据。
1.13 在给定的模型中,写出用累加器的办法实现15×15的程序。
解: LD
LD
LOOP:ADD
DEC
JP
HALT
A, 0
H, 15
A, 15
H
NZ, LOOP
第二章
2.6 IA-32结构微处理器有哪几种操作模式?
解:IA一32结构支持3种操作模式:保护模式、实地址模式和系统管理模式。操作
模式确定哪些指令和结构特性是可以访问的。
2.8 IA-32结构微处理器的地址空间如何形成?
解:由段寄存器确定的段基地址与各种寻址方式确定的有效地址相加形成了线性
地址。若末启用分页机制,线性地址即为物理地址;若启用分页机制,则它把线
1
性地址转为物理地址。
2.15 8086微处理器的总线接口部件由哪几部分组成?
解:8086微处理器中的总线接口单元(BIU)负责CPU与存储器之间的信息传送。具
体地说,BIU既负责从内存的指定部分取出指令,送至指令队列中排队(8086的指
令队列有6个字节,而8088的指令队列只有4个字节);也负责传送执行指令时所需
的操作数。执行单元(EU)负责执行指令规定的操作。
2.16 段寄存器CS=120OH,指令指针寄存器IP=FFOOH,此时,指令的物理地址为多
少?
解:指令的物理地址=12000H+FFOOH=21FOOH
第三章
3.1 分别指出下列指令中的源操作数和目的操作数的寻址方式。
SI,
(1)MOV
CX,
(2)MOV
AX,
(3)ADD
(4)AND
AX,
(5)MOV [BP],
(6)PUSHF
30O
DATA[DI]
[BX][SI]
CX
AX
解:
(1)源操作数为立即寻址,目的操作数为寄存器寻址。
(2)源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻址。
(3)源操作数为基址加变址寻址,目的操作数为寄存器寻址。
(4)源操作数和目的操作数都为寄存器寻址。
(5)源操作数为寄存器寻址,目的操作数为寄存器间接寻址。
(6)为堆栈操作。
3.2 试述指令MOV AX,2000H和MOV AX,DS:[2000H]的区别。
解:前一条指令是立即寻址,即把立即数2000H传送至寄存器AX。后一条指令是直
接寻址,是把数据(DS)段中的地址为200OH单元的内容传送至寄存器AX。
3.3 写出以下指令中内存操作数的所在地址。
(1)MOV
(2)MOV
(3)INC
(4)MOV
(5)MOV
[BX+10]
AX
AL,
[BP+10],
BYTE PTR[SI十5]
DL,
ES:[BX+SI]
BX , [BP+DI+2]
解:
(1)数据段BX+10单元。
(2)堆栈段BP+10单元。
(3)数据段SI+5字节单元。
(4)附加段(ES段)BX+SI单元。
2
(5)堆栈段BP+DI+2单元。
3.4 判断下列指令书写是否正确。
BX
CL
AL,
(1)MOV
AL,
(2)MOV
[BX]
(3)INC
AL
5,
(4)MOV
[BX], [SI]
(5)MOV
OF5H
BL,
(6)M0V
DX,
2000H
(7)MOV
(8)POP
CS
(9)PUSH CS
解:
(l)不正确,AL与BX数据宽度不同。
(2)正确。
(3)不正确,因为不明确是增量字节还是字。
(4)不正确,立即数不能作为目的操作数。
(5)不正确,因为不明确要传送的是字节还是字。
(6)正确。
(7)正确。
(8)不正确,CS不能作为:pop指令的操作数。
(9)不正确,CS不能作为PUSH指令的操作数。
3.5 设堆钱指针SP的初值为1000H,AX=2000H, BX=3000H,试问:
(1)执行指令PUSH AX后SP的值是多少?
(2)再执行PUSH BX及POP AX后,SP、AX和BX的值各是多少?
解:
(1) SP=OFFEH。
(2) SP=OFFEH; AX=3000H, BX=3000H。
3.6 要想完成把[3000H]送[2000H]中,用指令:
MOM [200OH], [300OH]
是否正确?如果不正确,应该用什么方法实现?
解: 不正确。
正确的方法是:
MOV
MOV [2000H], AL
AL,
[300OH]
3.7 假如想从200中减去AL中的内容,用SUB 200,AL是否正确?如果不正确,应该
用什么方法?
3
解:不正确。
正确的方法是:
BL,
MOV
200
SUB
BL, AL
3.8 试用两种方法写出从8OH端口读入信息的指令。再用两种方法写出从4OH口
输出10OH的指令。
解:
(1) IN
(2) MOV
IN
(3) MOV
OUT
(4) MOV
MOV
OUT
AL,
80H
DX, 8OH
AL,
DX
AL,
lOOH
40H, AL
AL,
10OH
DX, 4OH
DX,
AL
3.9 假如:AL=20H,BL=1OH,当执行CMP AL,BL后,问:
(1)AL、BL中的内容是两个无符号数,比较结果如何?影响哪儿个标志位?
(2)AL、BL中的内容是两个有符号数,结果又如何,影响哪几个标志位?
解:
(l)AL=2OH,BL=1OH,O=0,S=0,Z=0,A=0,P=0,C=0。
(2)因为两个都是符号正数,其结果与(l)相同。
3.10 若要使AL×10,有哪几种方法,试编写出各自的程序段?
解:
(1)使用乘法指令:
MOV BL,10
MUL BI,
(2)使用移位指令:
SHL AL,1
MOV BL,AL
SHL AL, 2
ADD AL,BL
(3)使用加法指令:
ADD AL,AL
MOV BL, AL
ADD AL, AL
ADD AL, AL
ADD AL, BL
4
3.11 8086汇编语言指令的寻址方式有哪几类?哪种寻址方式的指令执行速度快?
解:寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻
址方式。其中,寄存器操作数寻址方式的指令执行速度最快。
3.12 在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?
如果要用某个段寄存器指出段地址,指令中应该如何表示?
解:默认的数据访问,操作数在DS段;堆栈操作在SS段;串操作源操作数(SI)在DS
段,目的操作数(DI)在ES段;用BP作为指针在SS段。如果要显式地指定段地址,
则在操作数中规定段寄存器。例如:MOV AX, ES:(BX+10H)
3.13 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么如何
确定段地址?
解:在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,段地址是隐含
约定的,也就是隐含地选择段寄存器。如操作类型为指令,则指定代码段寄存器CS,
如操作类型为堆栈操作,则指定堆找段寄存器SS,…,如表3-1中所示。当需要超越
约定时,通常用段替代前缀加冒号":"来表示段超越,它允许程序设计者偏离任何
约定的段。
例如: MOV ES:[BX],AX
这时数据将从寄存器EAX传送至附加段中由EBX寻址的存储单元,而不是传送到数
据段中。
3.14 采用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?这
4个寄存器组合间接寻址时,地址是怎样计算的?请举例说明。
解:在寄存器间接寻址方式下,BX和BP作为间址寄存器使用,而SI、DI作为变址寄
存器使用。除BP间址默认的段为堆栈段,其他的都默认为数据段。它们都可以单
独使用,或加上偏移量或组合使用。如:
[BX +n]
[BP +n]
[SI +n]
[DI +n]
5
[BX +SI +n]
[BX +DI +n]
[BP +SI +n]
[BP +DI +n]
3.15 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的
具体操作:
MOV BYTE PTR[BP],200
MOV WORD PTR[BX],2000
解:前一条指令是把立即数(应是字节)200,传送至堆栈段(BP的默认段〉偏移量由
BP规定的字节单元,地址为:52000H+620OH=58200H。第二条指令是把立即数.2000,
传送至数据段(BX的默认段)偏移量由BX规定的字单元,地址为:21000H+1400H =
22400H。
3.16 使用堆钱操作指令时要注意什么问题?传送指令和交换指令在涉及内存操
作数时应该分别要注意什么问题?
解:使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈固定
在堆栈段且只能由SP指向。且堆栈操作要修改堆核指针。MOV指令不能实现内存
单元间的数据传送。XCHG指令是交换,有一个操作数必须是寄存器。
AX
[1000]
IP
3.17下面这些指令中哪些是正确的?哪些是错误的?若是错误的,请说明原因。
(1)XCHG
(2)MOV
(3)XCHG
(4)PUSH
(5)POP
(6)IN
(7)MOV
(8)MOV
CS,
[BX],
BX,
CS
CS
BX,
BYTE[BX], 100O
CS,
DX
[1000]
解:
(l)错误,CS不能交换。
(2)错误,MOV指令不能在内存间传送。
(3)错误,IP不能交换。
(4)错误,CS可以作为PUSH指令的操作数。
(5)错误,CS可以作为POP指令的操作数。
(6)错误,IN指令的目的操作数是累加器。
(7)错误,目的操作数是字节单元。
(8)错误,CS不能作为MOV指令的目的操作数。
3.18 以下是格雷码的编码表
O
1
2
3
4
0000
0001
0011
0010
0110
6
5
6
7
8
0111
0101
0100
1100
请用换码指令和其他指令设计一个程序段,以实现由格雷码向ASCII码的转换。
解:
TABLE
MOV BX,
MOV SI, ASCII_TAB
MOV AL, 0
MOV CX,
10
TRAN: XLAT TABLE
MOV DL,
AL
ADD DL, 30H
MOV [SI],DL
INC AL
LOOP TRAN
3.19 使用乘法指令时,特别要注意先判断是用有符号数乘法指令还是用无符号
数乘法指令,这是为什么?
解:因为有符号数和无符号数,其数的乘法是一样的。但结果的符号取决于两个
操作数的符号。
3.20 字节扩展指令和字扩展指令一般用在什么场合?举例说明。
解:主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。
3.21什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086汇编语言在
对BCD码进行加、减、乘、除运算时,采用什么方法?
解:BCD码为十进制编码的二进制数。组合的BCD数是把两位BCD加在一个字节中,
高位的在高4位。非组合的BCD码是把一位BCD数放在一个字节的低4位,高4位为0。
8086在BCD加、减和乘法运算以后用BCD调整指令把结果调整为正确的BCD数。在
BCD除法之前先用BCD调整指令再做除法.
3.22 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体地讲,
在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整
指令?
解:因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结
果,需要进行调整。在加、减、乘法指令之后加上BCD调整指令,而在除法指令之
前先用BCD调整指令再用除法指令。
第四章
4.1 在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:
MOV
MOV
MOV
AL,
CX,
BX ,
1OH
100OH
2000H
7
[CX],AL
MOV
XCHG CX, BX
DH,
MOV
DL,
MOV
XCHG CX,
MOV
HLT
[BX]
01H
BX
[BX],DL
解:寄存器及存储单元的内容如下:
AL = 1OH
BL = OOH
BH = 2OH
CL = OOH
CH = 1OH
DH = 1OH
(10O0H) = lOH
(200OH) = 0lH
2.要求同题4.1,程序如下:
AL,
BP,
BX,
DH,
50H
100OH
200OH
MOV
MOV
MOV
MOV [BP], AL
MOV
20H
MOV [BX], DH
OlH
MOV
[BX]
MOV
MOV
300OH
HLT
DL,
DL,
CX,
解:寄存器及存储单元的内容如下:
AL = 5OH
BL = OOH
BH = 20H
CL = OOH
CH = 30H
DL = 20H
DH = 2OH
BP = 100OH
(10OOH) = 5OH
(20OOH) = 20H
4.3 自1000H单元开始有一个100个数的数据块,若要把它传送到自200OH开始的
存
储区中去,可以采用以下3种方法实现,试分别编制程序以实现数据块的传送。
(l)不用数据块传送指令
(2)用单个传送的数据块传送指令
(3)用数据块成组传送指令。
8