Как в регистрах работать со значениями >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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д