Online Compiler Nasm

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`, а не значение, которое в ней хранится. Для загрузки значения нужно использовать квадратные скобки.