Как в регистрах работать со значениями >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.
Объяснение кода листинга программы
Код выполняет следующие действия:
- Считает восьмеричное число из регистра BL и сохраняет его в регистре AL.
- Затем выполняет цикл, в котором сдвигает значение в регистре AL вправо на 1 бит и добавляет 0 к результату. Это продолжается до тех пор, пока самый старший бит не станет 0 (что означает, что число стало однозначным).
- Если значение в регистре BL не равно 0 после цикла, то это означает, что исходное число было отрицательным, и в результате выводится
Y
. - Если значение в регистре BL равно 0 после цикла, то исходное число было положительным, и в результате выводится
N
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д