У меня есть код в сборке, который ведет себя немного странно. У меня есть функция C extern, которая вызывает с asm еще одну функцию из файла .asm. Эта функция C помещает в стек три адреса, используемые моей функцией из файла .asm. Все шло хорошо до тех пор пока это появилось:Два разных значения в одном адресе памяти - сборка
; Let's say we take from the stack first parameter from my C function.
; This parameter is a string of bytes that respect this format:
; - first 4 bytes are the sign representation of a big number
; - second 4 bytes are the length representation of a big number
; - following bytes are the actual big number
section .data
operand1 dd 0
section .text
global main
main:
push ebp
mov ebp, esp
mov eax, [ebp + 8] ; Here eax will contain the address where my big number begins.
lea eax, [eax + 8] ; Here eax will contain the address where
; my actual big number begins.
mov [operand1], eax
PRINT_STRING "[eax] is: "
PRINT_HEX 1, [eax] ; a SASM macro which prints a byte as HEX
NEWLINE
PRINT_STRING "[operand1] is: "
PRINT_HEX 1, [operand1]
NEWLINE
leave
ret
При выполнении этого кода, я получаю на терминале правильный выход для [EAX], и [operand1] он продолжает печать номер, который не изменится, если я могу изменить, что первый параметр моей функции C. Что я здесь делаю неправильно?
Пожалуйста, ответьте на свой вопрос как ответ и отметьте его как правильно. Затем другие пользователи могут видеть, что вопрос решен. – alain
* звонки с * asm * другая функция из файла .asm *: Что? Вам не нужно использовать inline-asm для вызова функции, определенной в файле '.asm'. Просто напишите прототип и назовите его нормально. –