将伪代码翻译成汇编
Translate pseudo code to assembly
我正在尝试将一些 C 伪代码转换为 i386 汇编代码,但始终无法正确完成。
n=1;
s=50;
a=0;
while(n > 0) {
a=s/n;
n=n-1;
}
print a;
以上代码将通过编译器转换为汇编代码,结果为:
.data
variables: .space 104
msg: .asciz "Message %d\n"
.text
.global main
main:
push
pop variables+52
push
pop variables+72
push [=11=]
pop variables+0
L000:
push variables+52
push [=11=]
pop %ebx
pop %eax
cmp %ebx,%eax
jl L001
push variables+72
push variables+52
pop %ebx
pop %eax
xor %edx,%edx
idivl %ebx
push %eax
pop variables+0
push variables+52
push
pop %ebx
pop %eax
sub %ebx,%eax
push %eax
pop variables+52
jmp L000
L001:
push variables+0
push $msg
call printf
add ,%esp
leave
ret
我无法正确获取 运行 的代码。它会导致分段错误。我得到的输出是:
Message 0
Segmentation fault (core dumped)
错误是 "division by zero"。 jl L001
如果 (n<0) 则离开循环,但如果 (n<=0) 它应该离开。所以将其更改为 jle L001
(jle = 小于或等于则跳转)。
另外,leave
是错误的。没有需要反转的序言。删除它。
我正在尝试将一些 C 伪代码转换为 i386 汇编代码,但始终无法正确完成。
n=1;
s=50;
a=0;
while(n > 0) {
a=s/n;
n=n-1;
}
print a;
以上代码将通过编译器转换为汇编代码,结果为:
.data
variables: .space 104
msg: .asciz "Message %d\n"
.text
.global main
main:
push
pop variables+52
push
pop variables+72
push [=11=]
pop variables+0
L000:
push variables+52
push [=11=]
pop %ebx
pop %eax
cmp %ebx,%eax
jl L001
push variables+72
push variables+52
pop %ebx
pop %eax
xor %edx,%edx
idivl %ebx
push %eax
pop variables+0
push variables+52
push
pop %ebx
pop %eax
sub %ebx,%eax
push %eax
pop variables+52
jmp L000
L001:
push variables+0
push $msg
call printf
add ,%esp
leave
ret
我无法正确获取 运行 的代码。它会导致分段错误。我得到的输出是:
Message 0
Segmentation fault (core dumped)
错误是 "division by zero"。 jl L001
如果 (n<0) 则离开循环,但如果 (n<=0) 它应该离开。所以将其更改为 jle L001
(jle = 小于或等于则跳转)。
另外,leave
是错误的。没有需要反转的序言。删除它。