检测点5.3
1.INTEL x86
处理器访问内存时,是按低端字节序进行的。那么, 以下程序片断执行后,寄存器AX
中的内容是多少?
mov word [data],0x2008
xor byte [data],0x05
add word [data],0x0101
mov ax,[data]
data db 0,0
答案:0x210E
2.对于以上程序片断,如果标号data在编译时的汇编地址是0x0030,那么,当该程序加载到内存后,该程序片断所在段的段地址为0x9020时,该标号处的段内偏移地址和物理内存地址各是多少?
答案:偏移地址: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
错误,源操作数和目的操作数大小不匹配
4.如果寄存器AX、BX和DX的内容分别为0x9000、0x9000和0x0001,那么执行div bh后,这三个寄存器的内容格式多少?执行div bx后呢?
①0x0001、0x9000、0x0001
②0x0002、0x9000、0x1000
检测点 6.2
1.选择题:下面哪些指令是错误的,为什么?
错误的:C, E (cx和ax不能做偏移地址寄存器)