微机原理题库 下载本文

内容发布更新时间 : 2024/12/22 21:32:43星期一 下面是文章的全部内容请认真阅读。

[键入文字] [键入文字] [键入文字]

式。在这种工作方式下,CPU每执行完一条指令就自动地产生一次类型为1的内部中断,可以借此检查这条指令的执行情况。

例1:1278H+3469H

答:CF=0 AF=1 ZF=0 SF=0 OF=0 PF=1 例2:54E3H-27A0H

答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=0 例3:3881H+3597H

答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=1 例4:01E3H-01E3H

答:CF=0 AF=0 ZF=1 SF=0

7. 什么是堆栈?它有什么用途?堆栈指针的作用是什么?举例说明堆栈的操作。

答:堆栈是一个按照后进先出(LIFO)的原则存取数据的存储区域。堆栈的作用是为了在调用子程序(或转向中断服务程序)时,把断点及有关的寄存器、标志位及时正确地保存下来,并保证逐次正确返回。利用堆栈指针SP可以实现对栈区的自动管理。

例如:要把AX寄存器中的内容压入堆栈,用入栈指令PUSH AX(设SP原值为1000H),其操作过程如下所示:

第一步:先把SP-l→SP,然后把AH(高位字节)送入SP所指单元(即SP=1FFFH); 第二步:再次使SP-1→SP,把AL(低位字节)送至SP所指单元(此时SP=1FFEH);

数据出栈操作与入栈过程正相反:弹出时,先把AL内容弹出,然后修改SP+1→SP;再把AH内容弹出,再修改SP+1→SP。

8. 对于由8086/8088 CPU组成的系统,堆栈的位置如何确立?堆栈的首址(即SS中的值)是不是栈底?为什么?

答:8086/8088系统中堆栈的位置由SS和SP初始化后确立:其中(SS)*16决定了堆栈段起始单元的地址,即堆栈段首址;(SS)*16+(SP初值)决定了堆栈段最后一个单元的地址,即栈底;(SS)*16+(SP现值)决定了堆栈段当前可用单元的地址,即栈顶。

显然,堆栈首址并不是栈低。一般来说,在堆栈所在的内存区内,栈底为高地址端。堆栈初始化后,未压入数据时,栈底与栈顶是重合的。当堆栈压入数据后,栈顶地址总是小于栈底地址,位于低地址端。

9. Intel 8086与8088有何区别?

答:8086与8088的区别主要表现在以下几个方面:

第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。

第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。注意:8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。

第三、其他不同的引脚定义:(1)AD15~AD0,在8086中为地址/数据复用,而在8088中AD15~AD8改为A15~A8只作地址线用;(2)34、28号引脚定义不同。

10. 试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:

其中,进位标志CF用于判别无符号数运算是否超出数的表示范围,而溢出标志OF用于判别带符号数运算是否超出数的表示范围。

奇偶标志PF只能判断结果低8位中“1”的个数为奇数还是偶数。

11. 什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?

OF=0 PF=1

11

[键入文字] [键入文字] [键入文字]

答:逻辑地址由两个16位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;物理地址是一个20位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。

由于8086/8088CPU中的寄存器只有16位长,所以程序不能直接存放20位的物理地址,而必须借助逻辑地址,即用两个16位的寄存器来表示物理地址。他们之间的关系是:物理地址=段基址*16+偏移量;另外,一个物理地址可对应多个逻辑地址。

12. 什么是段基值?什么是位移量?它们之间有何联系?

答:段基址即段起始地址,它的高16位地址存放在段寄存器中,称之为段基值(低4位一般为0)。存储器单元所在的位置距离段起始地址的偏移量称之为位移量。程序中一个存储单元的实际地址(即物理地址)是由这两部分共同表示的。

13. 若CS为0A000H,试说明现行代码段可寻址物理空间的范围。

答: 因为8086系统中可寻址的最大逻辑段长度为64K,所以当CS为0A000H,即段基址为CS*16=0A0000H时,现行代码段可寻址物理空间的范围为:0A0000H ~ 0AFFFFH。

14. 设现行数据段位于存储器0B0000H~0BFFFFH单元,DS段寄存器内容为多少?

答: DS段寄存器内容为0B000H。

15. 8086/8088 CPU使用的存储器为什么要分段?怎么分段?

