所以基本上在这里学习y86。我有这个 C 代码,我正在尝试转换为 y86 程序集。我不断收到此错误:
PC = 0x2058a090, Invalid instruciton address
Stopped in 2 steps at PC = 0x2058a090. Exception 'ADR', CC Z=1, S=0, O=0
Changes to registers:
%esp: 0x00000000 0x00000004
changes to memory:
基本上我试图翻译这个c代码:
int main(){
int i, j;
i = 0;
j = 0;
if(i>j){
i=i+5;
}
else{
i = 0;
j++;
}
}
转 Y86 代码:
main:
pushl %ebp
rrmovl %esp, %ebp
mrmovl 2(%ebp), %esi #esi = 1
mrmovl 4(%ebp), %ecx #ecx = i
mrmovl 8(%ebp), %edx #edx = j
mrmovl 12(%ebp), %ebx #ebx = 5
irmovl $1, %esi
irmovl $0, %ecx # i = 0 (ecx)
irmovl $0, %edx # j = 0 (edx
irmovl $5, %ebx
subl %edx, %ecx
irmovl $0, %ecx
jg L4
L2: #else statement
irmovl $0, %ecx #i = 0
addl %esi, %edx
rmmovl %edx, 8(%ebp) #new value of j to j memory
rmmovl %ecx, 4(%ebp) #new value of i to i memory
je End
L4: #if statement
addl %ebx, %ecx #add 5(ebx) to i(ecx)
rmmovl %ecx, 4(%ebp) #assign new value of i
je End
End:
rrmovl %ebp, %esp
popl %ebp
ret
谁能告诉我错误来自哪里?我知道 ADR 意味着程序正在尝试从无效的内存地址写入或读取。谢谢!