У меня есть 32-разрядное число, хранящееся в eax, и 32-разрядное число, хранящееся в ebx. Я хочу объединить их в одно 64-битное число, определенное в разделе .bss как finalNum, но я не уверен, как это сделать. Я попыталсяПереместить несколько регистров в одну переменную
mov esi, finalNum
mov [esi], eax
add esi, 32
mov [esi], ebx
, но по какой-то причине, когда я пытаюсь распечатать finalNum он не печатает правильно, так я предполагаю, что есть проблема в этих 4-х строк. Также это в 32-битном nasm.
редактировать:
Так что я попытался
mov esi, finalNum
mov [esi+0], eax
mov [esi+4], ebx
Но, все-таки придумать какой-то странной печати, я объявил finalNum в
finalNum: resb 8
вы думаете, это может быть проблема?
Edit:
Enter first number to multiply:
34567
Enter second number to multiply:
76543
First Num: 34567
Second Num: 76543
Addition: 111110
Multiply:
▒EAX : 0
EBX : -1649105415
, как вы видите, когда я умножать и распечатать я получаю странный характер.
Edit: Код для распечатки результатов
mov eax, SYSCALL_WRITE ; write message
mov ebx, STDOUT
mov ecx, msg7
mov edx, len7
int 080h
mov eax, SYSCALL_WRITE ; write user input
mov ebx, STDOUT
mov ecx, finalNum
mov edx, BUFLENFINAL
int 080h
BUFLENFINAL = 8, кстати
«Странная печать» может быть много чего. Отправьте соответствующее сообщение об ошибке, так как представленный вами код выглядит действительным. –
Вы посмотрели руководство NASM или посмотрели примеры NASM в Интернете? – lurker
Каков твой код для печати 'finalNum'? – Nayuki