Условный переход в NASM не срабатывает после сравнения XOR, несмотря на совпадение двоичного результатаLinux

Ответить
Anonymous
 Условный переход в NASM не срабатывает после сравнения XOR, несмотря на совпадение двоичного результата

Сообщение Anonymous »

Код: Выделить всё

section .data

section .bss
num1 resb 2
num2 resb 2
num3 resb 2

section .text
global _start

_start:

mov eax, 3
mov ebx, 0
mov ecx, num1
mov edx, 2
int 0x80

mov al, [num1]
sub al, '0'
add al, 9 ;I added 9 here
mov bl, al

mov eax, 3
mov ebx, 0
mov ecx, num2
mov edx, 2
int 0x80

mov al, [num2]
sub al, '0'
mov bh, al

mov eax, 3
mov ebx, 0
mov ecx, num3
mov edx, 2
int 0x80

mov al, [num3]
sub al, '0'
mov cl, al

mov al, bl
mov ah, 0
mul bh

mov al, bl
xor al, cl
and al, 0000110b
cmp al, 0000110b ;compare al to 0110
je high_priority

standard_priority:
mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, msg2len
int 0x80
jmp exit_program

high_priority:
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, msg1len
int 0x80

exit_program:
mov eax, 1
int 0x80
Поэтому моя цель в этом коде — создать арифметическое выражение типа val = (num1 +9)*num2, затем я возьму значение val и выполню xor для val и num3, затем использую результат xor для сравнения его с фиксированным значением (0110), и если оно равно, оно переходит к high_priority, иначе оно переходит к Standard_priority.
Каким-то образом он показывает стандарт для ввода, например:

Код: Выделить всё

num1 : 3
num2 : 5
num3 : 2
где 60 = (3+9)*5 тогда 60 xor 2 равно 62, что в двоичном виде равно 111110, что соответствует сравнению с 0110, однако оно все равно идет прямо к стандартному_приоритету, а не прыгает. что мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/797 ... atching-bi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»