
1.PC机的最小信息单位是( )。
A : bit
B : 字节
C : 字长
D : 字
2.一个CPU的寻址能力是8KB,那么它的地址总线的宽度为( )位。
A : 8
B : 3
C : 12
D : 13
3.在Debug中,用“d 075A:110 11F”查看内存,结果如下:
075A:0110 B8 00 00 FF 07 00 B8 4C — CD 21 F3 69 20 8A 03 A1
那么,字型数据 00B8H对应的地址为( )。
A : 076A:11
B : 076A:16
C : 076B:0
D : 无法确定
4.Debug加载程序后,假设PSP的段地址为SA,偏移地址为0,则程序的起始地址是( )。
A : SA×16H
B : SA×16
C : (SA+16H)×16H
D : (SA+16)×16
5.8086CPU中,任意时刻,CPU将( )指向的内容当作指令来执行。
A : DS:SI
B : CS:IP
C : SS:SP
D : ES:DI
6.下列关于Debug的说法,错误的是( )。
A : R命令可以修改寄存器的内容。
B : E命令可以修改内存单元的内容。
C : T命令每次只执行一条指令。
D : D命令可以查看内存单元的内容。
7.源程序中有如下两个按先后顺序定义的段:
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
如果a段中“1” 这个数据的物理地址是X,则b段中“1”这个数据的物理地址是( )。
A : X
B : X+1
C : X+16
D : X+
8.对于8086CPU,错误的指令是( )。
A : mov ax,bx
B : mov ax,[bx]
C : mov ds,0
D : mov ax,0
9.对于8086CPU,正确的指令是( )。
A : inc cx,1
B : shl ax,2
C : and [bp],al
D : mov [bx][bp],ax
10.以下指令执行后,寄存器ax的值为( )。
mov ax, 0095h
mov ah, 95h
add al, ah
A : 9680H
B : 968AH
C : 962AH
D : 952AH
11.可以实现将ax的值增大2倍的是( )。
A : mul 2
B : mul ax,2
C : shl ax,1
D : shr ax,1
12.以下指令执行后,of和cf的值是:( )
mov ax,0
push ax
popf
mov ax,0ffffh
inc ax
A : of=0,cf=0
B : of=1,cf=0
C : of=0,cf=1
D : of=1,cf=1
13.CPU在执行“call标号” 时,相当于执行( )。
A :
push IP
jmp far ptr 标号
B :
push CS
push IP
jmp far ptr 标号
C :
push IP
jmp near ptr 标号
D :
push CS
push IP
jmp near ptr 标号
14.在8086PC中,CPU不可用指令读取( )中的数据。
A : 控制总线
B : 端口
C : 键盘缓冲区
D : 存储BIOS的ROM
15.下列关于中断的说法,正确的是( )。
A : 中断信息可以来自CPU内部和外部。
B : 中断类型码为一个字型数据,可以表示65536种中断信息的来源。
C : 键盘输入会引发内中断。
D : 对于8086CPU,中断向量表指定放到第一个单元的地址为0的大小为kB的内存空间中。
16.中断向量表中存放的是( )。
A : 中断类型码
B : 中断处理程序的入口地址
C : 中断处理程序
D : 断点地址
17.8086 CPU 最多可定位( )个不同的端口。
A : 1M
B : 1K
C : K
D : 32K
18.可屏蔽中断是否被CPU响应受( )的控制。
A : TF
B : IF
C : IF和TF
D : AF
19.使用call和ret指令,我们可以实现汇编语言编程中的模块化设计。以下描述中错误的是( )。
A : 可以用call和ret指令实现多个子程序。
B : 可以通过多个相互联系、功能的子程序来解决一个复杂的问题。
C : 对于通用的子程序,最好加上详细的注释。
D : 用汇编语言进行程序设计,子程序一定要用call和ret来实现。
20.PC机的启动过程是( )。
①、CPU加电,CS:IP指向FFFF:0。
②、进行操作系统引导。
③、执行JMP指令跳转到BIOS。
④、登记BIOS中断例程入口地址。
⑤、硬件检测。
A : ①②③④⑤
B : ①③⑤④②
C : ①③④⑤②
D : ①⑤③④②
二、单选题(每题2分,共40分)
1.下列关于汇编语言源程序的说法,错误的是( )
A : 一个汇编语言源程序从写出到执行需经过:编写.asm文件→将.asm文件编译为.obj文件→将.obj文件连接成.exe文件→.exe文件执行。
B : 在汇编语言源程序中,包含三种指令:汇编指令、伪指令、其他符号。
C : 在汇编语言源程序中,不由编译器执行的伪指令有对应的机器指令。
D : 在汇编语言源程序中,汇编指令是有对应机器码的指令,其所对应的机器指令由CPU执行。
2.关于8086CPU,下列说法错误的是( )。
A : 8086CPU是16位结构的CPU,其能够一次性处理、传输、暂时存储的信息的最大长度是16bit。
B : 8086CPU采用“段地址×16 + 偏移地址 = 物理地址”的方式生成存储单元的地址。
C : 执行push指令和pop指令时,8086CPU从SP中得到栈顶的地址。
D : 对于8086CPU,在编程时,可以将长度为1KB的一组地址连续,起始地址为32的倍数的内存单元当成栈空间来使用。
3.有以下几条指令(debug下的指令格式):
mov ax,1000
mov ss,ax
mov sp,0100
mov ax,5CCA
push ax
指令“push ax”执行后,sp的值和修改的内存单元的地址是( )。
A : 0100H,1000:0100
B : 00feH,1000:00fe
C : 0100,1000: 0100
D : 98,1000:98
4.给定段地址:101H,仅通过变化偏移地址寻址,8086CPU可以寻址到地址为( )的内存单元。
A : 0
B : 12000H
C : 1000H
D : 10FFH
5.mov ax,4c00h
Int 21h
CPU执行完这两条指令后,( )。
A : 返回到DOS
B : 返回到DEBUG
C : 返回到COMMOND
D : 前三个选项都不对
6.以下程序计算28,选一个数据补全程序。( )
assume cs:code
code segment
start:
mov ax,2
mov cx,_____
s:
add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end start
A : 8
B : 7
C : 4
D : 128
7.如下程序执行后,AX=( )。
assume cs:code
code segment
start:
mov ax,2
mov bx,2
mov cx,0
s:
add ax,bx
loop s
mov ax,4c00h
int 21h
code ends
end start
A : 2
B : 4
C : 0FFFEH
D : 0FFFCH
8.以下寻址方式中,属于相对基址变址寻址的是( )。
A : [bx+si+idata]
B : [bx+di]
C : [bp+si]
D : [bx]
9.执行下面的指令后,正确的结果是( )。
mov al,198
and al, 01010011B
or al,01010101B
A : al = 57
B : al = 57H
C : al = 42
D : al = 42H
10.需要使用DS的指令是( )。
A : mov ax,[bp]
B : inc word ptr [bx]
C : add al,cl
D : and [bp],al
11.对于8086CPU,错误的指令是( )。
A : mul cl
B : and dh,dl
C : push 45[di]
D : dec [bx]
12.关于int16h中断例程,下列说法正确的是( )。
A : 在int16h中断例程中,一定有设置IF=1的指令。
B : DOS提供了int16h中断例程。
C : int16h中断例程可从键盘缓冲区中读出数据。
D : 用int16h中断例程的0号功能可读取到扫描码。
13.关于mul指令和div指令,下列说法正确的是( )。
A : “mul dl”的另一个乘数在al中存放,运算结果存放在dx中。
B : mul 指令不会影响标志位。
C : “div dl”的被除数存放在ax中,商存放在al中,余数存放在dl中。
D : 执行div指令可能会引发中断。
14.不会影响标志位的指令是( )。
A : jmp lable1
B : cmp ax,bx
C : int 9h
D : inc ax
15.关于PC机键盘的处理过程,正确的说法是( )。
A : 接口芯片上的接收扫描码的寄存器的端口地址为80H。
B : 扫描码的长度为一个字。
C : 按下一个键产生的扫描码为通码,松开一个键产生的扫描码为断码。
D : 断码=通码+60H。
16.
data segment
dd 1234h
data ends
data段中的数据1234h在内存中的存储情况为( )。
A : 12 34 00 00
B : 34 12 00 00
C : 00 00 12 34
D : 00 00 34 12
17.从CMOS RAM中读取7号单元的内容,正确的指令是( )。
A : mov al,7
out 70H,al
in al,71H
B : in al,7
C : mov dx,7
in al,dx
D : out 71H,7
in al,70H
18.用Debug查看内存,情况如下:
0000:0000 60 10 00 F0 08 00 70 00—08 00 70 00 08 00 70 00
单步中断的中断处理程序的入口地址为:( )。
A : CS=F000,IP=1060
B : CS=1060,IP= F000
C : CS=0070,IP=0008
D : CS=0008,IP=0070
19.下列关于CPU响应中断的说法,错误的是( )。
A : CPU在执行完一条指令后,将检测IF,判断是否响应单步中断。
B : CPU在执行完当前指令后,就算是有中断信息,也不一定会响应。
C : 可屏蔽中断信息来自于CPU外部。可屏蔽中断的中断类型码通过数据总线送入CPU,而内中断的中断类型码在CPU内部产生。
D : 8086CPU响应不可屏蔽中断时不需要取中断类型码。
20.关于直接定址表,错误的说法是( )。
A : 直接定址表是用来标记数据地址的。
B : 直接定址表是一种有效合理地组织数据的技术。
C : 使用直接定址表,可以使程序的结构更加清晰。
D : 直接定址表可以存储在代码段中。
三、多选题(每题3分,共18分)
1.下列说法正确的是:( )。
A : 可以将标号当做数据来使用,标号所表示的地址可以是一个数据。
B : 应用assume将所用的数据标号所在的段和一个段寄存器联系起来。
C : 后面加“:”的地址标号,只能在代码段中使用。
D : 用assume将标号所在的段和一个段寄存器联系起来之后,段寄存器中就会存放这个段的段地址。
2.可以作为指令的访问对象写在指令中的是( )。
A : 内存单元
B : 端口
C : ASCII码字符
D : 硬盘上的扇区
3.以数据的源地址、目的地址和所传送的数据来看,哪些程序段可以说是“等效的”?( )。
A :
cld
rep movsb
B :
s: mov al,[si]
mov es:[di],al
inc si
inc di
loop s
C :
std
rep movsb
D :
s: mov al,es:[di]
mov [si],al
dec si
dec di
loop s
4.正确的说法是( ):
A : 对栈的操作不能越界,所以SP =0FFFFH时,不能执行POP指令。
B: 把10000H~10001FH的16个字的数据,正序或逆序存储到20000H~20001FH处,都至少可以采用三种方式:仅用PUSH进行数据的传送、仅用POP进行数据的传送、仅用MOV进行数据的传送。
C: 使用PUSH、POP、MOV,要使指令可以正确地操作,应至少注意数据的源地址、目的地址、操作长度等三个因素。
D: 通过栈指令将内存10000H到10001FH单元存储的16个字数据依次逆序,即10000H保存原来1001eH的内容,10002H保存原来1001cH的内容,…,10001eH保存原来10000H的内容,一定要借助寄存器或其它的内存单元。
5.对于BIOS和DOS,错误的说法是:( )。
A: cpu一加电从0:FFFF处开始执行,此处有一条跳转指令,cpu由之转去执行BIOS的硬件系统检测程序。
B: 在调用int 19h时,BIOS提供的中断例程 的入口地址已登记在中断向量表中。
C: BIOS将调用int 19h进行操作系统的引导。
D: command启动后,将开始建立用户工作环境,此时DOS将它所提供的中断例程装入内存,并建立相应的中断向量。
6.下列指令可读取或引发相应程序读取键盘输入信息的是( )。
A : in al,60h
B : int 9h
C : int 16h
D : sti
四、程序设计(每题3分,共6分)
1.
assume cs:code
data segment
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov bx,0
call count
int 21h
count:
mov cl,[si]
mov ch,0
ok: ret
code ends
end start
上面的程序执行时,count返回前,bx中的值为( )。
A : 3
B : 0EH
C : 0011H
D : 0014H
2.子程序func实现c=a*2^b,a和 b的取值范围都是[0,10],依次存储在一个栈单元的高位与低位字节中,返回值c存储在ax寄存器中。如果a、b取值超界,ax中的返回值为0ffffh。补全这个子程序。( )
func:
push bp
mov bp,sp
add bp,4
push cx
cmp byte ptr [bp].1,10
ja sret
cmp byte ptr [bp],10
ja sret
mov ____,0
mov ____,[bp].1
mov ____,0
mov ____,[bp]
_________
s:
shl ax,1
loop s
sret:
pop cx
pop bp
ret
A: ch、cl、ah、al、jcxz sret
B: cl、ch、al、ah、je sret
C: ah、al、ch、cl、jcxz sret
D: ax、al、cx、cl、add ax,ax
E: 前几个选项都不对
五、程序研究(每题5分,共10分)
1. 以下程序要实现:按下数字键后,提示“You entered a number.”,按其它键正常显示。对于这个程序,正确的观点是( )。
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,offset int9end-offset int9
cld
rep movsb
mov word ptr es:[9*4],204h
mov word ptr es:[9*4+2],0
push es:[9*4]
pop es:[200h]
push es:[9*4+2]
pop es:[202h]
mov ax,4c00h
int 21h
int9:
jmp short int9start
db "You entered a number."
int9start:
push ax
push bx
push cx
push es
in al,60h
cmp al,2
jb int9ret
cmp al,0bh
ja int9ret
mov ax,cs
mov ds,ax
mov si,206h
mov ax,0b800h
mov es,ax
mov di,12*160+36*2
mov cx,21
s: mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
int9ret:
pop es
pop cx
pop bx
pop ax
iret
int9end:
nop
code ends
end start
A : 此程序对其所提供的9号中断例程的中断向量的设置不正确,应将“mov word ptr es:[9*4],204h”改为“mov word ptr es:[9*4],offset int9”,将“mov word ptr es:[9*4+2],0”改为“mov word ptr es:[9*4+2],seg int9”。
B : 以此程序想要实现的目标看,此程序有两处错误:①新的中断例程未调用原来的9号中断例程;② 安装新的中断例程的程序在设置中断向量表的相应表项之前,未保存原9号中断例程的入口地址。
C : 此程序所提供的中断例程中,显示“You entered a number.”的程序段对此字符串的地址的设置有误。应用“mov si,offset int9+2”(“jmp short int9start”的机器码长度为2byte)对此字符串的偏移地址进行设置。
D : 此程序存在一个潜在问题,这个问题是:若在执行“mov word ptr es:[9*4],204h”和“mov word ptr es:[9*4+2],0”之间发生键盘中断,将转去一个错误的地址执行。要消除这个问题,应在“mov word ptr es:[9*4],204h”前设置IF=0,在“mov word ptr es:[9*4+2],0”后设置IF=1。
E : 前几个选项都不对。
2. 以下子程序统计一个段中,偏移地址a1到偏移地址a2的所有字节单元中,值为零的单元的个数n,si存放a1,di存放a2,ax、dx存放n,dx的值为0FFFFh则表示未提供正确的参数。应在fun_s处对其值进行保存,在fun_s3处对其值进行恢复的寄存器是( )。
fun_s:
……
mov bx,si
mov ax,0
mov dx,0
mov cx,0
fun_s1: mov cl,[bx]
inc cl
add ax,1
adc dx,0
……
ret
A、ax B、bx C、cx D、dx E、si F、di G、ds H、es
六、项目分析(6分)
实现一个经典游戏——俄罗斯方块,其功能包括:
1)由四个大小相同的方块组合成的不同形状的图块从屏幕的顶端开始,沿屏幕的中间下降;
2)控制图块的左右移动、向下加速移动、旋转;
3)消除落定图块所构成的整行,计算分数。
对于实现这个游戏,合理的考虑是( )。
A : 要想在dos中显示内容,则需向段地址为0b800h,偏移地址为0到0ffffh的内存空间写数据。
B : 可将四个方块的所有组合都定义到数据段。游戏运行时,可由随机数计算出描述这些图块的数据的偏移地址,用于相应的显示。
C : 写一个新的int 9h中断例程,处理与功能2的运行相关的键盘输入。
D : 也可以不改写int 9h中断例程,用int 16h中断例程的0号功能处理与功能2的运行相关的键盘输入。
E : 图块下降的速度可通过控制1s内下降的格数来实现。正常速度为1格/s,当按下↓键后,1s下降的格数递增。秒数信息可通过读取CMOS RAM中的数据来获取。
F : 判断是否构成整行、消除所构成的整行的程序段可做成子程序isrow、delrow。isrow可在图块已经不可继续向下移动后进行调用,在此之后可根据情况看是否调用delrow。
