0
AT & T 어셈블리 프로그램에서 다른 출력을 제공하는 산술 연산을 해결하려고합니다. 산술 연산은 ((i-(a+b)*(g+c))/((h*e)+(f+j)*d)
과 같습니다. 값은 다음과 같습니다.어셈블리에서 산술 연산에 문제가 발생했습니다.
a: .long 1
b: .long 2
c: .long 3
d: .long 1
e: .long 1
f: .long 1
g: .long 2
h: .long 2
i: .long 20
j: .long 2
제 계산 결과에 따르면 1이라는 가정하에 계산됩니다. 그러나 아래에서 전체 코드를 제공합니다.
.data
intout: .string "Wert %d\n"
a: .long 1
b: .long 2
c: .long 3
d: .long 1
e: .long 1
f: .long 1
g: .long 2
h: .long 2
i: .long 20
j: .long 2
.text
.globl main
main:
movl i, % eax
pushl % eax# i in the stack
movl a, % eax
movl b, % ebx
addl % eax, % ebx# a + b
pushl % ebx#(a + b) in the stack
movl g, % eax
movl c, % ebx
addl % eax, % ebx# g + c
popl % eax# get(a + b)
imull % ebx#(a + b) * (g + c), Result in eax
popl % ebx# get i
subl % ebx, % eax#[i - (a + b) * (g + c)]
pushl % eax#[i - (a + b) * (g + c)] in the stack
movl h, % eax
movl e, % ebx
imul % ebx#(h * e)
pushl % eax#(h * e) in the stack
movl f, % eax
movl j, % ebx
addl % eax, % ebx#(f + j)
movl d, % eax
imul % ebx#(f + j) * d
popl % eax# get(h * e)
addl % eax, % ebx#[(h * e) + (f + j) * d]
popl % eax#[i - (a + b) * (g + c)]
idivl % ebx#[i - (a + b) * (g + c)]/[(h * e) + (f + j) * d]
# Value = "Wert" in % eax given
pushl % eax
pushl $intout
call printf
addl $8, % esp
# Exit
movl $1, % eax
int $0x80
P.S. 실수를 저 지르더라도 알려주십시오.
덕분에 많이 ... 문제가 로했다'POPL %의 EBX 번호 내가 subl % EBX, % eax에 번호 [내가 얻을 c)]' 여기 내가 바꾼 것은 : popl % ebx # get i subl % eax, % ebx # [i - (a + b) * (g + c)] pushl % ebx # [i - (a + b) * (g + c)] 스택 – user1946440