汇编语言自测练习题文档格式.docx
《汇编语言自测练习题文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言自测练习题文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
![汇编语言自测练习题文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/553cc192-1807-4188-90dd-ceeaac84c5f5/553cc192-1807-4188-90dd-ceeaac84c5f51.gif)
A
0
B
1
C
任意
D
不影响
2.某次求和结果最高位为1,则SF=__________。
不影响
3.减法指令产生差值为38H则标志正确的是__________。
ZF=1
SF=1
PF=1
PF=0
4.请问两个8位数据8FH与36H相加后,状态标志ZF、SF、PF的状态是什么?
1.B
3.D
4.直接对这两个数据进行(无符号数据)加法:
8FH+36H=C5H
结果C5H不是零,所以:
ZF=0;
最高位D7=1,所以:
SF=1;
结果C5H中“1”的个数是4,为偶数,所以:
PF=1;
溢出标志
请问两个8位数据8FH与36H相加后,状态标志溢出标志位CF和OF的状态是什么?
进位标志针对无符号数据加减运算。
最高位没有进位,所以:
CF=0;
溢出标志针对有符号数据加减运算。
它的判断可以采用一个简单的规则:
当两个相同符号的数据相加(含不同符号的数据相减),如果运算结果的符号与原数据符号不同,就产生溢出;
其他情况,不会产生溢出。
对于8FH(负数)与36H(正数)两个不同符号数据相加,根本不会产生溢出,所以:
OF=0。
如果8FH减去36H,则结果是:
8FH-36H=59H。
没有借位,所以CF=0;
“负数减正数”可以认为是“负数加负数”,结果不应是正数(59H),所以有溢出OF=1。
控制标志
简述3个控制标志的含义。
DF——方向标志(Direction
Flag)。
该标志用于串操作指令中,控制地址的变化方向。
如果设置DF
=
0,每次串操作后的存储器地址就自动增加;
设置DF
1,每次串操作后的存储器地址就自动减少。
方向标志可以用CLD指令复位,STD指令置位。
IF——中断允许标志(Interrupt-enable
该标志用于控制外部可屏蔽中断是否可以被处理器响应。
若设置IF
1,则允许中断;
设置IF
0,则禁止中断。
TF——陷井标志(Trap
Flag),也常称为单步标志。
该标志用于控制处理器是否进入单步操作方式。
若设置TF
1,处理器单步执行指令:
即处理器在每条指令执行结束时,便产生一个编号为1的内部中断。
这样可以方便地对程序进行逐条指令的调试。
这种内部中断称为单步中断;
这种逐条指令调试程序的方法就是单步调试。
设置TF
0,处理器正常工作。
位、字节、字和双字
每个存储单元存放一个_________,双字需要用____个存储单元存放,一个字需_____个存储单元存放。
每个存储单元存放一个
字节
,双字需要用
4
个存储单元存放,一个字需要
2
个存储单元存放。
多字节数据的存放
1.偏移地址2000H~2003H的4个字节单元依次存放如下数据(16进制):
10
20
30
40。
请问偏移地址2000H处的字节、字和双字单元内容分别是什么?
2.设物理地址(10FF0H)=10H,(10FF1H)=20H,(10FF2H)=30H,如从地址10FF1H中取出一个字的内容是_____________。
1020H
3020H
2030H
2010H
1.Intel
80x86系列微处理器采用“小端方式”存放多字节数据,即在内存中低地址存放低字节、高地址存放高字节,就是所谓“低对低、高对高”原则。
因此,结论是:
[2000H]字节单元=10H
[2000H]字单元=2010H
[2000H]双字单元=40302010H
2.
答案:
B。
10FF1H开始的一个字空间由两个内存单元组成,其地址分别为10FF1H和10FF2H,8086的数据在内存中是以小端方式存放的,因而10FF2H中存放的是高字节,10FF1H中存放的是低字节。
所以从地址10FF1H中取出一个字的内容是3020H。
8086存储器的逻辑段
1.8086/8088的1MB主存空间最多能分成多少个逻辑段,最少分成多少个逻辑段?
2.关于8088CPU的逻辑段论述正确的有______。
每个逻辑段不超过64KB
每个逻辑段的起始物理地址的低4位全为0
一个程序中,代码段只能有一个
数据段和堆栈段的段地址不能相同
E
指令指针寄存器IP指示当前代码段中下一条指令的偏移地址
F
一个存储单元的物理地址不是唯一的(逻辑地址不唯一)。
1.逻辑段有两个限制:
容量小于等于64KB,段开始于模16地址。
如果从最低地址00000H开始,每隔16个字节就分一个段(最小的逻辑段容量),这样1MB主存空间最多就分成1MB÷
16=220÷
24=216个逻辑段。
如果从最低地址00000H开始,每隔64KB分一个段(最大的逻辑段容量),这样1MB主存空间最少就分成1MB÷
64KB=220÷
216=24个逻辑段。
ABE
逻辑地址
1.已知一个16字节的数组始于逻辑地址F000
:
1070,请问最后一个字节所在的物理地址?
2.设DS=5788H,偏移地址为94H,该字节的物理地址_____________。
57974H
5883H
57914H
58ECH
1.这是一个常见的逻辑地址转换为物理地址的例子:
物理地址=段地址左移4位(对16进制数来说就是一位)+偏移地址
第一个字节单元的物理地址是:
F0000H+1070H=F1070H
最后一个字节单元的物理地址是:
F1070H+(16-1)=F107FH
C
根据公式:
物理地址=段地址左移4位(对16进制数来说就是一位)+偏移地址计算得到(物理地址不可能为16位)
段寄存器
简述4个段寄存器的作用。
CS存放代码段的段地址
SS存放堆栈段的段地址
DS存放数据段的段地址
ES存放附加段的段地址
段超越
1.8088按逻辑段组织程序,数据变量应该且必须在数据段中。
2.数据访问时默认使用的段一定是数据段DS.
3.数据可以存放在任何段中。
4.当数据存放在附加段时使用的段超越是ES:
5.mov
ax,es:
[di+100h]”指令从__________段取出数据送AX。
CS
SS
DS
ES
6.“mov
ax,[bp+di]”指令从__________段取出数据送AX。
ES
1.答案:
错。
数据变量可以位于任何一个段中。
使用BP基址指针寄存器访问主存,则默认是SS段
3.答案:
只要明确指明是哪个逻辑段就可以
4.答案:
5.答案:
D。
ES是附加段时使用的段超越。
6.答案:
使用BP基址指针寄存器访问主存,则默认是SS段
段寄存器的使用规定
1.CPU取指令时是取CS*16+SP的内存单元中的内容。
2.堆栈段的偏移地址是通过SP寄存器给出的。
3.使用BP基址指针寄存器访问主存,只能是SS段。
取指令时是取CS*16+IP的内存单元中的内容。
正确。
堆栈段的偏移地址是通过SP寄存器给出的。
SP指示堆栈的栈顶指针。
3.
使用BP基址指针寄存器访问主存,默认是SS段。
也可以使用段超越访问其他段。
分段示例
1.若用户堆栈位于存储区10000H~1FFFFH,则该堆栈的段地址是______
10000H
1FFFFH
01000H
00FFFH
2.某系列微机对存储器的分段,如果每个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是______位
14
15
16
20
A。
每个段的起始地址必须是一个小节的地址,即低4位二进制数为0。
这里的段地址是指段开始的物理地址。
段寄存器只保存段起始物理地址的高16位,所以有时也将段地址理解为高16位部分。
如果是后者的理解,则答案应该是C。
每个段最多的字存储单元(16位二进制)是32K,那么每个段内字节单元最多是64K,寻址64K的存储空间需要16条地址线。
1.
指令组成
指令格式为
操作码
操作数1,
操作数2
;
注释
寻址方式
什么是寻址方式?
分为哪些类?
指令中用于说明操作数位置的方法就是操作数的寻址方式。
分为:
立即(数)寻址方式
寄存器寻址方式
存储器寻址方式
立即数寻址方式
指令
mov
ax,1020h中源操作数是(
),它的寻址方式是(
)寻址方式,操作数存放在(
)段中,汇编后的机器码为三个字节,从低地址到高地址分别为
B8、(
)、(
)。
ax,1020h中操作数是(
1020h
),它的寻址方式是(立即数)寻址方式,操作数存放在(代码)段中,汇编后的机器码为三个字节,从低地址到高地址分别为
B8H(20H10H)。
注意数据在内存中是小端方式存放。
下面不能用于寄存器寻址的寄存器有(
)
A.
B.
AX
C.
IP
D.
SI
E.
CL
F.
SP
解答:
C。
寄存器寻址方式的操作数存放在CPU的内部寄存器reg中,它可以是8位寄存器r8:
AH
AL
BH
BL
CH
DH
DL;
也可以是16位寄存器r16:
BX
CX
DX
DI
BP
SP。
另外,操作数还可以存放在4个段寄存器中seg:
ES。
IP是指令指针寄存器,不能存放操作数。
1.比较存储器寻址方式与寄存器寻址方式的特点
2.存储器寻址方式在指令中给出操作数在内存中的地址,该地址是()
逻辑地址
有效地址
偏移地址
D.物理地址
E.段地址
1.解答:
存储器寻址方式
寄存器寻址方式
操作数存放的位置:
内存
寄存器
寻址速度
慢
快
存放数量
多
有限
2.解答:
。
主存寻址方式。
在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。
8086的存储器是分段管理的,所以这里给出的地址只是偏移地址(称有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中
直接寻址方式
指出下面指令中源操作数的寻址方式。
bx,
2002h
[2002h]
2002h
;
立即寻址方式,2002h是16位立即数
[2002h]
直接寻址方式,有效地址为2002h
寄存器间接寻址方式
指出源操作数的寻址方式,并判断对错,并说明原因:
ax,[sp]
ax,sp
ax,[si]
ax,si
ax,[bp]
ax,bp
ax,[ds]
ax,ds
ax,[bx]
ax,bx
ax,[sp]
;
错。
寄存器间接寻址只能用bp,bx,si,di,sp不能用于寄存器间接寻址。
ax,sp
寄存器寻址
ax,[si]
寄存器间接寻址
ax,si
ax,[bp]
ax,bp
ax,[ds]
ds不能用于寄存器间接寻址
ax,ds
ax,[bx]
ax,bx
寄存器相对寻址方式
假设有关寄存器及存储单元内容如下:
DS=1000h,BX=0100h,SI=0002
[10100H]=12h,[10101H]=34h,[10102H]=56h,[10103H]=78h
[11200H]=A1h,[11201H]=B2h,[11202H]=C3h,[11203H]=D4h
说明如下各条指令执行完后,CX=?
①
cx,
1200
②
bx
③
[1200h]
④
[bx]
⑤
1100h[bx]
对后3种存储器寻址方式,需要首先计算它的有效地址,然后与段地址组合成物理地址,进而从存储单元取出内容(注意这是16位数据)。
CX=1200
CX=BX=0100h
CX=B2A1h,因为物理地址是10000H+1200H=11200H
CX=3412h,因为物理地址是10000H+0100H=10100H
CX=B2A1h,因为物理地址是10000H+1100H+0100H=11200H
基址变址寻址方式
判断对错,并说明原因:
[ax+1000h];
[bp+ax];
bx
[sp+di];
[bx+di];
bx,[bp+si];
bx,[cs+si];
bx,[bx+ax];
[ax+1000h]
ax不是基址寄存器
[bp+ax]
Ax不是变址寄存器
[sp+di]
Sp不是基址寄存器
[bx+di]
对
bx,[bp+si]
bx,[cs+si]
cs不是基址寄存器
bx,[bx+ax]
Ax不是变址寄存器
相对基址变址寻址方式
指令“mov
wnum[bx][si]”源操作数的物理地址的是______
16×
CS+BX+SI+wnum
SS+BX+SI+wnum
DS+BX+SI+wnum
ES+BX+SI+wnum
D
寻址方式wnum[bx][si]表示的偏移地址是BX+SI+wnum,段超越前缀es:
说明数据存放在附加段中,所以物理地址是:
ES+BX+SI+wnum。
操作数寻址方式小结
写出下列指令的源操作数采用的寻址方式?
如果可以计算,其物理地址是多少?
假设DS=3000H、ES=3100H、SS=2000H、SI=00ABH、BX=0200H、BP=0020H,变量var的偏移地址为0080H。
ax,var
ax,var[bx]
ax,[200h]
ax,0
⑥
ax,si
⑦
ax,[bp]
⑧
⑨
ax,ds:
[bp+2]
⑩
ax,var[bx][si]
直接寻址,物理地址=3000H×
16+0080H=30080H
寄存器间接寻址,物理地址=3000H×
16+0200H=30200H
寄存器相对寻址,物理地址=3000H×
16+0280H+0080H=30280H
立即数寻址,操作数在代码段
寄存器寻址,操作数在寄存器SI中为00ABH
寄存器相对寻址(答间接寻址也可以),物理地址=2000H×
16+0020H=20020H
寄存器间接寻址,物理地址=3100H×
16+0200H=31200H
[bp+si]
基址变址寻址,物理地址=3000H×
16+0020H+00ABH=300CBH
ax,var[bx][si]
相对基址变址寻址,物理地址=3000H×
16+0200H+00ABH+0080H=3032BH