微机原理题库 下载本文

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

[键入文字]

OR AL, ④

L1: OUT 10H, AL

INC ⑤ LOOP L2

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

解答:传送类指令不影响标志位,可以使用AND AL,AL或AND AL,0FFH指令,它对AL的内容无影响,但影响标志位。为使每个字节中的“1”的个数为偶数,,用使用进行JP条件判断,如果PF=1,则转到L2出,否则在最高位加1,可凑成偶数。完整的程序如下:

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

AND AL, 0FFH 或AL JP L1

OR AL, 80H

L1: OUT 10,HAL

INC SI LOOP L2

18. 设AX=8000H,BX=0FFFFH,执行CMP AX,BX后,写出两条能引起转移的条件转移指令 ① 、 ② 。

解答:AX=8000H,BX=0FFFFH,执行CMP AX,BX后CF=1(有借位),OF=0(没有溢出),ZF=0(结果不为0),SF=1(结果为负数,最高位为1),PF=0(第8位有1个1)。

因此能引起只要的条件指令有JC、JNO、JNZ等。

本题的正确答案为:设AX=8000H,BX=0FFFFH,执行CMP AX,BX后,写出两条能引起转移的条件转移指令 JC 、 JNZ 。

19. 汇编语言的调试过程如下:建立______以为扩展名的源文件;生成以______为扩展名的目标文件;生成以______为扩展名的可执行文件;使用DYBUG调试程序,调试可执行目标程序。

解答:汇编语言的调试过程如下:建立 .ASM 以为扩展名的源文件;生成以 .OBJ 为扩展名的目标文件;生成以 .EXE 为扩展名的可执行文件;使用DYBUG调试程序,调试可执行目标程序。

20. 宏汇编语言程序被汇编时,_____语句产生代码指令,______语句不产生代码指令, ______语句可能产生也可能不产生代码指令。

解答:宏汇编语言程序被汇编时, 指令性 语句产生代码指令, 伪指令 语句不产生代码指令, 宏指令 语句可能产生也可能不产生代码指令。

21. 已知VAR1是字变量,指令MOV AX,VAR1的功能是将 送到AX中;指令MOV AX,OFFSET VAR1的是将 送到AX,其功能和指令 AX,VAR1是相同的。

解答:已知VAR1是字变量,指令MOV AX,VAR1的功能是将 VAR1的内容 送到AX中;指令MOV AX,OFFSET VAR1的是将 VAR1的偏移量 送到AX,其功能和指令 LEA AX,VAR1是相同的。

22.假设VDT1和VDT2为字变量,TAL1和TAL2为标号,说明下列指令是否正确,说明其寻址方式;若有错误指出错误所在。

(1)JMP VDT1

(2)JMP NEAR TAL1 (3)JNZ VDT2 (4)JE TAL2

16

[键入文字]

(5)JMP FAR PTR TAL1 (6)JMP FAL1[SI] 解答:(1)JMP VDT1

非法指令,跳转指令应为标号不能是变量,VDT1是变量 (2)JMP NEAR TAL1

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

非法指令,标号的类型属性指在转移指令中标号可转移的距离,也称距离属性。类型NEAR,表示此标号只能实现本代码段内转移或调用;类型FAR,表示可以作为其它代码段中的目标地址,实现段间转移或调用。使用时,在属性后加PTR,应该改为:JMP NEAR PTR TAL1

(3)JNZ VDT2

非法指令,跳转指令应为标号不能是变量,VDT2是变量 (4)JE TAL2

合法指令。

(5)JMP FAR PTR TAL1 合法指令

(6)JMP FAL1[SI]

非法指令,FAL1为标号,表示指令语言的符号地址,SI是源变址寄存器,它存放的是地址。这条指令的错误之处在于两个地址表达式不能相加。

二.选择题

1.寻址方式指出了操作数的位置,一般来说( D )。

A、立即寻址给出了操作数地址;

B、寄存器直接寻址的操作数在寄存器内,而指令给出了存储器; C、直接寻址直接给出了操作数本身;

D、寄存器直接寻址的操作数包含在寄存器内中,由指令指定寄存器的名称。

