.
计算机系统基础第二次作业
3、对于以下AT&T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀,并说明每个操作数的寻址方式。 (1)mov 8(?p, ?x, 4), %ax (2)mov %al, 12(?p) (3)add ( , ?x,4), ?x (4)or (?x), %dh (5)push $0xF8 (6)mov $0xFFF0, êx (7)test %cx, %cx (8)lea 8(?x, %esi), êx
答:如下表所示:
题目编号 (1) (2) (3) (4) (5) (6) (7) 长度后缀 w b l b l l w 源操作数 基址+比例变址+位移 寄存器 比例变址 基址 立即数 立即数 寄存器 目的操作数 寄存器 基址+位移 寄存器 寄存器 栈 寄存器 寄存器 精品
.
(8)
l 基址+变址+位移 寄存器 4. 使用汇编器处理以下各行AT&T格式代码时都会产生错误,请说明每一行存在什么错误。
(1)movl 0xFF, (êx) (2)movb %ax, 12(?p) (3)addl ìx, $0xF0 (4)orw $0xFFFF0, (?x) (5)addb $0xF8, (%dl) (6)movl %bx, êx (7)andl %esi, %esx (8)movw 8(?p, , 4), %ax 答:
(1)书写错误。因为源操作数是立即数0xFF,所以需要在前面加上‘$’ (2)由于源操作数(%ax)是16位,而长度后缀是字节‘b’,所以不一致,应改为‘movw’
(3)目的操作数不能是立即数寻址
(4)操作数位数超过16位,而长度后缀为16位的‘w’,应改为‘orl’ (5)不能用8位寄存器作为目的操作数地址所在寄存器 (6)源操作数寄存器与目的操作数寄存器长度不一致 (7)不存在ESX寄存器
(8)源操作数地址中缺少变址寄存器
7. 假设变量x和y分别存放在寄存器EAX和ECX中,请给出以下每条指令执行后寄存器EDX中的结果。 (1)leal (êx), íx (2)leal 4(êx, ìx), íx
精品
.
(3)leal (êx, ìx, 8), íx (4)leal 0xC(ìx, êx, 2), íx (5)leal ( , êx, 4), íx (6)leal (êx, ìx), íx 答:
(1)R[edx]=x //把eax的值放到edx中去 (2)R[edx]=x+y+4 //把eax+ecx+4的值放到edx中去 (3)R[edx]=x+8*y //把eax+8*ecx的值放到edx中去 (4)R[edx]=y+2*x+12 //把ecx+2*eax+12的值放到edx中去 (5)R[edx]=4*x //把4*eax的值放到edx中去 (6)R[edx]=x+y //把eax+ecx的值放到edx中去
8.假设以下地址以及寄存器中存放的机器数如下表所示
地址 0x8049300 0x8049400 0x8049384 0x8049380 机器数 0xfffffff0 0x80000008 0x80f7ff00 0x908f12a8 寄存器 EAX EBX ECX EDX 机器数 0x8049300 0x100 0x10 0x80 分别说明执行以下指令或寄存中的内容交发生改变?改变后的内容是什么条件标志OF 、 SF 、 ZF 和 CF 会发生什么改变。
(1)指令功能为:R[edx]←R[edx]+M[R[eax]]=0x00000080+M[0x8049300],寄存器EDX中内容改变。改变后的
内容为以下运算的结果:00000080H+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中的内容改变为0x00000070。根据表3.5可知,加法指令会影响OF、SF、ZF和CF标志。OF=0,ZF=0,SF=0,CF=1。
(2)指令功能为:R[ecx] ←
R[ecx]-M[R[eax]+R[ebx]]=0x00000010+M[0x8049400], 寄存器ECX中内容改变。 改变后的内容为以下运算的结果:00000010H-80000008H。 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
根据表3.5可知,减法指令会影响OF、SF、ZF和CF标志。OF=1,ZF=0,SF=1,CF=1
(3)指令功能为: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中的内容改为0xFF00。由3.3.3节可知,OR指令执行后OF=CF=0;因为结果不为0,故ZF=0;因为最高位为1,故SF=1。
(4)test指令不改变任何通用寄存器,但根据以下“与”操作改变标志:R[dl] and 0x80
1000 0000
精品
0=1。
.
and 1000 0000 __________________ 1000 0000
由3.3.3节可知,TEST指令执行后OF=CF=0;因为结果不为0,故ZF=0;因为最高位为1,故SF=1。
(5)指令功能为:M[R[eax]+R[edx]]←M[R[eax]+R[edx]]*32,即存储单元0x8049380中的内容改变为以下运算
的结果:M[0x8049380]*32=0x908f12a8*32,也即只要将0x908f12a8左移5位即可得到结果。 1001 0000 1000 1111 0001 0010 1010 1000<<5
=0001 0001 1110 0010 0101 0101 0000 0000
因此,指令执行后,单元0x8049380中的内容改变为0x11e25500。显然,这个结果是溢出的。但是,根据表3.5可知,乘法指令不影响标志位,也即并不会使OF=1。
(6)指令功能为:R[cx] ←R[cx]-1,即CX寄存器的内容减一。 0000 0000 0001 0000 + 1111 1111 1111 1111 _________________________ 1 0000 0000 0000 1111
因此,指令执行后CX中的内容从0x0010变为0x000F。由表3.5可知,DEC指令会影响OF、ZF、SF,根据上述运算结果,得到OF=0,ZF=0,SF=0。 如有侵权请联系告知删除,感谢你们的配合!
精品
计算机系统基础第二次作业
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)