Я underdstand, что это очень глупо вопрос, которого, но я не могу понять ответ на какое-то время
Как правильно объявить и определить «переменные» в ГАС AT & T ассемблере?
Например, я хочу буфер для 5 байтов, две 1-байтовые переменные (первоначально с 0 значением), 2-байтная переменная с 0 и 2-байтовой переменной с 10.
Этот код не работает правильно, не менее отладчик говорит (в первой строке программы, после этих объявлений, всего nop
инструкция), что b
и c
- большие цифры вместо нулей.Определение «переменные» на языке ассемблера
.bss
.lcomm r, 5
.data
a: .byte 0
b: .byte 0
c: .word 0
d: .word 10
Кажется, это хорошо для меня. Возможно, ваш отладчик читает 'b' и' c' как 'dwords', и в этом случае' b' и 'c' могут быть' 0x0a0000' и '0x0a00' или больше. – user35443
Или, может быть, отладчик показывает адреса, а не значения. Вы не показывали, что вы делали в отладчике, и какой из них вы используете, но для печати 'a' вы можете использовать' x/b & a' в 'gdb'. – Jester
Вот как вы определяете переменные в сборке GAS. Возможно, ваш отладчик не знает, что 'b' и' c' должны быть 8-битными и 16-разрядными. Отладочная информация, сгенерированная ассемблерами, не так хороша, как сгенерированная компиляторами. –