汇编语言程序设计习题答案Word文件下载.docx
- 文档编号:19561346
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:32
- 大小:65.60KB
汇编语言程序设计习题答案Word文件下载.docx
《汇编语言程序设计习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计习题答案Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。
1.14、简述PC机最低1MB主存空间的使用情况。
1.15、罗列8086CPU的8个8位和16位通用寄存器
,并说明各自的作用。
1.16、什么是标志,它有什么用途?
状态标志和控制标志有什么区别?
画出标志寄存器FLAGS,说明各个标志的位置和含义。
1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志
进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;
溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:
3AH
+
7CH=B6H
无符号数运算:
58+124=182,范围内,无进位
有符号数运算:
58+124=182
,范围外,有溢出•例2:
AAH
7CH=
(1)26H
170+124=294,范围外,有进位
-86+124=28
,范围内,无溢出
1.18、字和双字在存储器中如何存放,什么是“小端方式”?
对字和双字存储单元,什么是它们的对齐地址?
为什么要对齐地址?
1.19、什么是8086中的逻辑地址和物理地址?
逻辑地址如何转换成物理地址?
请将如下逻辑地址用物理地址表达:
(1)FFFFh:
0
(2)40h:
17h
(3)2000h:
4500h
(4)B821h:
4567h
1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?
(解答)
代码段(Code
Segment)用来存放程序的指令序列。
处理器利用CS
:
IP取得下一条要执行的指令
•堆栈段(Stack
Segment)确定堆栈所在的主存区域。
处理器利用SS
SP操作堆栈中的数据
•数据段(Data
Segment)存放当前运行程序所用的数据。
处理器利用DS
EA存取数据段中的数据
•附加段(Extra
Segment)是附加的数据段,也用于数据的保存。
处理器利用ES
EA存取数据段中的数据
第二章8086指令系统
2.1已知DS
=
2000H、BX
=
0100H、SI
0002H,存储单元[20100H]
~
[20103H]依次存放12
34
56
78H,[21200H]
[21203H]依次存放2A
4C
B7
65H,说明下列每条指令执行完后AX寄存器的内容。
(1)
mov
ax,1200h;
AX=1200h
(2)
ax,bx;
AX=0100h
(3)
ax,[1200h];
AX=4C2Ah
(4)
ax,[bx];
AX=3412h
(5)
ax,[bx+1100h];
(6)
ax,[bx+si];
AX=7856h
(7)
ax,[bx][si+1100h];
AX=65B7h
2.2指出下列指令的错误
cx,dl
两操作数类型不匹配
ip,axIP指令指针禁止用户访问
es,1234h
立即数不允许传给段寄存器
es,ds段寄存器之间不允许传送
al,300
两操作数类型不匹配
[sp],ax目的操作数应为[
BP
]
ax,bx+di
源操作数应为
[BX+DI]
(8)
20h,ah立即数不能作目的操作数
2.3已知数字0
9对应的格雷码依次为:
18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。
lea
bx,table
;
获取table的首地址,BX=200H
al,8
传送欲转换的数字,AL=8
xlat
转换为格雷码,AL=12H
2.4什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?
堆栈是一种按“先进后出”原则存取数据的存储区域。
堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。
2.5已知SS
FFA0H、SP
00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化?
ax,8057h
push
ax
ax,0f79h
pop
bx
;
bx=0f79h
[bx]
DS:
[0f79h]=8057h
2.6给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:
al,89hAL=89h
CF
ZF
SF
OF
PF
add
al,alAL=12h
1
al,9dhAL=0afh
cmp
al,0bchAL=0afh
sub
al,alAL=00h
dec
alAL=0ffh
inc
alAL=00h
2.7
设X、Y、Z均为双字数据,分别存放在地址为X、X+2;
Y、Y+2;
Z、Z+2的存储单元中,它们的运算结果存入W单元。
阅读如下程序段,给出运算公式。
ax,X
dx,X+2
ax,Y
adc
dx,Y+2
ax,24
dx,0
ax,Z
sbb
dx,Z+2
W,ax
W+2,dx
W=X+Y+24-Z
2.8请分别用一条汇编语言指令完成如下功能:
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。
ADD
DX,BX
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
AL,[BX+SI]
(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。
[BX+0B2H],CX
(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。
WORD
PTR
[0520H],3412H
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。
ADD
AL,0A0H
2.9;
设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
为了避免与操作数地址混淆,将题中X,Y,Z,V
字操作数改为A,B,C,D
ax,X
ax=A
imul
Y
dx,ax
A*B
(将操作数看作符号数,以下同)
cx,ax
bx,dx
bx,ax
<
--
=A*B
ax,Z
C
cwd
=C
(扩展符号后为双字)
bx,cx
bx,cx+dx,ax=A*B+C
cx,540
bx,0
bx,cx<
A*B+C-540
ax,
V
ax=
D
dx,ax=
cx
dx,
-
D-(A*B+C-540)
idiv
X
;
运算结果:
[D-(A*B+C-540h)]/A
ax存商,dx存余数
2.10;
(1)xchg
[si],30h
xchg的操作数不能是立即数
(2)pop
cs不能对CS直接赋值
[si],[di]
两个操作数不能都是存储单元
(4)push
ah堆栈的操作数不能是字节量
ax,ds
adc的操作数不能是段寄存器
[si],80h没有确定是字节还是字操作
in
al,3fch
in不支持超过FFH的直接寻址
out
dx,ahout只能以AL/AX为源操作数
2.11;
给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。
指令AX的值CFOFSFZFPF
Mov
ax,1407h1470h-----
And
ax,ax1470h00000
Or
Xor
ax,ax000011
Not
ax0ffffh-----
Test
ax,0f0f0h0ffffh00101
注意:
1.
mov,
not指令不影响标志位
2.
其他逻辑指令使CF=OF=0,
根据结果影响其他标志位。
2.12;
假设例题2.32的程序段中,AX
08H,BX
10H,请说明每条指令执行后的结果和各个标志位的状态。
指令
注释
执行结果
CFOFSFZFPF
movsi,ax
si=ax
si=0008h
-
-
shlsi,1
si=2*ax
si=0010h
0
0
addsi,ax
si=3*ax
si=0018h
1
movdx,bx
dx=bx
dx=0010h
movcl,03h
cl=03h
shldx,cl
dx=8*bx
dx=0080h
u
subdx,bx
dx=7*bx
dx=0070h
adddx,si
dx=7*bx+3*ax
dx=0088h
注意:
左移N次相当于乘于2的N次方,右左移N次相当于除乘于2的N次方。
2.
移位指令根据是否移入“1”到CF,设置CF,根据移位后的结果影响SF,ZF,PF。
根据最高符号位是否改变设置OF,如改变
OF=1.
3.
‘
u
’表示无定义,‘
’表示无影响。
2.13编写程序段完成如下要求:
用位操作指令实现AL(无符号数)乘以10
;
不考虑进位mov
bl,al
cl,3
shl
al,cl
al,bl
bl,1
考虑进位xor
ah,ah
ax,cl
ax,bx
bx,1
用逻辑运算指令实现数字0
9的ASCII码与非压缩BCD码的互相转换
数字0~9的ASCII码是:
30h~39h
非压缩BCD码的0~9是:
00h~09h
方法一:
and
al,0fh
实现ASCII到非压缩BCD码的转换
or
al,30h
实现非压缩BCD码到ASCII的转换
方法二:
xor
求反D5D4位,其他不变
即高4位为3,则变为0;
高4位为0,则变为3
cl,4
again:
shr
dx,1
实现逻辑右移
采用“sar
dx,1”,则实现算术右移
rcr
ax,1
cl
jnz
again
把DX:
.AX中的双字右移4位
MOVCL,4
SHRAX,CL
MOVBL,DL
SHRDX,CL
SHLBL,CL
ORAH,BL
2.14;
已知AL
F7H(表示有符号数-9),分别编写用SAR和IDIV指令实现的除以2的程序段,并说明各自执行后,所得的商是什么?
(1)用sar编写
moval,0f7h
-9送al
saral,1
结果:
al=0fbh
即-5
(2)用idiv编写
cbw
字节符号扩展位字
movbl,2
注意除数不可为立即数
idivbl
商为al=fch
(-4)
余数为ah=ffh(-1)
结论:
符号数的除法用idiv准确
2.15、已知数据段500h
~600h处存放了一个字符串,说明下列程序段执行后的结果:
si,600h
di,601h
ax,ds
es,ax
cx,256
std
rep
movsb
2.16、说明下列程序段的功能
cld
ax,0fefh
cx,5
bx,3000h
es,bx
di,2000h
stosw
2.17、指令指针IP是通用寄存器还是专用寄存器?
有指令能够直接它赋值吗?
哪类指令的执行会改变它的值?
调试程序DEBUG环境下,如何改变IP数值?
2.18、控制转移类指令中有哪三种寻址方式?
2.19;
什么是短转移short
jump、近转移near
jump和远转移far
jump?
什么是段内转移和段间转移?
8086有哪些指令可以实现段间转移?
短转移:
指段内-128~127之间的转移,位移量用一个字节表示
近转移:
指段内±
32K之间的转移,位移量用一个字表示
远转移:
指段间1MB范围的转移
段内转移:
指在同一个代码段内的转移,可以是短转移或者近转移
段间转移:
指转移到另外一个代码段,就是远转移
8086/8088CPU的JMP、CALL和INTn指令可以实现段间转移
2.20;
8086的条件转移指令的转移范围有多大?
实际编程时,你如何处理超出范围的条件转移?
8086的条件转移的转移范围:
在当前指令地址的
+127----
-128之内。
如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。
2.21;
假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?
(1)JMP
Bx
转移的有效地址EA=BX=1256h
(2)JMP
tABLE[Bx]
转移的有效地址EA=[ds:
20a1h+1256h]=[232f7]=3280h
(3)JMP
[Bx][si]
1256h+528fh]=264e5h=2450h
2.22、判断下列程序段跳转的条件
(1)xorax,1e1eh
jeequal
AX=1e1eh(异或后为0)
(2)testal,10000001b
jnzthere
AL的D0或D7至少有一位为1
(3)cmpcx,64h
jbthere
CX(无符号数)<64h
2.23;
设置CX
0,则LOOP指令将循环多少次?
例如
mov
cx,0
不循环,因为一进入循环就判
cx=0?
如cx=0
就退出循环
delay:
loop
delay
循环次数是2的16次方,即2^16=65536。
2.24
假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现以下判断:
(1)若DX
>
DI,转到above执行
dx,di
ja
above
=jnbe
(2)若AX
SI,转到greater执行
ax,si
jg
greater
=jnle
(3)若CX
0,转到zero执行
cx,0
jcxz
zero
jz
(4)若AX-SI产生溢出,转到overflow执行;
ax,di
jo
overflow
(5)若SI≤AX,转到less_eq执行;
si,ax
jle
less_eq
jge
(6)若DI≤DX,转到below_eq执行。
di,dx
jbe
below_eq
jae
below_eq
2.25有一个首地址为array的20个字的数组,说明下列程序段的功能。
cx,20
ax,0
si,ax
sum_loop:
ax,array[si]
si,2
sum_loop
total,ax
答:
将首地址为array得20个字的数组求和,并将结果存入
total
单元中。
2.26
按照下列要求,编写相应的程序段:
(1)
起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。
si,0
dl,string[si]
第1个字符送dl寄存器
si,5
dh,string[si]
第6个字符送dh寄存器
从主存buffer开始的4个字节中保存了4个非压缩BCD码,现按低(高)地址对低(高)位的原则,将它们合并到DX中。
si,si
si清零
al,buffer[si]
第一字节
si
ah,buffer[si]
第二字节
ah,cl
BCD码移到高半字节
al,ah
组合成压缩BCD码
dl,al
存入dl寄..
第三字节
第四字节
dh,al
存入dh寄..
编写一个程序段,在DX高4位全为0时,使AX
0;
否则使AX
-1。
test
dx,0f000h
ax,-1
jmp
done
zero:
ax,0
done:
ret
有两个64位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成buffer1-buffer2功能。
bx,buffer1
dx,buffer2
cx,8
8个字节
si=0
clc
CF=0
假设从B800h
0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保存在DX.AX中。
ax,0b800h
ds,ax
段地址
地址偏移量si=0
dx,dx
和的高字dx=0
cx,99
加的次数
ax,[si]
第一个数
aga
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 习题 答案