文档库

最新最全的文档下载
当前位置:文档库 > 第4章指令系统层习题参考解答

第4章指令系统层习题参考解答

1.什么是“程序可见”的寄存器?

程序可见寄存器是指在用户程序中用到的寄存器,它们由指令来指定。

2. 80x86微处理器的基本结构寄存器组包括那些寄存器?各有何用途?

基本结构寄存器组按用途分为通用寄存器、专用寄存器和段寄存器3类。

通用寄存器存放操作数或用作地址指针;专用寄存器有EIP和EFLAGS,分别存放将要执行的下一条指令的偏移地址和条件码标志、控制标志和系统标志;段寄存器存放段基址或段选择子。

3.80x86微处理器标志寄存器中各标志位有什么意义?

常用的7位:

CF进位标志: 在进行算术运算时,如最高位(对字操作是第15位,对字节操作是第7位)产生进位或借位时,则CF置1;否则置0。在移位类指令中,CF用来存放移出的代码(0或1)。

PF奇偶标志: 为机器中传送信息时可能产生的代码出错情况提供检验条件。 当操作结果的最低位字节中1的个数为偶数时置1,否则置0。

AF辅助进位标志: 在进行算术运算时,如低字节中低4位(第3位向第4位)产生进位或借位时,则AF置1;否则AF置0。

ZF零标志:如指令执行结果各位全为0时,则ZF置1;否则ZF置0。

SF符号标志:其值等于运算结果的最高位。 如果把指令执行结果看作带符号数,就是结果为负,SF置1;结果为正,SF置0。

OF溢出标志: 将参加算术运算的数看作带符号数,如运算结果超出补码表示数的范围N,即溢出时,则OF置1;否则OF置0。

DF方向标志: 用于串处理指令中控制处理信息的方向。 当DF位为1时,每次操作后使变址寄存器SI和DI减小;当DF位为0时,则使SI和DI增大,使串处理从低地址向高地址方向处理。

4.画出示意图,简述实模式下存储器寻址的过程。

第4章指令系统层习题参考解答

20位物理地址如下计算(CPU中自动完成):10H×段基址+偏移地址=物理地址

5. 画出示意图,简述保护模式下(无分页机制)存储器寻址的过程。

采用对用户程序透明的机制由选择子从描述子表中选择相应的描述子,得到欲访问段的段基址、段限等有关信息,再根据偏移地址访问目标存储单元。

第4章指令系统层习题参考解答

6. 比较实模式和保护模式下的逻辑地址的异同。

相同:逻辑地址均由存放于16位段寄存器的信息和偏移地址两部分组成。

不同:实模式下,段寄存器存放段基址,偏移地址16位;保护模式下,段寄存器存放段选择子,偏移地址32位

7. 保护模式下,段描述子表有几种?它们分别是什么?它们的作用又分别是什么?

共有三种描述子表:

全局描述子表(GDT) GDT中包含了操作系统和除中断服务程序所在段以外的各任务公用的描述子,通常包括了使用的代码段、数据段、TSS和系统中各个LDT所在段的描述子,一个系统只能有一个GDT。

局部描述子表(LDT) LDT用于存放各个任务私有的描述子,通常每个任务有一个独立LDT。

中断描述子表(IDT) IDT包含中断服务程序位置的描述子,最多256个。系统所使用的每种类型的中断在IDT中必须有一个描述子项,通过中断指令、外部中断和异常事件来访问。

8. 请写出一个Pentium 4的内存段的段描述子。该内存起始地址是03000000H,结束地址是05FFFFFFH;该内存段是一个用户程序的可写的数据段。

0310 9200 0000 2FFFH

9. 80386的段描述子中段基址为10000000H,段限为001FFH,计算在G=0和1两种情形下该段的起始地址和结束地址。

开始地址均是10000000H

结束地址: G=0 10000000H + 001FFH = 100001FFH

G=1 10000000H + 001FFFFFH = 101FFFFFH

10. 系统工作于实模式下,假定(DS)=2000H,(ES)=2100H,(SS)=1500H, (SI)=00A0H, (BX)=0100H,(BP)=0100H,试指出下列指令源操作数的寻址方式和物理地址:

① MOV AX,0BAH ② MOV AX,[100H]

③ MOV AX,[BX+SI] ④ MOV AX,ES:[BX]

⑤ MOV AX,[BP] ⑥ MOV AX,BP

⑦ MOV AX,[BX+5] ⑧ MOV AX,[BX+SI+5]

①立即寻址

②直接寻址,20100H

③基址变址,201A0H

④寄存器间接寻址,21100H

⑤寄存器间接寻址,20100H

⑥寄存器寻址

⑦寄存器相对寻址,20105H

⑧基址变址寻址,201A5H

11. 系统工作于实模式下,假定(EAX)=00001000H,(EBX)=00002000H,(DS)=0010H。试指出下列指令中内存操作数的寻址方式和物理地址:

① MOV ECX,[EAX+EBX] 基址变址寻址,00003100H

② MOV [EAX+2*EBX],CL 基址比例变址寻址,00005100H

③ MOV DH,[EBX+4*EAX+1000H] 基址比例变址寻址,00007100H

12. 写出把首地址为TABLE的字数组的第5个字送到DX寄存器的指令(或指令序列)。 要求使用以下几种寻址方式:

① 寄存器间接寻址

② 寄存器相对寻址

③ 基址变址寻址

①MOV DX, TABLE[8]

②MOV SI, 8

MOV DX,TABLE[SI]

③MOV BX, OFFSET TABLE

