Я только начал изучать собрание, и я застрял теперь ...Не понимаю, как массивы работают на ассемблере
%include 'io.inc'
global main
section .text
main:
; read a
mov eax, str_a
call io_writestr
call io_readint
mov [nb_array], eax
call io_writeln
; read b
mov eax, str_b
call io_writestr
call io_readint
mov [nb_array + 2], eax
call io_writeln
mov eax, [nb_array]
call io_writeint
call io_writeln
mov eax, [nb_array + 2]
call io_writeint
section .data
nb_array dw 0, 0
str_a db 'a = ', 0
str_b db 'b = ', 0
Итак, у меня есть массив размера в 2 Эле и когда я пытаюсь напечатать первый элемент, он не печатает правильное значение. Хотя я пытаюсь напечатать второй элемент, он печатает правильное значение. Может ли кто-нибудь помочь мне понять, почему это происходит?
Что такое размер 'eax'? Что такое размер 'dw 0'? И как строка '' a = ''(на' str_a') обращается после второго ввода в память? (используйте отладчик и представление памяти) – Ped7g
@ Ped7g Я использую eax только для вывода, поэтому я перемещаю элементы nb_array в eax, чтобы иметь возможность распечатывать их. –
Какой из моих трех вопросов отвечает на это? Нет ИМО. (вам не нужно объяснять мне свой код, я знаю, что вы сделали, и что вы хотели сделать ... Я пытаюсь научить, как найти эти ошибки в будущем) – Ped7g