答:在8086/8088CPU中,ALU的运算是16位的,有关的地址寄存器如SP、IP以及BP、SI、DI等都是16位的,因而对地址的运算也只能是16位。也就是说对8086/8088而言,各种寻址方式下寻找操作数的范围被限制在64KB以内。而8086/8088有20条地址线,它的直接寻址能力为1MB。这就产生了一个矛盾,即16位的地址寄存器如何去寻址20位的存储器物理地址。解决这个问题是靠存储器分段实现的:将整个1MB的内存储器以64KB为单位分为若干段。寻址一个具体物理地址时,必须要由一个段地址(基地址)左移4位(即乘16)再加上由SP(或IP、BP、SI、DI)等寄存器之值表示的、可由CPU处理的16位偏移量来形成实际的20位物理地址;其中段地址(或基地址)是由8086/8088中的段寄存器形成的。

12

[键入文字] [键入文字] [键入文字]

第3章 汇编语言

一.填空题

1.指令MOV [BX+SI],AL中的目的操作数使用______段寄存器,属于______寻址方式。

解答:指令MOV [BX+SI],AL中的目的操作数使用___DS___段寄存器,属于__基址变址____寻址方式。

2. 指令MOV BX,NUM[SI]的源操作数使用的是______寻址方式,SUB AX,[BX+SI]使用的是______寻址方式。

解答:指令MOV BX,NUM[SI]源操作数使用了变址寄存器和一个位移量,因此是变址寻址方式。 指令SUB AX,[BX+SI]中源操作数指定的一个基址寄存器BX和一变址寄存器SI,因此属于基址变址寻址方式。

3.指令LEA BX,[BP+SI]的源操作数位于 ,执行后BX的内容是 。

解答:指令LEA BX,[BP+SI]的源操作数位于 堆栈段 ,执行后BX的内容是 BP和SI的内容之和 。

4. 堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,CX=1000H,问

(1)执行PUSH AX,PUSH BX后,SP= 。 (2)再执行PUSH CX,POPBX,POPAX后, SP= AX= ,BX= 解答:(1)执行PUSH AX

SP-2=1FFEH→SP,指针在位置1处,栈顶为AX的内容 执行PUSH BX

SP-2=1FFCH→SP,指针在位置2处,栈顶为BX的内容 (2)再执行PUSH CX,POPBX,POPAX后, 执行PUSH CX

SP-2=1FFAH→SP,指针在位置3处,栈顶为CX的内容 执行POP BX

将栈顶内容1000H弹出到BX中,SP+2=1FFCH→SP,指针在位置4

③1FFAH ②1FFCH④

??

00H 10H 00H

BX AX 处,BX=1000H 50H

执行POP AX ①1FFEH⑤ 00H 将栈顶内容5000H弹出到AX中,SP+2=1FFEH→SP,指针在位置5处,AX=5000H

本题的正确答案为:

(1)执行PUSH AX,PUSH BX后,SP= 1FFCH 。

(2)再执行PUSH CX,POPBX,POPAX后,

SP= 1FFEH AX= 5000H ,BX= 1000H

5.若(AX)=7531H,(BX)=42DAH,则下列指令段

SAHF

PUSH BX POPF

指令执行完毕后(AX)= ,(SF,ZF,CF,OF)=( , , , )。 解答:指令执行完毕后(AX)= 7531H ,(SF,ZF,CF,OF)=( 1 , 1 , 0 , 0 )

6. 已知AL=2EH,BL=6CH,执行指令ADD AL,BL之后,AL= ,BL= ,ZF= AF= OF= PF= CF= 。

解答:已知AL=2EH,BL=6CH,执行指令ADD AL,BL之后,AL= 9AH ,BL= 6CH ,ZF= 0 AF= 1 OF= 1 PF= 1 CF= 0 。

2000H

30H ??

13

[键入文字]

[键入文字] [键入文字]

7. 对两个无符号8位二进制数进行加法运算后,结果为0EH,且标志位CF=1,OF=1,SF=0,其结果应为十进制数 。

解答: CPU对两个无符号8位二进制数进行加法运算后,结果为0EH,且标志位CF=1,OF=1,SF=0,其结果应为十进制数 270 。

8. 设(AL)=10100000B,则执行NEG AL后,(AL)= , 设(AL)=10000000B,则执行NEG AL后,(AL)= 。

解答:基址变址寻址在计算机中的减法运算可以将减数求补,

(AL)=10100000B是一个负数,求它的真值,就对其求补 (AL)=10100000B=-1100000B=-60H

执行NEG AL后,(AL)= 01100000B=60H

9.已知:(AL)=7AH,题(1),(2)相互独立,求AL的值。

