[键入文字]
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