Как в регистрах работать со значениями >127 - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Решал задачу "Если в однобайтовом целом числе есть непарное кол-во нулевых разрядов вывести "Y", иначе "N"" У меня все работает, НО, только с числами от 0 до 127, а работать с 128-255 не выходит, подскажите, как написать эту программу, но чтобы она работала и с числами от 128-255 МОЙ КОД:
program Task34;
uses Crt;
var b:shortint;
var res:char;
begin
ClrScr;
readln(b);
asm
   mov bh,00000001b
   mov ch,0
   @loop:
   mov ah,b
   cmp bh,10000000b
   je @out
   and ah,bh
   cmp ah,bh
   jne @inc
   shl bh,1
   jmp @loop
 
   @inc:
   inc ch
   shl bh,1
   jmp @loop
 
   @out:
   cmp ah,10000000b
   je @next
   inc ch
   @next:
   and ch,00000001b
   cmp ch,00000001b
   je @y
 
   mov res,'N'
   jmp @exit
 
   @y:
   mov res,'Y'
   
   @exit:
   end;
writeln(res);
readln
end.

Решение задачи: «Как в регистрах работать со значениями >127»

textual
Листинг программы
program Task34;
uses Crt;
var b:shortint;
var res:char;
begin
ClrScr;
readln(b);
asm
   mov  cx,8
   mov  al,b
   xor  bl,bl
@loop:
   shr  al,1
   adc  bl,0
   loop @loop
   mov  res,'N'
   shr  bl,1
   jnc   @exit
   mov  res,'Y'
@exit:
   end;
writeln(res);
readln
end.

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Считает восьмеричное число из регистра BL и сохраняет его в регистре AL.
  2. Затем выполняет цикл, в котором сдвигает значение в регистре AL вправо на 1 бит и добавляет 0 к результату. Это продолжается до тех пор, пока самый старший бит не станет 0 (что означает, что число стало однозначным).
  3. Если значение в регистре BL не равно 0 после цикла, то это означает, что исходное число было отрицательным, и в результате выводится Y.
  4. Если значение в регистре BL равно 0 после цикла, то исходное число было положительным, и в результате выводится N.

Оцени полезность:

9   голосов , оценка 3.556 из 5