2013-09-14 2 views
0

Обучение сборке NASM в 32-битном Ubuntu. Я несколько смутился:Почему я не могу напечатать постоянное число в сборке NASM?

В .bss, я оставляю байт для переменной:

num resb 1 

Позже я решил дать ему значение 5:

mov byte [num],5 

И в какой-то момент печати Вне этого:

mov EAX,4 
mov EBX,0 
mov ECX,num 
add ECX,'0' ; From decimal to ASCII 
mov EDX,1 
int 0x80 

Но это ничего не печатает.

Я предполагаю, что проблема в том, что я даю num его значение 5. Изначально я хотел сделать это:

mov byte num,5 

Как я думал, что num относится к положению в памяти, и так mov скопируют 5 в такое положение. Но я получил ошибку говоря

недопустимое сочетание опкодом и операнды

Так в основном, почему программа не печатает 5? И также, почему мое предложение было выше недействительным?

ответ

1

Для печати с использованием int 0x80 и кода 4 вам необходимо указать адрес ECX, чтобы указать адрес байта для печати. Вы добавили '0' в адрес num, который был в ECX, прежде чем вы вызвали процедуру print, так что это был адрес чего-то еще в памяти.

Возможно, вы захотите чего-то подобного. Я создал отдельную область, numout для хранения ASCII-версии num:

numout resb 1 
.... 

mov EAX,4 
mov EBX,0 
mov CL,[num] 
add CL,'0' 
mov [numout],CL 
mov ECX,numout 
mov EDX,1 
int 0x80 
Смежные вопросы