Язык ассемблера, программа для проверки деления числа на 2 и печати чисел в цикле - PullRequest
0 голосов
/ 03 июня 2018

У меня есть макрос, который работает и получает большие числа на языке ассемблера.Я пытался сделать программу, которая печатала бы числа, делимые на 2. Мне кажется, что что-то не так с сценарием сравнения, который я написал.

mov cx, number1 
check:
mov dx, cx
mov bx, 2
div bx
cmp ax, 0
je divide
add ax, 1

loop:
divide:
printNumber ax
add ax, 2
cmp ax, number2
je end
jmp loop

1 Ответ

0 голосов
/ 03 июня 2018

Если число, для которого вы хотите проверить, делится ли оно на 2, находится в число1 , и вы знаете, что слово деление div bx фактически делит DX:AX, тогда вам нужно переместить число в AX и ноль DX.

check:
mov ax, number1 
xor dx, dx
mov bx, 2
div bx

Фактическое определение тогда получается из проверки остатка из этого деления на 2. Остаток находится в регистре DX!

cmp dx, 0
je  divisible

Но все это излишне, поскольку проверка на то, является ли число даже делимым на 2, является простым вопросом поиска его младшего бита:

test number1, 1
jz   divisible
...