extern io_get_dec, io_print_hex, io_newline
section .data
a dw 1
addr dd $
var dd 0x1234F00D
section .bss
cntr resd 1
section .text
global main
main:
call io_get_dec
add dword [addr], eax
mov eax, [addr]
call io_print_hex
call io_newline
mov eax, addr
call io_print_hex
call io_newline
xor eax, eax
ret
1) Этот код считывает число, прибавляет его к значению по метке `addr`, затем выводит в шестнадцатеричном виде: сначала изменённое значение по адресу `addr`, потом сам адрес метки `addr`.
2) Обрати внимание, что `addr` изначально хранит адрес инструкции, на которой находится (из-за `$`). При прибавлении ввода пользователя происходит изменение этого адреса в памяти, что может привести к неожиданному поведению.
3) Учти, что `mov eax, addr` загружает в `eax` адрес переменной `addr`, а не значение, которое в ней хранится. Для загрузки значения нужно использовать квадратные скобки.