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

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

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

Здравствуйте! Решал задачу "Если в однобайтовом целом числе есть непарное кол-во нулевых разрядов вывести "Y", иначе "N"" У меня все работает, НО, только с числами от 0 до 127, а работать с 128-255 не выходит, подскажите, как написать эту программу, но чтобы она работала и с числами от 128-255 МОЙ КОД:
Листинг программы
  1. program Task34;
  2. uses Crt;
  3. var b:shortint;
  4. var res:char;
  5. begin
  6. ClrScr;
  7. readln(b);
  8. asm
  9. mov bh,00000001b
  10. mov ch,0
  11. @loop:
  12. mov ah,b
  13. cmp bh,10000000b
  14. je @out
  15. and ah,bh
  16. cmp ah,bh
  17. jne @inc
  18. shl bh,1
  19. jmp @loop
  20. @inc:
  21. inc ch
  22. shl bh,1
  23. jmp @loop
  24. @out:
  25. cmp ah,10000000b
  26. je @next
  27. inc ch
  28. @next:
  29. and ch,00000001b
  30. cmp ch,00000001b
  31. je @y
  32. mov res,'N'
  33. jmp @exit
  34. @y:
  35. mov res,'Y'
  36. @exit:
  37. end;
  38. writeln(res);
  39. readln
  40. end.

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

textual
Листинг программы
  1. program Task34;
  2. uses Crt;
  3. var b:shortint;
  4. var res:char;
  5. begin
  6. ClrScr;
  7. readln(b);
  8. asm
  9.    mov  cx,8
  10.    mov  al,b
  11.    xor  bl,bl
  12. @loop:
  13.    shr  al,1
  14.    adc  bl,0
  15.    loop @loop
  16.    mov  res,'N'
  17.    shr  bl,1
  18.    jnc   @exit
  19.    mov  res,'Y'
  20. @exit:
  21.    end;
  22. writeln(res);
  23. readln
  24. end.

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

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут