计算机系统基础第二次作业
3、对于以下AT&T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀,并说明每个操作数的寻址方式。
(1)mov 8(%ebp, %ebx, 4), %ax
(2)mov %al, 12(%ebp)
(3)add ( , %ebx,4), %ebx
(4)or (%ebx), %dh
(5)push $0xF8
(6)mov $0xFFF0, %eax
(7)test %cx, %cx
(8)lea 8(%ebx, %esi), %eax
答:如下表所示:
4. 使用汇编器处理以下各行AT&T格式代码时都会产生错误,请说明每一行存在什么错误。
(1)movl 0xFF, (%eax) (2)movb %ax, 12(%ebp)
(3)addl %ecx, $0xF0 (4)orw $0xFFFF0, (%ebx)
(5)addb $0xF8, (%dl) (6)movl %bx, %eax
(7)andl %esi, %esx (8)movw 8(%ebp, , 4), %ax
答:
(1)书写错误。因为源操作数是立即数0xFF ,所以需要在前面加上‘$’
(2)由于源操作数(%ax)是16位,而长度后缀是字节‘b’,所以不一致,应改为‘movw ’
(3)目的操作数不能是立即数寻址
(4)操作数位数超过16位,而长度后缀为16位的‘w’,应改为‘orl ’
(5)不能用8位寄存器作为目的操作数地址所在寄存器
(6)源操作数寄存器与目的操作数寄存器长度不一致