MOV SI, 8

MOV DX, [BX+SI]

13. 系统工作于实模式下,(SS)=0100H, (SP)=00FEH。试画出执行下列程序段后,堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址):

MOV AX,1234H

MOV

BX,5678H

AX

PUSH

BX

PUSH

POP CX

执行后,(SP)=00FCH, 如下图所示:

010FAH 78H

010FBH 56H

SP→ 010FCH 34H

010FDH 12H

14.比较两条指令MOV DI,[1000H]和LEA DI,[1000H]。

MOV DI, [1000H] 将数据段偏移地址为1000H的字单元数据传送到DI;LEA DI,[1000H] 是把偏移地址值1000H传送到DI。

15. 系统工作于实模式下,(DS)=091DH, (SS)=1E4AH, (AX)=1234H, (BX)=0024H, (CX)=5678H, (BP)=0024H,(SI)=0012H,(DI)=0032H,[09226H]=00F6H,[09228H]=1E40H,[1E4F6H]=091DH。 指出下列各指令或程序段的执行结果。

① MOV CL,[BX+20H][SI]

② MOV [BP][DI],CX

③ LEA BX,[BX+20H][SI]

MOV AX,[BX+2]

④ LDS SI,[BX][DI]

MOV [SI],BX

⑤ XCHG CX,[BX+32H]

XCHG [BX+20H][SI],AX

假设各程序段的执行结果相互独立:

① (CL) = 0F6H

② [09226H]=5678H

③ (BX)=0056H, (AX)=1E40H

④ (SI)=00F6H, (DS)=1E40H

⑤ (CX)= 00F6H, [09226H]=1234H, (AX)=5678H

16.阅读下列各程序段,在空格填上执行结果。

① MOV BL,85H

MOV AL,17H

ADD AL,BL

DAA

(AL)= 02 ,(BL)= 85 ,SF= 0 ,ZF= 0 ,PF= 0 ,

CF= 1 ,AF= 1 ,OF= 0

② MOV AX,BX

NOT AX

ADD AX,BX

INC AX

(AX)= 0000H ,CF= 0 ,ZF= 1

③ MOV AX,0FF60H

STC

MOV DX,96

XOR DH,0FFH

SBB AX,DX

(AX)= 0000 ,CF= 0

④ MOV BX,0FFFEH

MOV CL,2

SAR BX,CL

(BX)= 0FFFFH ,CF= 1

⑤ MOV BX,12FFH

MOV AX,0FFH

MOV CL,8

ROL BX,CL

AND BX,AX

CMP BX,AX

(BX)= 0012H , (AX)= 00FFH ,ZF= 0 ,CF= 1

⑥ MOV AL,90H

ADD AL,0E0H

RCL AL,1

(AL)= 0E1H ,CF= 0

17.按下列要求分别编制程序段:

① 把标志寄存器中的符号位标志SF置1;

PUSHF

MOV BP,SP

OR SS:[BP],80H

POPF

② 寄存器AL中的高低4位互换;

MOV CL,4

ROL AL,CL

③ 假设有3个字存储单元A、B、C,在不使用ADD和ADC指令的情况下,实现(A)+(B)

?C;

MOV AX,A

XADD AX,B

MOV C,AX

④ 把DX、AX中的32位无符号数右移2位;

SHRD AX,DX,2

⑤ 用一条指令把CX中的整数转变为奇数;

OR CX,1

⑥ 把AX中的第1、3位求反,其余各位保持不变;

XOR AX,0AH

⑦ 根据AX中有0的位对BX中的对应位求反,其余各位保持不变。

NOT AX

XOR BX, AX

18.编写程序段实现:不改变DH的内容,但清除其最左边3位的值,结果存入BH寄存器。

BH,

DH

MOV

1FH

BH,

AND

19. 试给出下列各指令序列执行后目的寄存器的内容:

① MOV BX,-12

MOVSX EBX,BX

(BX)=0FFF4H, (EBX)=0FFFFFFF4H

② MOV AH,7

MOVZX ECX,AH

(AH)=07H, (ECX)=00000007H

③ MOV AX,99H

MOVZX EBX,AX

(AX)=0099H,(EBX)=00000099H

20.假设使用8086指令集,下列各指令语法是否有错;若有错,指明是什么错误。

① MOV 35,BL

错 目标操作数不能为立即数

② XLAT

③ MOV AX,DL

错 源操作数与目标操作数类型不匹配

④ ADD [BX][BP],BX

错 应指定目标操作数为字操作数

⑤ POP CS

错 CS的值由系统确定,CS不能做POP指令的操作数

⑥ DIV AX,BL

错 被除数已隐含存放在AX

⑦ MUL 8

错 源操作数(乘数)不能为立即数

⑧ TEST [BP],DL

错 应指定目标操作数([BP])为字节操作数

⑨ SBB 15H,CL

错 目标操作数不能为立即数

⑩ MOV AL,1000H

错 源操作数与目标操作数类型不匹配

?LEA ES,[BX]

错 LEA指令不能使用段寄存器作目的操作数

?OR CH,CL

?SHL DI,2

错 移位次数大于1时,要用CL作计数器

?MOV DS,1234H

错 不能用立即数为段寄存器赋值

?DAA AL

错 不需操作数

?PUSH AL

错 操作数应为字操作数

?MOV SP,1000H

?MOV [SI],[DI]

错 应指定操作数类型

?NOT AL,BL

错 单操作数命令,不需源操作数BL

?DEC CX,1

错 单操作数命令,不需源操作数1