|
|
检测点6.3
1.INTEL x86处理器访问内存时,是按低端字节序进行的。那么,以下程序片断执行后,寄存器AX中的内容是多少?
mov word [data],0x2008
xor byte [data],0x05
add word [data],0x0101
mov ax,[data]
data db 0,0
答:
第一条指令执行后:
data:____
|08|
|---|
|20|
第二条指令执行后:
data:____
|0D|
|---|
|20|
第三条指令执行后:
data:____
|0E|
|---|
|21|
最终,data处一个字是210EH,所以传送到AX的内容是210EH。
2.对于以上程序片断,如果标号data在编译时的汇编地址是0x0030,那么,当该程序加载到内存后,该程序片断所在段的段地址为0x9020时,该标号处的段内偏移地址和物理内存地址各是多少?
答:程序片段加载时,若段地址为0x9020,则标号data在段内的偏移地址为0x0030,物理地址是0x9020左移4位加上0x0030,等于0x90230。
3.对于以下指令的写法,说出哪些是正确的,哪些是错误的,错误的原因是什么。
A.mov ax,[data1] B.div [data1] C.xor ax,dx
D.div byte [data2] E.xor al,[data3] F.add [data4],0x05
G.xor 0xff,0x55 H.add 0x06,al I.div 0xf0
J.add ax,cl
答:正确的写法是A,C,D,E。以下指令是错误的:
B。错误的原因是未指定内存操作数的大小;
F。错误的原因是未指定源和目的操作数的大小。特别地,0x05可以是任意长度。
G。错误的原因是源和目的操作数不允许同时为立即数。
H。错误的原因是目的操作数不能是立即数。
I。错误的原因是除法指令的操作数不能是立即数。
J。错误的原因是源操作数和目的操作数的大小不匹配。
4.如果寄存器AX、BX和DX的内容分别为0x0090、0x9000和0x0001,那么,执行div bh后,这三个寄存器的内容各是多少?执行div bx后呢?
答:
div bh是用AX的内容除以bh的内容,AL保存商,AH保存余数。0x0090除以0x90,AL为1,AH为0,BX和DX不变。
div bx是用DX:AX的内容除以BX的内容,AX保存商,DX保存余数。0x00010090除以0x9000,AX为1,DX为0x7090;BX不变。
|
|