1、汇编语言程序设计试题 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题 2 分,共 50 分)1.CPU 发出的访问存储器的地址是( A )A.物理地址 B.偏移地址 C.逻辑地址 D.段地址2.使计算机执行某种操作的命令是( B )A.伪指令 B.指令 C.标号 D.助记符3.若 AX=3500H,CX=56B8H,当 AND AX,CX 指令执行后,AX=(A)A. 1400H B. 77F8H C. 0000H D. 0FFFFH4.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍采用的是( C)
2、码。A. BCD 码 B.二进制码 C.ASCII 码 D.十六进制码5.下列关于 8086CPU 的工作原理的描述错误的是_C_ 。 A汇编程序员可以通过对各种寄存器中内容的修改实现对 CPU 的控制。 BCPU 在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。 C任意时刻,CS:IP 指向的内容即是此刻 CPU 正在执行的指令。 D传送指令能够更改所有通用寄存器的内容。6一个有 128 个字的数据区,它的起始地址为 12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是(C)A12CFBH B12B6BH C12C5BH D12BFEH7. 1
3、6 位结构的 CPU 不一定具备的特性是(D)。 A. 运算器一次最多可以处理 16 位的数据 B. 寄存器的最大宽度为 16 位 C. 寄存器和运算器之间的通路为 16 位 D. 地址总线为 16 根 8. 下列指令的书写正确的是(C) 。A push al B mov cs:0,ds:10 C pop si D mov ds:0,2 9在 DEBUG 工具中,显示寄存器内容的命令是( D ) 。A. G B. D C. T D. R10. 能够将 ax 中的内容送到内存 0000:0200H 处的指令序列是(D ) 。 A mov ds,0 mov bx,200h mov bx,ax B
4、mov ax,200h mov ds,ax mov bx,0 mov bx,ax C mov ax,20h mov ds,ax mov bx,0 mov bx,ax D mov bx,20h mov ds,bx mov bx,0 mov bx,ax11若栈顶的物理地址为 20100H,当执行完指令 PUSH AX 后,栈顶的物理地址为 (C) 。A. 20098H B. 20102H C. 200FEH D. 20100H12执行下列指令后 AL 寄存器中的值是(A)MOV AL, 0BFHOR AL, 0FCHA.0FFH B. 0ACH C. 0DCH D. 0BBH13. 已知(DS)=
5、2000H,(BX)=1256H,(SI)=528FH,则执行指令 JMP BX 后,IP 寄存器的内容是(A ) 。A. 1256H B. 2000H C. 3256H D. 528FH14在程序执行过程中, IP 寄存器中始终保存的是(B)A上一条指令的首地址 B下一条指令的首地址 C正在执行指令的首地址 D需计算有效地址后才能确定地址15.8088/8086 存储器分段,每个段不超过(D)A64K 个字 B32k 个字节 C1 兆个字节 D64k 个字节16.关于伪指令相关描述错误的是(B) 。 A伪指令没有对应的机器码,只用来指导汇编过程的。 B伪指令由编译器处理,在程序中可有可无。
6、C编译器要通过执行伪指令才能对源程序进行相应的处理操作,完成编译工作。 D伪指令是汇编语言源程序不可缺少的组成部分。 17.下列关于堆栈的说法,错误的是(D)A以 “先入后出”为原则。 B栈区最高地址单元的前一个单元为栈底。 C运行中 SP 寄存器动态跟踪栈顶位置。 D压栈和弹出都是以字节为单位。18.关于 8086/8088 微机系列,下列说法哪个是正确的( D)A一个存储单元由 16 个二进制位组成,简称字。 B当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C在内存中,可以无限分配段,且段的大小不受限制。 D段与段之间可以邻接,也可以重叠。19.1KB 的存储器有_B 个存储单
7、元?A1000 B. 1024 C. 512 D. 25620. 下列程序中,出现逻辑错误的是( B)。A assume cs:code code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code end B assume cs:code code segment mov ax,2 add ax,ax code ends end C aume cs:code code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code ends end D assume cs:code code se
8、gment mov ax,2 add ax,ax mov ax,4c00h int 21h code ends 21. 对于如下程序 assume cs:code code segment start:mov ax,code mov ds,ax mov ax,0020h mov es,ax mov bx,0 s:mov al,bx mov es:bx,al inc bx loop s mov ax,4c00h int 21h code ends end 下列说法正确的是(C) 。A指令 mov ax,code 改为 mov ax,start 对程序要实现的功能没有任何影响。 B程序不能通过编译
9、,因为在 loop 指令之前,没有对寄存器 cx 进行设定。 C程序实现的功能是将程序的所有指令复制到内存中以 0:200h 为起始地址的一段内存空间中。 D程序实现的功能是用内存中以 0:200h 为起始地址的一段内存空间中的数据将程序的所有指令覆盖。22.在 Intel8086 环境下,下列说法合理的是( C) 。A 汇编语言程序载入内存后处于 64K 空间以外的数据和指令将无法使用和执行。 B 一个数据段命名为 data,此标号代表这个数据段在内存中的起始地址。 C 如果载入的程序没有返回语句,那么当程序代码执行完毕,将继续读取后续内存空间存储的指令到 CPU 内部作为指令执行下去,直到
10、遇到返回指令为止。 D 用 DW 定义进行的数据,只能够以字为单位访问。23. 关于 8086、8088 微机系列,下列说法哪个是正确的(D ) 。A)一个存储单元由 16 个二进制组成,简称字。B)当存储一个字数据时,低字节放高地址位,高字节放低地址位。C)在内存空间中,可以无限分配段,且段得大小不受限制。D)段与段之间可以邻接,也可以重叠。24生成 EXE 之后用 Debug 加载后,查看寄存器内容如下: ds=0c3e es=0c3e ss=0b4e cs=0b4f ip=0000 程序的起始地址的段地址是(B) 。A 0c3e B 0c4e C 0c4f D 0 25. 在 Intel
11、8086 环境下,对指令 mov ax,bx描述错误的是(D) 。A 指令中,源操作数的段地址默认为 ds 中的内容 B 指令中,源操作数的偏移地址为 bx 中的内容 C 指令执行后,(al)=(ds)*16+(bx),(ah)=(ds)*16+(bx)+1) D 指令执行后,(ds)*16+(bx)=(al),(ds)*16+(bx)+1)=(ah) 二、填空题(每空 2 分,共 30 分)1.通常所说的计算机系统包括_硬件_和_软件_两大部分。2. 8086CPU 把 1MB 存储器分成若干逻辑段,段不能起始于任意地址,必须位于 _个字节的边界上。每个段最大为 _字节,8086cpu 中设
12、置了 4 个寄存器用来存放逻辑段的段地址,它们是:_、_、_、_。3.若要源程序从标号 START 开始执行,源程序结束伪指令的格式为 _END START_。4.8086 的地址总线有 20 根,寻址范围为_1M_字节。5.汇编语言源程序需经过_编译_程序汇编,_连接_程序连接才能生成可执行文件。6.十进制数 369 转换成 8 位二进制数为 01110001,转换成对应的十六进制数为_ _71H_。 7. mov cx,5 s: mov ax,bx add bx,2 loop s 上面指令序列,当指令第一次执行到 add bx,2 时 cx 的值_5_。三、阅读程序题(每题 5 分,共 1
13、0 分)1已知 21000h 处字单元的内容为 BE00H,对于如下程序:(1) mov ax,2000h (2) mov ds,ax (3) mov bx,1000h (4) mov ax,bx (5) inc bx (6) inc bx (7) mov bx,ax (8) inc bx (9) inc bx (10) mov bx,ax (11) inc bx (12) mov bx,al (13) inc bx (14) mov bx,al 程序执行后,内存中字单元 2000:1005 中的内容为_000H_。2. assume cs:code code segment start: m
14、ov ax,3 jmp s1 s: mov bx,0 mov ax,bx s1: mov cx,3 s2: add ax,2 loop s2 s3: mov ax,4c00h int 21h code ends end s 上面代码执行到 s3 处的指令之前, ax 的值是 _6_。3. mov dx,0 mov ax,1001 mov bx,100 div bx 以上四条指令执行完后,ax 值是_1_ 。 四、完善程序题(每题 5 分,共 10 分)1.完善下列程序:实现一次用内存 0:0-0:15 单元中的数据改写程序中定义的数据。assume cs:codesg codesg segme
15、nt dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h start:mov ax,0 mov ds,ax mov bx,0 mov cx,8 S:mov ax,ds:bxMov cs:bx,axadd bx,2 loop s mov ax,4c00h int 21h codesg ends end start2.完善下列程序:实现计算 234 与 567 的乘积。assume cs:code code segment mov ax,0mov cx,234s:add 567loop smov ax,4c00h int 21h code ends end