参考答案:
(1)后缀
:w,
源
基址+比例变址+偏移,
目
(2)后缀
b,
源
寄存器,
目
(3)后缀
l,
源
比例变址,
目
(4)后缀
b,
源
基址,
目
(5)后缀
l,
源
立即数,
目
(6)后缀
l,
源
立即数,
目
(7)后缀
w,
源
寄存器,
目
(8)后缀
l,
源
基址+变址+偏移,
目
寄存器 基址+偏移 寄存器
寄存器
栈
寄存器
寄存器
寄存器
参考答案:
源操作数是立即数 OxFF,需在前面加‘ $'
源操作数是16位,而长度后缀是字节‘ b',不一致
(3 )目的操作数不能是立即数寻址
操作数位数超过16位,而长度后缀为16位的’w'
不能用8位寄存器作为目的操作数地址所在寄存器
源操作数寄存器与目操作数寄存器长度不一致
不存在ESX寄存器
源操作数地址中缺少变址寄存器
?参考答案:
表3.12题5用表
src type
dst type
机器级表示
char
int
movsbl %al, (%edx)
int
char
movb %al, (%edx)
int
unsigned
movl %eax, (%edx)
short
int
movswl %ax, (%edx)
unsigned char
unsigned
movzbl %al, (%edx)
char
unsigned
movsbl %al, (%edx)
int
int
movl %eax, (%edx)
?参考答案:
R[ebp]+8、R[ebp]+12、(1) xptr、yptr和zptr对应实参所存放的存储单元地址分别为:
R[ebp]+8、R[ebp]+12、
R[ebp]+16。
(2)函数func的C语言代码如下: void fun c(i nt *xptr, i nt *yptr, i nt *zptr) {
int tempx=*xptr;
int tempy=*yptr;
int tempz=*zptr;
*yptr=tempx;
*zptr = tempy;
*xptr = tempz;
?参考答案:
R[edx]=x
R[edx]=x+y+4
R[edx]=x+8*y
R[edx]=y+2*x+12
R[edx]=4*y
R[edx]=x+y
&参考答案:
指令功能为:R[edx] — R[edx]+M[R[eax]]=OxM[0x8049300],寄存器 EDX 中内容改变。改变后的
内容为以下运算的结果:+FFFFFFF0H
0000 0000 0000 0000 0000 0000 1000 0000
+ 1111 1111 1111 1111 1111 1111 1111 0000
1 0000 0000 0000 0000 0000 0000 0111 0000
因此,EDX中的内容改变为 0根据表3.5可知,加法指令会影响 OF、SF、ZF和CF标志。OF=0 , ZF=0, SF=0, CF=1。
指令功能为:R[ecx] — R[ecx]-M[R[eax]+R[ebx]]=0M[0x8049400],寄存器 ECX 中内容改变。
改变后的内容为以下运算的结果: -
0000 0000 0000 0000 0000 0000 0001 0000
+ 0111 1111 1111 1111 1111 1111 1111 1000
0 1000 0000 0000 0000 0000 0000 0000 1000
因此,ECX中的内容改为 0根据表3.5可知,减法指令会影响OF、SF、ZF和CF标志。OF=1 ,
ZF=0 , SF=1, CF=1 二 0=1。
指令功能为:R[bx] — R[bx] or M[R[eax]+R[ecx]*8+4],寄存器BX中内容改变。改变后的内容为以下运算 的结果:0x0100 or M[0x8049384]=0100H or FF00H
0000 0001 0000 0000
or 1111 1111 0000 0000
1111 1111 0000 0000
因此,BX中的内容改为OxFFOO。由3.3.3节可知,OR指令执行后 OF=CF=O ;因为结果不为0,故ZF=0 ; 因为最高位为1,故SF=1。
test指令不改变任何通用寄存器,但根据以下与”操作改变标志:R[dl] a nd 0x80
1000 0000
and 1000 0000
1000 0000
由3.3.3节可知,TEST指令执行后OF=CF=O;因为结果不为 0,故ZF=0 ;因为最高位为1,故SF=1。
指令功能为