(1)SUB AL,20H (AL)=( ) (2)CMP AL,20H (AL)=( ) 解答: (1)SUB AL,20H

这条是减法指令,7AH-20H=5AH,将结果回送到AL中 因此(AL)=5AH (2)CMP AL,20H

这是比较指令,将目的操作数与源操作数相减,但不送回结果,只根据结果置标志位,即(DST) -(SRC)。指令执行后,两个操作数均不发生变化。因此(AL)=7AH

10.设DS=1000H、ES=2000H、SS=3000H、SI=00C0H、DI=0170H、BX=01B0H、AX=5657H,(10370H)=3AH,(10371H)=67H数据段中的变量NUM的偏移地址值为0050H。

①求下条指令源操作数的物理地址为 ADD AX ,NUM[BX][DI]

②指令执行完成后OF= ,CF=

解答:①ADD AX ,NUM[BX][DI]的源操作数是相对的基址变址寻址,处于数据段中,有效地址为: EA=0050H+01B0H+0170H=0370H PA=DS×10H+EA=10370H

源操作数为10370H单元和10371H单元的内容=673AH

②指令执行完成后,AX=673AH+5657H=0BD91H,OF=1(有溢出),CF=0(无进位)

11. 将DL中的内容循环右移,已知移位前CL=9,要使其移位前后内容保持不变,应选用的指令是 。

解答:将DL中的内容循环右移,已知移位前CL=9,要使其移位前后内容保持不变,应选用的指令是 RCL或RCR 。

12.串操作指令的两个隐含的指针寄存器是 。

解答:串操作指令的两个隐含的指针寄存器是 SI和DI寄存器 。

13. 指令REP MOVSB重复执行的条件为 。

解答:指令REP MOVSB重复执行的条件为 CX≠0 。

14. 串操作指令在内存中可以实现信息串的搬家,如果DS=ES且SI>DI,不能引起信息串的覆盖,应设置 。

14

[键入文字] [键入文字] [键入文字]

解答:串操作指令在内存中可以实现信息串的搬家,如果DS=ES且SI>DI,不能引起信息串的覆盖,应设置 DF=0 。

15. 将下列程序补充完整:程序的功能是在数据段ADDR1地址处有200个字节,要传送到数据段地址ADDR2处。

MOV AX,SEG ADDR1 MOV DS,AX MOV ES, MOV SI, MOV DI,OFFSET ADDR2 MOV ,200 CLD REP

解答:在存储器中实现信息块的搬家,使用重复前缀,必须先给CX赋值重复的次数。如果信息块的长度是多少个字节,用MOVSB传送时,则将此字节数赋给CX作重复次数;若用MOVSW传送时,则将此字节数÷2赋给CX作重复次数。程序要求200个字节搬移,指令中使用的重复次数为200,由此使用REP MOVSB指令,完整的程序如下:

MOV AX,SEG ADDR1 MOV DS,AX MOV ES, AX MOV SI, OFFSET ADDR1 MOV DI,OFFSET ADDR2 MOV CX ,200 CLD

REP MOVSB

16. 若指令JMP ADDR1的机器码为E93512H,此指令的CS=1500H,IP=2400H,则目标ADDR1与本指令之间的位移量为 ,执行本指令时,IP的当前值为 ,本指令执行后,CPU转移至CS:IP为 。

解答: JMP指令是无条件转移指令,JMP ADDR1的机器码为E93512H,这是三字节指令,E9H表示操作码,8086系统中,高地址存放的是高字节,低地址则是低字节,因此1235H是操作数,表示本指令与ADDR1之间的位移量为1235H。

该指令是三字节指令,执行指令时,当前IP=2400H+3=2403H。由目标偏移地址=当前IP值+指令中的位移量=2403H+1235H=3638H。因此,执行该指令后,CPU转移至1500H:3638H处。

本题的正确答案为:若指令JMP ADDR1的机器码为E93512H,此指令的CS=1500H,IP=2400H,则目标ADDR1与本指令之间的位移量为 1235H ,执行本指令时,IP的当前值为 2403H ,本指令执行后,CPU转移至CS:IP为 1500H:3638H 。

17. 阅读程序并补充完整:以TAB为首地址的100个ASCII码字符添加奇偶校验位(bit7),使每个字节中的“1”的个数为偶数,再顺序输出到10H号端口。

MOV SI,OFFSET TAB MOV CX, ① L2: MOV AL,[SI]

AND AL, ② ③ L1

15