0
section .data
intArray dw 100,90,80,70,60
twoNums db ' %d %d ',0,10
num dw 10
numIs db ' %d ',10,0
hello : db 'hello',10,0
section .text
global main
extern printf
main :
mov ebx,intArray
mov esi,0
arrayTravel:
movzx eax,word[intArray+esi]
movzx ebx,word[intArray+esi+2]
push ebx
push eax
push twoNums
call printf
add esp,12
sub eax,ebx
push eax
push numIs
call printf
add esp,8
ret
результат должен быть 10, а не я т давая -78Почему результат неполноценности неверен? сборка x86
спасибо, что я заменил add esp, 12 с добавлением esp, 4 затем использовал pop для обоих regs. работающ отлично. большое спасибо. – matheromqq
@matheromqq, в то время как ваше исправление может работать в этом случае, оно не будет делать этого вообще. Здесь параметры функции (передаваемые по значению) копируются в стек для передачи функции. Однако, если вызывающая конвенция не говорит иначе, вызываемая функция имеет право изменять эти копии. Поэтому вы должны сохранять значения в месте, которое контролирует вызывающая функция. например, (сохраненный) регистр, стек, память и т. д. С другой стороны, если вы предполагаете, что, как вы, кажется, делаете, что регистры не сохраняются, вы делаете жизнь намного сложнее для себя! –