王忠民主编 西安电子科技大学出版
部分习题答案
第二章 计算机中的数值和编码
1、 将十进制数转换为二进制和十六进制
(1) 129.75=1000 0001.11B=81.CH 2、 将下列二进制数转换为十进制和十六进制
(1) 111010 B=58 =3A H (2) 1011 1100.111B= 188.875= BC.E H (3) 0.1101 1B=0.84375 =0.D8H (4) 11110.01 B=30.25 =1E.4H (1) 1001.11+100.01=1110.0001110101.0110 (4) 01011101.0110-101101.1011=101111.1011
(1) 745CH+56DFH=D14B H (2) ABF.8H-EF6.AH=9C28.E H (3) 12AB.F7+3CD.05=1678 .FC H (4)
6F01H-EFD8H=7F29 H
(2) 218.8125=1101 1010.1101B=DA.DH
(3) 15.625=1111.101B=F.AH (4) 47.15625=10 1111.0010 1B=2F.28 H
3、完成下列二进制数的加减法运算
4、完成下列十六进制数的加减法运算
5、计算下列表达式的值 103.CEH
(3) 18.9+1010.1101B+12.6H-1011.1001=36.525 (1) X=-33的补码:
(2) Y=+33的补码: 0010 0001, 0000 0000 0010 0001 (3) Z=-128的补码:1000 0000, 1111 1111 1000 0000 (4) N=+127的补码:0111 1111, 0000 0000 0111 1111 (5) A=-65的补码: 1011 1111, 1111 1111 1011 1111 (6) B=+65的补码: 0100 0001, 0000 0000 0100 0001 (7) C=-96的补码: 1010 0000, 1111 1111 1010 0000 (8) D=+96的补码: 0110 0000, 0000 0000 0110 0000 (1) [X]补=1000 0000 0000 0000 H (2) [Y]补=0000 0001 0000 0001 H (3) [Z]补=1111 1110 1010 0101 H
X=-1000 0000 0000 0000 H=-32768 Y=+0000 0001 0000 0001 H=+257 Z=-0000 0001 0101 1011 H=-347
6、选取字长n为8位和16位两种情况,求下列十进制数的补码。
7、写出下列用补码表示的二进制数的真值
(4) [A]补=0000 0010 0101 0111 H A=+0000 0010 0101 0111 H=+599
8、设机器字长为8位,最高位为符号位,试对下列格式进行二进制补码运算,并判断结果是否溢出。
(1) 43+8
∵ [43]补=00101011B,[8]补=00001000B
∴ [43]补+[8]补=00101011B+00001000B=00110011B=33H 00101011B
+ 00001000B
00110011B
∵ CS=0,CD=0,OF=CS∴ 无溢出
33H 96 H
⊕CD=0⊕0=0
(无溢出) (溢出)
(2) -52+7 (4) 72-8
D3 H 40 H
(无溢出) (无溢出)
(1) 43+8 (3) 60+90
(5) -33+(-37)
(7) ―9―(―7)
0BA H (无溢出) (6) -90+(-70)
(8) 60-90
60 H
(溢出)
FE H (无溢出) E2 H (无溢出)
9、 设有变量xyz=01110010B,v=01011010B,试计算x+y=?,x+z=?,y+z=?,z+v=?,请问:① 若为无符号
数,计算结果是否正确?② 若为带符号补码数,计算结果是否溢出?
x+yB=1B8 H
1110 1111 B 1011 1000B
② 若为带符号补码数
∵ CF=1,DF=1 OF=0 ∴ 不溢出 y+z = 3B H 不正确 不溢出
z+v = 0CC H 正确 溢出
∴ 不正确
+ 1100 1001B
① 若为无符号数
∵ CF=1
x+y = 0B8 H ① 不正确
x+z = 61 H
不正确
② 不溢出 不溢出
第三章 80X86微处理器
1.简述8086/8088CPU中BIU和EU的作用,并说明其并行工作过程。
答: (1) BIU的作用:计算20位的物理地址,并负责完成CPU与存储器或I/O端口之间的数据传送。
(2) EU的作用:执行指令,并为BIU提供所需的有效地址。
(3) 并行工作过程:当EU从指令队列中取出指令执行时,BIU将从内存中取出指令补充到指令队列中。这
样就实现了取指和执行指令的并行工作。
2.8086/8088CPU内部有哪些寄存器?其主要作用是什么?
答:8086/8088CPU内部共有14个寄存器,可分为4类:数据寄存器4个,地址寄存器4个,段寄存器4个和控制寄存器2个。其主要作用是:
(1) 数据寄存器:一般用来存放数据,但它们各自都有自己的特定用途。
AX(Accumulator)称为累加器。用该寄存器存放运算结果可使指令简化,提高指令的执行速度。此外,所有的I/
O指令都使用该寄存器与外设端口交换信息。
BX(Base)称为基址寄存器。用来存放操作数在内存中数据段内的偏移地址,
CX(Counter)称为计数器。在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序
的运行速度。
DX(Data)称为数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,
DX与AX一起存放一个双字长操作数,其中DX存放高16位数。
(2) 地址寄存器:一般用来存放段内的偏移地址。
SP(Stack Pointer)称为堆栈指针寄存器。在使用堆栈操作指令(PUSH或POP)对堆栈进行操作时,每执行一次
进栈或出栈操作,系统会自动将SP的内容减2或加2,以使其始终指向栈顶。
BP(Base Pointer)称为基址寄存器。作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作
数在堆栈段内的偏移地址。
SI(Source Index)称为源变址寄存器。SI存放源串在数据段内的偏移地址。
DI(Destination Index)称为目的变址寄存器。DI存放目的串在附加数据段内的偏移地址。 (3) 段寄存器:用于存放段地址
CS(Code Segment)称为代码段寄存器,用来存储程序当前使用的代码段的段地址。 CS的内容左移4位再加上指
令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址。
DS(Data Segment)称为数据段寄存器,用来存放程序当前使用的数据段的段地址。 DS的内容左移4位再加上按
指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址。
SS(Stack Segment)称为堆栈段寄存器,用来存放程序当前所使用的堆栈段的段地址。堆栈是存储器中开辟的按
“先进后出”原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场。 ES(Extra Segment)称为附加数据段寄存器,用来存放程序当前使用的附加数据段的段地址。附加数据段用来存放
字符串操作时的目的字符串。
(4) 控制寄存器
IP(Instmcdon Pointer)称为指令指针寄存器,用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能
直接访问IP。
FLAGS称为标志寄存器,它是一个16位的寄存器,但只用了其中9位,这9位包括(个状态标志位和3个控制标
志位。它用来反映算术运算和逻辑运算结果的一些特征,或用来控制CPU的某种操作。 3.8086/8088CPU中有哪些寄存器可用来指示操作数在存储器中某段内的偏移地址?
答:可用来指示段内偏移地址的寄存器共有6个:IP、SP、BP、BX、SI、DI
答:标志寄存器中的标志共有9个,分为两类:状态标志6个和控制标志3个。其作用是:
(1) 状态标志:用来反映算术和逻辑运算结果的一些特征。
4.8086/8088CPU中标志寄存器FLAGS有哪些标志位?它们的含义和作用如何?
CF(Carry Flag)—进位标志位。当进行加减运算时,若最高位发生进位或借位,则CF为1,否则为0。该标志位通
常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。
PF(Parity Flag)—奇偶标志位。当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。
AF(Auxiliary Flag)—辅助进位标志位。当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有
进位或借位,则AF为1,否则为0。
ZF(Zero Flag)—零标志位。若当前的运算结果为0,则ZF为1,否则为00 SF(Sign Flag)—符号标志位。当运算结果的最高位为1时,SF=1,否则为00
OF(Overflow Flag)—溢出标志位。当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为
0。该标志位通常用来判断带符号数运算结果是否溢出o
(2) 控制标志位:用来控制CPU的操作,由程序设置或清除。它们是:
TF(TrapFlag)—跟踪(陷阱)标志位。它是为测试程序的方便而设置的。若将TF置1,8086/8088CPU处于单
步工作方式,否则,将正常执行程序。
IP(Interrupt Flag)—中断允许标志位。它是用来控制可屏蔽中断的控制标志位。若用STI指令将IF置1,表示允许
CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;若用CLI指令将IP清0,则禁止CPU接受可屏蔽中断请求信号。IF的状态对非屏蔽中断及内部中断没有影响。
DF(DirectionFlag)—方向标志位。若用STD将DF置1,串操作按减地址方式进行,也就是说,从高地址开始,每
操作一次地址自动递减;若用CLD将DF清0,则串操作按增地址方式进行,即每操作一次地址自动递增。 5.8086/8088CPU的地址总线有多少位?其寻址范围是多少?
答:8086/8088地址总线有20根,寻址范围1MB
答: (1) 指令队列:采用“先进先出”原则,按顺序存放预执行指令的缓冲器称为指令队列。 (2) 指令队列的作用:存放EU将要执行的指令,使CPU的取指和执行指令能并行工作。
(3) 指令队列的长度:8086为6个字节,8088为4个字节。
6.什么叫指令队列?8086/8088CPU中指令队列有什么作用?其长度分别是多少?
7.Intel8086与8088有何区别?
答:8086与8088的区别有三处:
(1) 外部数据总线位数不同(即地址/数据分时复用引脚条数不同);
8086为16位:AD15~AD0 。 8088为 8位:AD7~AD0 。
8086有6个字节。当指令队列出现2个空字节时,BIU将取指补充。 8086有4个字节。当指令队列出现1个空字节时,BIU将取指补充。 ① 8086的28号引脚定义为M/IO(S2),8088定义为IO/M(S2) ② 8086的34号引脚定义为BHE/S7,8088定义为SS0/(HIGH)
(2) 内部指令队列缓冲器长度不同;
(3) 外部某些控制总线定义不同。
8.简述8086 CPU使用地址锁存信号ALE将地址A15~A0与数据D15~D0分开的工作原理。
答:在任何一个总线周期的T1状态,ALE均为高电平,以表示当前地址/数据复用线上的输出的是地址信息,在ALE由高变低的下降沿时把地址装入地址锁存器,而在T2、T3和T4状态,ALE均为低电平,以表示当前地址/数据复用线上的输出的是数据信息,此时通过数据收发器进行传送。 9.什么是逻辑地址?什么是物理地址?若已知逻辑地址为BA00:A800,试求物理地址。
答: 逻辑地址:由段地址和偏移地址表示的存储单元地址称为逻辑地址。
物理地址:CPU对存储器进行访问时实际所使用的20位地址称为物理地址。 若 逻辑地址为BA00H:A800H
则 物理地址=BA00H×10H+A800H=C4800H
10.简述堆栈指针寄存器SP的功能及堆栈的操作过程。
答: (1) SP的功能:指示进栈和出栈操作时的偏移地址。
(2) 堆栈的操作过程:进栈时,先将SP-2,再将数据压入堆栈(即先移后入);出栈时,先将数据弹出堆栈,再将SP+2(即先出后移)。
第四章 80X86 指令系统
1、 指出源操作数的寻址方式
⑴ MOV BX,2000H ⑶ MOV BX,[SI] ⑺ MUL BL
;立即数寻址
⑵ MOV BX,[2000H]
;直接寻址
;寄存器间接寻址 ⑷ MOV BX,[SI+2000H] ;寄存器相对寻址 ;寄存器寻址 ⑻ JMP BX ;端口间接寻址
;段内间接寻址 ;立即数寻址
⑸ MOV [BX+SI],AL ;寄存器寻址 ⑹ ADD AX,[BX+DI+80] ;基址变址相对寻址 ⑼ IN AL,DX
⑽ INC WORD PTR [BP+10H] ;寄存器相对寻址
⑾ MOV CL,LENGTH VAR ;立即数寻址 ⑿ MOV BL,OFFSET VAR1 (1) MOV DS,0100H (2) MOV BP,AL (3) XCHG AH,AL (4) OUT (5) MOV
310H,AL BX,[BX]
2、 指出下列指令是否正确
;错误。源操作数是立即数时,目的操作数不能时段寄存器 ;错误。操作数类型不一致
;错误。端口直接寻址的范围应在0~FFH之间 ;正确。 ;正确。
;正确。
(6) MOV (7) MOV (8) MOV (10) MOV (11) ADD
ES:[BX+DI] ,AX AX,[SI+DI]
;错误。存储器寻址中有效地址不能由两个变址寄存器组成
;错误。操作数类型不一致 ;正确。
;错误。用PTR 说明类型
;错误。堆栈指令的操作数不能是立即数 ;错误。两个操作数不能同时为存储器操作数 ;错误。操作数类型不一致
;错误。目的操作数不能为代码段寄存器 ;错误。需用PTR说明类型
;错误。端口间接寻址的寄存器只能是DX寄存器 ;错误。移位次数大于1时应该用CL寄存器
;错误。堆栈指令的操作数只能是字操作数(即16位操作数) ;(DS)×10H+(DI)
;(DS)×10H+(BX)+(DI)+5 ;(ES)×10H+(BX) ;(DS)×10H+1000H
SS:[BX+SI+100H],BX ;正确。 DX,DS:[BP] [SI],20H
(9) AND AX,BL
(12) MOV 30H,AL (13) PUSH 2000H
;错误。目的操作数不能为立即数
(14) MOV [SI],[2000H] (15) MOV SI,AL (16) ADD
(18) INC
(17) MOV CS,AX
[DI]
(19) OUT BX,AL (20) SHL BX,3 (22) POP AL (21) XCHG CX,DS
[2000H],20H
;错误。用PTR 说明类型
;错误。交换指令中不能出现段寄存器
3、 写出存储器操作数物理地址的计算表达式
(1) MOV AL,[DI]
(2) MOV AX,[BX+SI] (3) MOV 5[BX+DI],AL (5) SUB AX,[1000H]
;(DS)×10H+(BX)+(SI)
(4) ADD AL,ES:[BX]
(6) ADC AX,[BX+DI+2000H] ;(DS)×10H+(BX)+(DI)+2000H (7) MOV CX,[BP+SI] ;(SS)×10H+(BP)+(SI)
(8) INC BYTE PTR [DI]
;(DS)×10H+(DI)
4、 若(DS)=3000H,(BX)=2000H,(SI)=0100H,(ES)=4000H,计算下列存储器操作数的物理地址。
(1) (DS)×10H+(BX)=3000H×10H+2000H=32000H
(2) (DS)×10H+(BX)+(SI)+1000H=3000H×10H+2000H+0100H+1000H=33100 H (3) (DS)×10H+(BX)+(SI)=3000H×10H+2000H+0100H=32100 H (4) (ES)×10H+(BX)=4000H×10H+2000H=42000 H 5、若(CS)=E000H,说明代码段可寻址物理存储空间的范围。
∵ 最小物理地址为:(CS)×10H+0000H=E0000H 最大物理地址为:(CS)×10H+FFFFH=EFFFFH ∴ 代码段可寻址物理存储空间的范围是:E0000H~EFFFFH
PUSH AX PUSH BX POP AX
6、设(SP)=2000H,(AX)=3000H, (BX)=5000H,执行下列程序段后,(SP)=?,(AX)=?, (BX)=?
(SP)=1FFEH,(AX)=5000H, (BX)=5000H CF=?,OF=0,ZF=?
7、试比较SUB AL,09H与CMP AL,09H这两条指令的异同。若(AL)=08H,分别执行上述两条指令后,(AL)=?,
(1) 相同点:两条指令都能完成(AL)-09H的功能,并且都影响六个状态标志位;
不同点:SUB指令将运算结果回送到AL寄存器中,而CMP指令不回送。
;(AL)=FFH,CF=1,OF=0,ZF=0 ;(AL)=08H,CF=1,OF=0,ZF=0 ;
OF=0 SF=0 ZF=0 AF=0 PF=0 CF=0 OF=0 SF=1 ZF=0 AF=0 PF=1 CF=1
PF=0 CF=1
; ;
;(AL)=23H OF=0 SF=0 ZF=0 AF=1 ;
OF=1 SF=1 ZF=0 AF=0 PF=0 CF=1
AND
AH,0FH
(2) SUB AL,09H
CMP AL,09H
(1) MOV
ADD SUB ADD SUB (2) MOV (3) MOV (4) MOV
8、分别执行下列指令,试求AL的内容及各状态标志位的状态。
AL,19H AL,19H AL,5DH AL,0C6H AL,7EH
AL,61H ;(AL)=7AH AL,61H ;(AL)=B8H
AL,95H ;(AL)=E9H
9、用最少的指令,实现下述要求的功能。
(1) AH的高4位清零。 (2) AL的高4位去反。
XOR AH, 0F0H MOV CL,4 SHR MOV SHL
AL,CL CL,4 AL,CL
(3) AL的高4位移到低4位,高4位清0。 (4) AL的低4位移到高4位,低4位清0。
10、设(BX)=6D16H,(AX)=1100H,写出下列三条指令执行后,AX和BX寄存器中的内容。
MOV CL,06H ROL AX,CL SHR MOV ADD DAA XCHG ADC DAA
AL,CH AL,34H BX,CL CH,AH AL,AH
(AX)=4004 H
(BX)=01B4 H
11、设初值(AX)=0119H,执行下列程序段后,(AX)=?