汇编语言习题与答案
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
sbb dx,bx
idiv X
五、程序设计题:
1.按照如下要求各编写一段语句序列:
① 定义字节变量unpak,其中以非压缩BCD码形式存放十进制数1234;
mov es:[di],ax
add si,2 ; sub si,2
add di,2 ; sub di,2
loop again
pop ax
4. mov cl,count
mov ch,0
mov di,offset char-field
cld
mov al,’ ’
rep stowb
5. bdisp proc
汇编语言习题与答案
一、填空题:把答案填在题中横线上。
1.8位无符号整数的表示范围为0~255,写成16进制形式为00H~__________;8位有符号整数的表示范围为-128~+127,写成16进制形式为__________~__________。
2.8086/8088分段管理存储空间,但每段容量最大不超过__________。
9.条件转移指令JNE条件是
=0=1
=0=1[ ]
10.逻辑移位指令SHL可用于
A.有符号数乘以2B.有符号数除以2
C.无符号数乘以2 D.无符号数除以2 [ ]
11.执行“in al, dx”指令后,进入AL寄存器的数据来自
A.寄存器 B.存储器
C.立即数D.外设端口 [ ]
12.将十进制数75以压缩BCD码送入AX,正确的指令是
int 21h
inc bx
loop again
mov ax,4c00h
int 21h;程序结束
;子程序:采用寄存器传递入口参数和出口参数
msch proc
push si
dec al
xor ah,ah
mov si,ax
shl ax,1
add si,ax;月份乘以3作为索引
mov bx,month[si];因为每个英文缩写都是3个字符
5.计算公式:[V-(X×Y+Z-540)]÷X计算结果:商存在AX中,余数存在DX中。
五、程序设计题
1.① 定义字节变量unpak,其中以非压缩BCD码形式存放十进制数1234;
unpak db 4,3,2,1
② 写出指令,将一个字节数据58H输出到端口43H;
mov al,58h
out 43h,al
7. 假设varw是一个16位变量,则指令“mov varw,ax”的目的操作数的寻址方式是存储器直接寻址方式。
二、选择题
三、问答题
1. 状态标志——记录指令执行结果的有关状态,例如,进位、溢出、符号等;
控制标志——用来控制处理器执行指令的方式,例如,可否中断、是否单步执行指令等。
2.子程序名和子程序功能:
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
push ax
push cx
push dx
mov cx,16
again mov dx,0
shl ax,1;从高位到低位显示
push ax
adc dx,30h;转换为0或1的ASCII码
mov ah,2;显示
int 21h
pop ax
loop again
pop dx
pop cx
pop ax
ret
bdisp endp
② 写出指令,将一个字节数据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单元。
pop si
ret
msch endp
code ends
end start
[ ]
6.下列指令中有操作数在代码段中的是
ax,34hax,bx
word ptr [34h]ax,[34h][ ]
7.假设AL=5,要使得AL=0FAH,应执行的指令是
A.not alal,0fh
al,0f0hal,0fh[ ]
8.设置逻辑段应该采用的一对伪指令是
endsend start
endpendm[ ]
循环体部分——重复执行的程序段,包括对循环条件的改变。
循环控制部分——判断循环条件是否成立、确定是否退出循环。
5. ①AX=4c2ah
②AX=b74ch
③AX=65b7h
四、程序阅读题
1.AL=0、ZF=1。
2.①mov ax,fldb;AL=4fh
②mov cl,table[2];CL=a2h
③mov ch,array;CH=‘A’
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寄存器的内容。
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。
C.AH=10H、CF=0D.AH=F0H、CF=1[ ]
15.如下程序段:
again: mov es:[di],al
inc di
loop again
可用指令__________完成相同的功能。
A.rep movsbB.rep lodsb
C.rep stosbD.repstosw[ ]
三、问答题:
1.说明8086/8088两类标志各自的作用是什么
①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
② 主程序将月份传送给子程序。
汇编语言参考答案
一、填空题
1.8位无符号整数的表示范围为0~255,写成十六进制形式为00H~FFH,8位有符号整数的表示范围为-128~+127,写成十六进制形式为80H~7FH。
2. 8086/8088分段管理存储空间,但每段容量最大不超过64KB。
3. 逻辑地址为F000:100的存储单元,其物理地址是F0100H。
ax,0075B.mov ax,0705
ax,0075hD.mov ax,0705h[ ]
13.如下指令可将AX寄存器内容改变的是
A.cmp ax,bxB.test ax,bx
C.and ax,bxD.xchg ax,bx[ ]
14.设AH=10H,执行“neg ah”指令后,正确的结果是
A.AH=10H、CF=1B.AH=F0H、CF=0
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
④mov dx,count;DX=4
3.在AL寄存器中最高位为1情况下,该程序段执行结果AH=1;在AL寄存器中最高位为0情况下,该程序段执行结果AH=FFH。
4.mov di,offset data1
mov ax,3
cld
mov cx,count/2
repnzscasw
该命令序列执行后,CX=06h、DI=128h。
6. stack segment stack;堆栈段
db 1024 dup(0)
stack ends
data segment;数据段
mnum db 4
month db ‘JAN’,’FEB’,’MAR’,’APR’,’MAY’,’JUN’
db ‘JUL’,’AUG’,’SEP’,’OCT’,’NOV’,’DEC’
4. 用来指示堆栈栈顶的偏移地址的是SP寄存器。
5. 若要测试AL寄存器D4、D2、D0位是否都为0,则可使用test al,00010101b指令语句(含操作数),以产生转移条件。这条指令执行后 将利用标志位ZF实现转移。