汇编语言习题与答案

  • 格式:doc
  • 大小:71.50 KB
  • 文档页数:7

汇编语言习题与答案

一、填空题:把答案填在题中横线上。

1. 8位无符号整数的表示范围为0~255,写成16进制形式为00H~__________;8位有符号整数的表示范围为-128~+127,写成16进制形式为__________~__________。

2. 8086/8088分段管理存储空间,但每段容量最大不超过__________。

3. 逻辑地址为F000:100的存储单元,其物理地址是__________。

4. 用来指示堆栈栈顶的偏移地址的是__________寄存器。

5. 若要测试AL寄存器D4、D2、D0位是否都为0,则可使用__________指令语句(含操作数),以产生转移条件。这条指令执行后 将利用标志位__________实现转移。

6. 若定义:bdata db 2 dup(1,2,2dup(3),4),则dbata变量前5个单元从低地址到高地址的数据依次是__________。

7. 假设varw是一个16位变量,则指令“mov varw,ax”的目的操作数的寻址方式是__________。

二、选择题:在每小题给出的四个选项中,只有一项是符合题目要求的,请把所选项前的字母填在题后的括号内。

1.对汇编语言源程序进行翻译,形成OBJ文件的是

A.汇编程序 B.连接程序

C.编辑程序 D.调试程序 [ ]

2.下列各个8位二进制数的补码中,真值最大的是

A.10001000 B.11111111

C.00000000 D.00000001 [ ]

3.MASM语句中,表达常数不正确的形式是

A.01101001B B. A346H

C.’A’ D. 5600 [ ]

4.如果SS=600H,则说明堆栈段物理地址起始于

A.60H B.600H

C.6000H D.60000H [ ]

5.dw 50 dup(?)预留了存储空间的字节数是

A.25 B.50

C.100 D.200 [ ]

6.下列指令中有操作数在代码段中的是

A.mov ax,34h B.add ax,bx

C.inc word ptr [34h] D.cmp ax,[34h] [ ]

7.假设AL=5,要使得AL=0FAH,应执行的指令是

A. not al B.and al,0fh

C.xor al,0f0h D.or al,0fh [ ]

8.设置逻辑段应该采用的一对伪指令是

A.segment/ends B.start/end start

C.proc/endp D.macro/endm [ ]

9.条件转移指令JNE条件是

A.CF=0 B.CF=1 C.ZF=0 D.ZF=1 [ ]

10.逻辑移位指令SHL可用于

A.有符号数乘以2 B.有符号数除以2

C.无符号数乘以2 D.无符号数除以2 [ ]

11.执行“in al, dx”指令后,进入AL寄存器的数据来自

A.寄存器 B.存储器

C.立即数 D.外设端口 [ ]

12.将十进制数75以压缩BCD码送入AX,正确的指令是

A.mov ax,0075 B. mov ax,0705

C.mov ax,0075h D. mov ax,0705h [ ]

13.如下指令可将AX寄存器内容改变的是

A. cmp ax,bx B. test ax,bx

C. and ax,bx D. xchg ax,bx [ ]

14.设AH=10H,执行“neg ah”指令后,正确的结果是

A. AH=10H、CF=1 B. AH=F0H、CF=0

C. AH=10H、CF=0 D. AH=F0H、CF=1 [ ]

15.如下程序段:

again: mov es:[di],al

inc di

loop again

可用指令__________完成相同的功能。

A. rep movsb B. rep lodsb

C. rep stosb D. rep stosw [ ]

三、问答题:

1.说明8086/8088两类标志各自的作用是什么?

2.子程序文档说明主要包含那些内容?

3.试述mov ax,offset var和lea ax,var两条语句的异同点。

4.循环结构程序具有哪3个组成部分?各自的作用是什么?

5.已知DS=2000H、BX=100H、SI=2,存储单元[21200H]~[21203H]依次存放(十六进制)2A 4C B7 65,说明下列每条指令执行完后AX寄存器的内容。

① mov ax,[1200h]

② mov ax,[bx+1101h]

③ mov ax,[bx] [si+1100h]

四、程序阅读题:

1.执行如下程序段后,AL= 、ZF= 。

mov al,ah

not al

add al,ah

inc al

2.对于如下数据定义,给出各条指令执行后的结果。

fldb dw 0a24fh

table db 32h,52h,0a2h,215 array db ‘ABCD’

count equ $-array

① mov ax,fldb ;AL=

② mov cl,table[2] ;CL=

③ mov ch,array ;CH=

④ mov dx,count ;DX=

3.现有程序段如下,

test al,80h

jz onebl

mov ah,1

jmp done

onebl: mov ah,0ffh

done: …

在 情况下,该程序段执行结果 AH=1;在 情况下,该程序段执行结果 AH=FFH。

4.下列指令段的功能是在数组中查找数据3,请在空格中填入应有的内容。

org 0120h

data1 dw 0,1,2,3,4,5,6,7,8,9

count equ $-data1

mov di,offset data1

mov ax,3

cld

mov cx,

scasw

又,该命令序列执行后,CX= 、DI= 。

5.设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。

mov ax,X

imul Y

mov cx,ax

mov bx,dx

mov ax,Z

cwd

add cx,axadc bx,dx

sub cx,540

sbb bx,0

mov ax,V

cwd

sub ax.cx

sbb dx,bx

idiv X

五、程序设计题:

1.按照如下要求各编写一段语句序列:

① 定义字节变量unpak,其中以非压缩BCD码形式存放十进制数1234;

② 写出指令,将一个字节数据58H输出到端口43H;

③ 将DX、BX、AX中的48位数右移1位。

2.已知数据段变量datax、datay、dataz定义如下:

datax dw 5678h,89abh

datay dw 9ef0h,1234h

dataz dw 2 dup (?)

编写一个程序段,实现将datax和datay中双字数据相加,并存入dataz单元。

3.用一个程序段完成“REP MOVSW”指令的功能。

4.编写一个程序段,用空格符将字符区char-field填满,该字符区的字符数在count字节变量中保存。

5.写一个子程序,将AX的内容以二进制的形式显示到屏幕上。

6.请编写一个完整的汇编语言源程序。要求如下:

① 数据段定义一个月份变量,存放数据1~12之间的月份;它对应12个月份的英文缩写,JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV、DEC。

② 主程序将月份传送给子程序。

汇编语言参考答案

一、 填空题

1. 8位无符号整数的表示范围为0~255,写成十六进制形式为00H~ FFH ,8位有符号整数的表示范围为-128~+127,写成十六进制形式为 80H ~ 7FH 。

2. 8086/8088分段管理存储空间,但每段容量最大不超过 64KB 。

3. 逻辑地址为F000:100的存储单元,其物理地址是 F0100H 。

4. 用来指示堆栈栈顶的偏移地址的是 SP 寄存器。

5. 若要测试AL寄存器D4、D2、D0位是否都为0,则可使用 test al,00010101b 指令语句(含操作数),以产生转移条件。这条指令执行后 将利用标志位 ZF 实现转移。