#assembly #compare #comparison #sasm
#сборка #Сравнить #сравнение #sasm
Вопрос:
Сейчас я работаю над проектом, в котором мне нужно выполнить умножение матрицы. Я указал в комментарии в приведенном ниже коде, что я не могу изменить указанные переменные и их тип. Поэтому я не могу переключиться на макрос section .resb и должен использовать section .data. Я пытаюсь протестировать программу, сравнивая rA
и cB
сначала перед выполнением операции.
Я решил распечатать строки, чтобы проверить, работает ли программа так, как задумано. По-видимому, программа считает, что две переменные, которые я сравниваю, не равны, когда предполагается, что все наоборот. Я неправильно EAX
использовал и EBX
?
%include "io.inc"
section .data
;Below variables are to be used.
rA db 2
cA db 3
matrixA db 2,3,4
db 1,0,0
rB db 3
cB db 2
matrixB db 0,127
db 1,100
db 0,10
section .text
global CMAIN
CMAIN:
mov ebp, esp; for correct debugging
;write your code here
lea eax, [rA]
lea ebx, [cB]
mov ax, [eax]
mov bx, [ebx]
cmp ax, bx ;this line is supposed to compare if both digits are equal
JE bothEqual
JNE notEqual
bothEqual:
PRINT_STRING "Can be multiplied"
NEWLINE
PRINT_DEC 1, eax
NEWLINE
PRINT_DEC 1, ebx
jmp FINISH
notEqual:
PRINT_STRING "Can not be multiplied"
NEWLINE
PRINT_DEC 1, eax ; Check the value of eax. [In this case, the expected value of eax = 2 but program prints 770]
NEWLINE
PRINT_DEC 1, ebx ; Check the value of ebx. [In this case, the expected value of ebx = 2 but program prints 2]
jmp FINISH
FINISH:
nop
xor eax, eax
ret
Комментарии:
1. Я попытался удалить двойные скобки, но это приводит только к сообщению об ошибке
error: invalid combination of opcode and operands
.2. Извините, я виноват. При ближайшем рассмотрении … все ваши
rA
,rB
,cA
иcB
определяются как байты сdb
, но вы перемещаете и сравниваете 16-битные значения, например,mov ax, [eax]
иcmp ax, bx
. Вы должны использоватьmov al, [eax]
иmov bl, [ebx]
затемcmp al, bl
. Или вы можете оставить инструкции в покое и определить эти элементы сdw
помощью вместоdb
.