汇编语言复习资料4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《汇编语言》试卷
一、单选题(每题1分,共20分)
1.CPU在读取指令时,实际读到的是什么?()
A.伪指令和汇编指令所对应的字符串
B.用汇编语言写的源程序中的信息
C.由一系列二进制位组成的信息
D.汇编指令所对应的字符串
2.关于编译和连接,错误的说法是()。
A.编译产生的*.obj文件不能在操作系统下直接运行
B.连接产生的*.exe文件里面没有伪指令
C.编译可以检查出语法错误
D.连接可以检查出逻辑错误
3.CPU传递到地址总线上的地址是()。
A.逻辑地址
B.偏移地址
C.物理地址
D.段地址
4.一条将立即数赋值给寄存器的指令,在执行的前一刻,指令中的立即数在()中。
A.通用寄存器
B.端口
C.内存
D.CPU内部的指令缓冲器
5.关于8086CPU的几个寄存器,正确的说法是()。
A.可将BX当成两个8位寄存器,在偏移地址范围为0~255时,可以用“mov ax,[bl]”来实现将内存中的数据读到ax中
B.可以用“byte ptr”实现将SI当成两个8位寄存器使用
C.可将AX、BX、CX、DX当成8个8位寄存器使用
D.AX、ah、al是不同的寄存器,指令“add al,bl”的执行不会影响AX的值
6.对于16位结构的CPU,其应有的特征不包括()。
A.寄存器最大宽度是16位
B.寄存器与运算器之间的通路为16位
C.运算器一次处理的数据的最大宽度为16位
D.地址总线宽度是16位
7.下列与8086CPU寻址相关的说法,错误的是()。
A.8086CPU有20根地址总线,它的寻址能力为1MB
B.一个物理地址可以对应多个段地址与偏移地址
C.因为段寄存器是16位,所以一个段最大为64KB
D.CPU内部有一个能合成20位地址的地址加法器
8.8086CPU读取、执行指令的过程是()。
①从CS:IP指向的内存空间读取指令,将指令放入指令缓冲器
②执行指令,转到步骤①
③IP指向下一条指令
A.①、②
B.①、③、②
C.若指令是转移指令,过程为①、③、②,不是则过程为①、②
D.若指令是转移指令,过程为①、②,不是则过程为①、③、②
9.对于8086CPU,错误的指令是()。
A.mov ax,ds
B.push [bx]
C.inc [bx]
D.add bp,2
10.以下指令执行后,SP的值为()。
mov sp,0
push ss
A.0
B.0fffeh
C. 2
D.内存ss:0处的数据的值
11.关于循环结构,下列说法正确的是()。
A.实现内存地址连续的8个字型数据的累加,循环结构与顺序结构相比,代码占得空
间可以更少
B.循环结构与顺序结构相比,实现相同的功能可以执行更少的代码
C.只有使用loop指令才能实现循环结构
D.双层循环结构中的所有汇编指令被执行的次数相同
12.关于loop指令,错误的说法是()。
A.loop指令的跳转范围是-128~127
B.CX=10时,执行loop指令,IP的值一定减小
C.CX=0时,执行loop指令后,CX=0ffffh
D.CX=1时,执行loop指令,IP的值不变
13.对于8086CPU,下列关于段的说法,错误的是()。
A.一个段的起始地址必须是16的整数倍
B.在源程序中定义一个段,在运行程序时,CPU不会因此定义而知道这个段的大小。
C.一块内存空间可以既是代码段,又是数据段。
D.CPU将某个段用做栈,是因为assume指令将其与SS寄存器相关联
14.用debug的e命令向b810:0010处写入数据,接着用d命令查看,发现b810:0010处并没有刚刚写入的数据,其原因是()。
A.此处用于存储系统时间,一直在自动更新
B.debug存在延时,第二次查看即可看到用e命令写入的数据
C.此处处于ROM空间,不可以被改变
D.此处处于显存空间,当屏幕刷新时,此处的数据被更新了
15.()的功能与“mov al,’d’”的功能相同。
A. mov ax,’d’
B. mov al,’a’+3
C. mov al,’A’+3
D. or al,’d’
16.关于汇编语言中的指令,正确的说法是()。
A.汇编语言中的标号属于伪指令
B.汇编指令一定有对应的机器码
C.伪指令由编译器识别,编译器将其转化为对应的机器码
D.“+”一般会被编译成add指令
17.以下程序运行时,“sub ax,masm”执行后,ax的值是()。
assume cs:code
masm segment
dw 5 dup(‘a’,’b’,’c’)
masm ends
code segment
start: mov ax,code
sub ax,masm
mov ax,4c00h
int 21h
code ends
end start
A.15
B. 1
C. 2
D. 3
18.对于8086CPU的标志寄存器,下列说法错误的是()。
A.标志寄存器是16位的
B.无法通过一条汇编指令将标志寄存器的所有位都更新
C.这个寄存器中的有些位没有任何含义
D.cmp指令能够改变标志寄存器的值
19.关于中断处理程序,正确的说法是()。
A.BIOS中断例程固化在ROM中
B.DOS中断例程固化在ROM中
C.BIOS中断例程对应的中断向量表表项,只能读取,不能写入
D.中断处理程序不能够再调用别的中断处理程序
20.关于中断,错误的说法是()。
A.CPU执行int n指令时,不必通过数据总线读取中断类型码。
B.中断向量表一个表项的长度为4byte
C.外中断都可以被屏蔽
D.按下按键,或抬起按键都会触发9号中断
二、单选题(每题2分,共20分)
1.关于div指令,错误的说法是()。
A.执行div指令可能触发中断
B.div指令的除数既可以是16位,也可以是8位
C.div指令的被除数或存放在DX和AX中,或存放在AX中
D.div指令的运算结果有商和余数两部分
2.关于debug的使用,错误的说法是()。
A.Debug将程序加载到内存后,不执行任何命令前,IP的值一定为零
B.通过debug可以查看标志寄存器某些位的值
C.Debug将程序加载到内存后,不执行任何命令前,CX的值有可能是1024
D.T命令有可能一次执行一条以上的指令
3.关于0:200~0:2ff这块内存空间,正确的说法是()。
A.其为ROM空间
B.其为CMOS RAM空间
C.其是中断向量的存储空间,但可能是空闲的
D.其中存储着BIOS提供的开机引导程序
4.下列指令,一定不会使标志寄存器发生变化的是()。
A.int 21h
B.jmp ax
C.cmp ax,bx
D.sub ax,ax
5.关于串传送指令,错误的说法是()。
A.只用一条movsb指令,即可以将一个内存单元里的数据传送到另一个内存单元
B.movsb指令执行后,SI与DI的值可能会增加,也可能会减小
C.传送可以以字节为单位进行,也可以以字为单位进行
D.如果在执行“movsb”之前,CX的值是10,“movsb”将重复执行10次
6.用debug的d命令查看内存,结果如下,则下列指令执行后,CS和IP的值依次是()。
1000:0010 63 69 66 69 65 73 20 61……
mov ax,1000H
mov es,ax
jmp dword ptr es:[0012H]
A.6669 6573
B.6966 6965
C.7365 6966
D.1000 0012
7.对于标志寄存器相关位的描述,错误的是()。
A.mov al,1
add al,127
这两条指令执行后,OF=1,发生溢出;虽然逻辑结果为正,但SF却为1
B.mov al,1
add al,0ffh
这两条指令执行后,OF=0,CF=1
C.“inc ax”不影响标志寄存器的CF位
D.s: mov ax,8f00h
cmp ax,5
jb s
int 21h
这段程序执行过程中,SF一直为1
8.mov ax,4c00h
int 21h
这段程序的作用是()。
A.调用21h号中断例程的4c00h号功能
B.告诉编译器程序到此结束
C.返回DOS
D.前三个选项都不对
9.下列说法正确的是()。
A.iret指令可以描述为:
popf
pop cs
pop ip
B.mov al,1
add al,0ffh
上面两条指令执行后,(AX)=0
C.用debug进行调试时,用p命令可以一次执行多条汇编指令
D.call指令不能通过位移进行跳转
10.关于8086CPU提供的栈机制,错误的说法是()。
A.任意时刻,SS:SP指向栈顶
B.8086CPU只记录栈顶,一个程序运行时,其对栈空间的使用是否越界,需要程序设
计者考虑
C.用栈来暂存数据时,数据出栈的顺序一定要与入栈的相反
D.键盘缓冲区是一种特殊的栈
三、单选题(每题3分,共30分)
1.实现一个子程序,在屏幕上显示一个由六个“*”构成的如下图形:
*
* *
* * *
关于此子程序,错误的说法是()。
A.可以不使用循环结构
B.可以只用ret指令、栈指令和逻辑运算指令
C.可以只用一个寄存器存储“*”的ASCII码在显存中的偏移地址
D.写在指令中的寄存器不可以只是段寄存器
2.关于中断过程中CPU对TF、IF的设置,错误的说法是()。
A.若设置TF=1,则单步中断会不断地触发下去
B.设置IF=0,但仍可将中断处理程序设计成可以响应外中断的程序
C.若设置TF=1,将影响debug的运行
D.由于设置IF=0,在中断例程中无法用int指令调用可屏蔽中断的中断例程
3.使用直接定址表实现程序的作用不包括()。
A.不用进行比对,即可从一组数据中读出与某一给定数值相等的数据
B.用更少的存储空间实现功能相同的程序
C.用更少的指令实现功能相同的程序
D.使程序易于扩展
4.对于以下程序,正确的说法是()。
assume cs:code
code segment
mov ax,0
call s
db 40h
s:
mov ax,offset s
mov bp,sp
sub ax,[bp]
add ax,30h
pop bp
mov bp,0b800h
mov ds,bp
mov ds:[160*8+80],al
mov ax,4c00h
int 21h
code ends
end
A.这个程序无法正确返回
B.“pop bp”执行后,bp中存放着“mov ax,offset s”指令的偏移地址
C.这个程序可以在屏幕上显示出“1”这个字符
D.这个程序在屏幕上显示出什么信息,取决于40h对应的汇编指令是什么
5.关于程序运行,正确的说法是()。
A.程序加载到内存后,其所占的内存空间的大小,就是用户定义的段的大小的总和
B.一个程序在运行的过程中,其指令不一定在内存里
C.DOS给程序分配内存空间,在程序向DOS提出相关申请后进行
D.对一个程序进行N次加载,第一条指令的物理地址不变
6.程序中有stack段,如下。
在代码段中写一段程序,实现代码段中的程序开始运行后,
即将stack设置成一个初始状态为空的栈空间。
一定无法实现此功能的程序段是()。
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
A.mov ax,stack
mov ss,ax
mov sp,10h
B.mov ax,cs
mov ss,ax
mov sp,10h
C.mov ax,cs
sub ax,1
mov ss,ax
mov sp,10h
D.mov ax,ds
add ax,10h
mov ss,ax
mov sp,10h
E.前几个选项都不对。
7.关于标号,下列说法正确的是()。
A.地址标号和数据标号都可以在jmp后使用
B.后面带“:”的标号,用在代码段中是地址标号,用在数据段中是数据标号
C.用在代码段中的数据标号只表示内存单元的地址
D.在and与or指令中不可用地址标号
E.前几个选项都不对
8.下列8086CPU指令中,执行时读写内存次数最多的是()。
A.jmp ax
B.ret
C.int n
D.push [bx]
E.jmp word ptr [bx]和call 200
F.retf和call 0:200
9.下面程序的功能是()。
(注:小写字母的ASCII码=大写字母的ASCII码+32)
assume cs:code
code segment
db 'welCOMe'
start: mov ax,cs
mov ds,ax
mov bx,0
mov cx,7
s1: mov al,[bx]
and al,11011111b
mov [bx],al
inc bx
loop s1
mov ax,4c00h
int 21h
code ends
end start
A. 将“welCOMe”中的字符全变成“w”
B. 将“welCOMe”中的字符全变成大写
C. 将“welCOMe”中的字符全变成小写
D. 将“welCOMe”中的字符小写变成大写,大写变成小写
10.下面的程序统计1000:0处的32个字节型整数中,其值在[-64,-16]中的数据的个数,结果
存在DX中。
补全这个程序。
()
mov ax,1000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s: mov al,0
________
cmp al,16
________
cmp al,64
________
inc dx
s0: inc bx
loop s
A.or al,[bx]、jmp ax、shr al,1
B.add al,[bx]、jnb s0、jna s0
C.and al,[bx]、je s0、je s
D.sub al,[bx]、jb s0、ja s0
E.前几个选项都不对。
四、多选题(每题3分,共18分)
1.关于mul指令,正确的说法是()。
A.mul指令可以对8位数据进行乘法运算,也可以对16位数据进行乘法运算
B.mul指令的操作对象可以是内存字节单元
C.mul指令进行的是无符号数乘法运算
D.mul指令不影响CF位
2.编程时,我们经常将数据、代码、栈放入不同的段,有时还使用多个数据段,这样做的好处是()。
A.可以使程序更加清晰
B.可以使程序更加有条理
C.可以提高“rep movsb”指令的执行速度
D.有利于节约内存
3.“将标号a处的两个数据相乘,结果存放在标号b处”,以下程序中,能实现此功能的是()。
A.assume cs:code,ds:data
code segment
start:
mov ax,data
mov ds,ax
mov al,a
mul a[1]
mov b,ax
mov ax,4c00h
int 21h
code ends
data segment
a d
b 11,40
b dw 0
data ends
end start
B. assume cs:code,ds:data
data segment
a d
b 11,40
b dw 0
data ends
code segment
start:
mov ax,data
mov es,ax
mov al,a
mul a[1]
mov b,ax
mov ax,4c00h
int 21h
code ends
end start
C. assume cs:code
data segment
a d
b 11,40
b dw 0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov al,a
mul a[1]
mov b,ax
mov ax,4c00h
int 21h
code ends
end start
D. assume cs:code
code segment
a d
b 11,40
b dw 0
start:
mov al,a
mul a[1]
mov word ptr a[2],ax
mov ax,4c00h
int 21h
code ends
end start
4.执行“mov ss,ax”后,CPU不响应中断的原因是()。
A.若响应中断,CS、IP的值无法保存到内存中
B.为正确设置栈底提供时机
C.为将SS:SP指向正确的栈顶提供支持
D.若响应中断,CS、IP、标志寄存器的值可能会存储到错误的位置
5.下面对于段寄存器的叙述,错误的是()。
A.用“[reg]”的方式进行寻址,默认的段寄存器为DS
B.SS指向某个段,这个段则无法当做数据段使用
C.不能将一个立即数直接传送到段寄存器
D.CS不能通过传送指令改变
6.“检查DS:BX处的字节是否为正偶数,是则AL=0,否则AL=1”,可实现此功能的子程序是()。
A.func: mov al,ds:[bx]
and al,81h
cmp al,0
je s_ret
mov al,1
s_ret: ret
B.func: push cx
mov cx,ds:[bx]
sub ch,ch
and cl,81h
jcxz s1
mov cl,1
s1: mov al,cl
pop cx
ret
C.func: mov al,ds:[bx]
shr al,1
jb s1
mov al,0
s1: ret
D.func: mov al,ds:[bx]
and al,1
cmp al,0
je s1
inc al
s1: ret
五、程序研究(每题3分,共6分)
1. 对于以下子程序,正确的功能说明是()。
func:push ax
mov ax,1
shl ax,cl
or bx,ax
pop ax
ret
A、将一个16位数n的低8位的第x位(x取值范围是[0,7])置1,n存放在BX中,
X存放在CL中
B、将一个8位数n的第x位(x取值范围是[0,7])置1,n存放在BL中,X存放在CL
中
C、将一个8位数n的第x位(x取值范围是[0,7])置1,n存放在BX中,X存放在
CL中
D、将一个16位数n的第x位(x取值范围是[0,15])置1,n存放在BX中,X存放在
CL中
E、将一个16位数n的第x位(x取值范围是[0,15])置1,n存放在BX中,X存放在
CL的低4位中
2. 对于以下子程序,正确的说法是()。
func:
push bx
push cx
push ds
mov ax,0
next:
add al,[bx]
adc ah,0
inc bx
loop next
pop ds
pop cx
pop bx
iret
A.这个子程序可以实现计算某段内存空间中所有字节的和,结果放在AX中,DS:BX
为内存空间的首地址,CX为内存空间的长度
B.将这个子程序对应的机器码复制到从0:200起始的内存空间,作为7ch号中断的中
断处理程序。
之后如果调用int 7ch中断例程,运行loop next时会跳转到未知地址
C.此程序中的push ds和pop ds可以省略
D.此程序中的push cx和pop cx可以省略
E.此程序中的push bx和pop bx可以省略
六、项目分析(6分)
用汇编语言写一个贪吃蛇游戏,其功能说明如下:
能够通过不同的按键让蛇:①上下左右运动;②运动速度变化;③蛇身颜色变化。
蛇每经过固定的一段时间就移动一下, 用户可以在上一次移动完,新移动未开始的这段时间内,按下一个或多个改变方向的按键,但游戏只接收此时的前两次按键,蛇接下来将依据按键顺序进行移动(如当蛇正向左移动时,用户在其两次移动之间快速按下“上”、“右”键,其接下来将先向上运动,再向右运动)。
每当蛇吃到“食物”后,食物所在的位置暂时不变,随着蛇的运动,等到蛇尾与食物位置重合时,食物变成蛇的一部分,蛇身长度加1。
蛇身初始长度可调,蛇头碰到上(或左)边界时,下一移动时刻蛇头会从下(或右)边界重新出现,反之亦然。
蛇头碰到地图中的墙壁或者蛇身,游戏结束。
实现这个游戏,合理的设计是()。
A.定义一个数据段专门存储蛇的运动方向、运动速度、长度、颜色、蛇头位置等等
信息
B.改写int 9中断例程,读取与运动方向、速度、颜色相关的按键信息
C.用栈这种数据结构来存储与运动方向相关的按键信息
D.将蛇头运动、蛇尾更新、蛇变色、游戏结束判断、延时等功能设计成中断例程
E.将游戏的地图存储到数据段中,进入游戏时直接从其中读取地图并显示到屏幕上。