2. 寄存器寻址方式中,操作数在( A )中。

A、通用寄存器 B、堆栈

C、内存单元 D、段寄存器

3.寄存器间接寻址方式中,操作数在( C)中。

A、通用寄存器 B、代码段

C、内存单元 D、段寄存器

4. 8088变址寻址方式中,操作数的物理地址等于( B )

A、段寄存器左移四位加上变址寄存器的内容;

B、段寄存器左移四位加上变址寄存器的内容再加给定的偏移量; C、段寄存器左移四位加上变址寄存器的内容再加基址寄存器内容; D、段寄存器左移四位加上基址寄存器的内容再加给定的偏移量;

5. 下列指令中非法指令是( B )

A.MOV [SI+BX],AX B.MOV CL,280 C.MOV [0260H],2346H D.MOV BX,[BX]

6.下列指令中,正确的是( D )

A、 MOV AL, 1000 B、MOV 100, AL C、 MOV AL, 100H D、MOV AL, 100 7. 在指令ADD AX,00H执行后,CPU状态标志位ZF的取值为( C ) a.为0 b.为1 c. 不确定 d. 没有影响

8. . 8086CPU在进行无符号数比较时,是根据( C )标志来判别大小的。

17

[键入文字]

A.CF和OF B.CF和SF C.CF和ZF D.OF和ZF

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

9. 设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为(B )。 A、OF=1,CF=0 B、OF=1,CF=1 C、OF=0,CF=0 D、OF=0,CF=1

10. 下面指令中影响状态标志位CF的指令是( D )。

A、INC AX; B、DEC AX; C、NOT AX; D、NEG AX

11. 已知AL=A8H,BL=62H,执行AND AL,BL指令后,AL中的数为(B ) A.32 B.20H C.00H D.+20

12. AX中有一负数,欲求其绝对值,若该数为补码,则用指令 ;若该数为原码,则用指令 。

解答:AX中有一负数,欲求其绝对值,若该数为补码,则用指令 NEG AX ;若该数为原码,则用指令 AND AX,7FFFH 。

13. 以下可以使寄存器AX和CF同时清零的指令为( A )

A.SUB AX,AX B.XCHG AX,BX C.PUSH AX D.XOR AX,BX

14. 完成将累加器AL清零,并将进位标志CF清零,下面错误的指令是( A )。 A、MOV AL,00H B、AND AL,00H C、XOR AL,AL D、SUB AL,AL

15. 假设AL=3,要使得AL=0CH,应执行的指令是( C )

A、NOT AL B、AND AL,0FH C、XOR AL,0FH D、OR AL,0FH

16. 测试BL寄存器内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的方法是( B )。 A、TEST BL,4FH JZ NEXT B、XOR BL,4FH JZ NEXT C、AND BL,4FH JZ NEXT D、OR BL,4FH JZ NEXT

17. 下面指令序列测试BH中的数是否为奇数,若为奇数则转移至K1处,横线处的指令应为( )。 TEST BH,01H K1 A、JNE B、JZ C、JNP D、JC

解答:TEST BH,01H指令执行结束后,如果BH为奇数,其“与”后的结果都为最低位为1,则ZF=0,那么ZF=0则转移到K1处,使用的指令应该为JNZ/JNE。正确答案为A。

18. 执行INT n指令或响应中断时,CPU完成的操作次序是( A ) A、FLAGS寄存器(FR)先入栈,其次CS,最后IP B、CS在先,其次IP,最后FR入栈 C、FR在先,其后依次是 IP,CS D、IP在先,其次CS,最后FR

18

[键入文字]

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

19. 用汇编语言编写的源程序,其后缀名为( );其可执行程序的后缀名为( )。

A、exe B、obj C、asm D、c

解答:用汇编语言编写的源程序,其后缀名为(.asm );其可执行程序的后缀名为(.exe ),选择C、A。

20. 下列描述正确的是 B 。

A.汇编语言源程序可发直接运行

B.汇编语言属低级语言

C.汇编语言是汇编语言编写的程序,运行速度高,阅读方便,属于面向用户的程序语言 D.汇编语言可以在可以移植。

21. 列伪指令哪些是正确的: C

A. ERR1:DW 99 B. ERR2 DB 25×60 C. COUNT EQU 20 D. ONE DB ONE

三.判断题

1.是非判定题:立即数寻址方式的操作数是在代码段中的,因此在执行指令的过程中也要执行总线周期。(f)

2. 8086指令系统寻址方式中,直接寻址直接给出了操作数本身。(f)

3. 立即寻址方式的操作数一定放在代码段中,而直接寻址方式的操作数一定放在数据段中。( f )

4.判断下列指令是否正确?

(1)ADD AL,BL

(2)ADD DS,CX (3)ADD 〔SI〕,〔BP+100H〕 (4)ADD 〔BX〕,AX

(5)ADD AX,CL 解答:(1)ADD AL,BL ;合法指令,源操作数和目的操作数都是8位寄存器 (2)ADD DS,CX ;非法指令,目的操作数不能是段寄存器 (3)ADD 〔SI〕,〔BP+100H〕 ;非法指令,源操作数和目的操作数都是存储区操作数

(4)ADD 〔BX〕,AX ;合法指令,源操作数是寄存器,目的操作数是存储器操作数 (5)ADD AX,CL ;非法指令,源操作数和目的操作数类型不匹配

5. CPU用指令SUB AX,AX可以是零标志位置位,进位标志清零。( t )

6. x与Y进行异或运算后再与Y的反进行异或运算,结果是求x的反。(t )

四.编程题

1. 对数据段中4300H单元内的8位带符号数判断,若为正数,加1放回原单元;为负数,则减1放回原单元,编写程序。

解答: MOV AL,[4300H]

ADD AL,0 JNS POSI INC AL

19

[键入文字]

MOV [4300H],AL JMP EXIT

POSI: DEC AL

MOV [4300H],AL

EXIT: HLT

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

2.编写程序:给1A000H开始的256个内存单元均减去1,若发现某个单元减为0则立即退出循环,其后的单元不再减1。

解答:1A000H是物理地址,我们可以设DS=1A00H,偏移地址则为0。程序如下:

MOV AX,1A00H

MOV DS,AX ;给段寄存器DS赋值1A00H MOV DI,0 ;DI指向内存数据区

MOV CX,256 ;共循环256次

GOON: DEC BYTE PTR[DI] ;由DI指向的内存单元的内容减1

INC DI ;指针加1,指向下一个单元 CMP BYTE PTR[DI-1],0 ;上一个单元的内容和0进行比较

LOOPNZ GOON ;不为0,则继续转向GOON处,同时CX内容自动

减1

HLT ;为0,退出循环

3.编程实现将存储单元BLOCK中的N个字节的数据按正数、负数分开,分别送到两个缓冲区PLUS_DATA和MINUS_DATA。

解答:设置三个指针,SI指向BLOCK存储单元,DI指向PLUS_DATA存储区,BX指向MINUS_DATA存储区。在程序中使用串操作指令,设置传送方向从低到高即CLD。先从BLOCK中取一个字节,用测试指令TEST AL,80H指令测试其最高位,再用JZ判断正负,正数转到PLUS_DATA数据区,负数转到MINUS_DATA数据区。程序如下:

LEA SI,BLOCK ;S指向内存数据区 LEA DI,PLUS_DATA ;DI指向存放正数的缓冲区 LEA BX,MINUS_DATA ;BX指向存放负数的缓冲区 CLD ;由低到高 MOV CX,N ;置循环次数

AGAIN: LODSB ;从DS:SI(内存数据区)取一个字节到AL中

TEST AL,80H ;测试AL中的最高位

JNZ MIUS ;若ZF=0,表示最高位为1是负数,转移到MIUS

处理

STOSB ;为正数,将AL中的内容存到ES:DI处,修改指

针DI

JMP NEXT_N ;转下一个

MIUS: XCHG BX,DI ;BX与DI交换,是DI指向存负数的缓冲区

STOSB ;存负数,同时修改指针DI XCHG BX,DI ;将修改后的指针与BX交换

NEXT_N: LOOP AGAIN ;未完成,继续

4.在8000H开始的长度为1000字节的字符串中查找‘S’,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。

20