给定任何 8 位负整数(符号介于 -1 和 -128 之间),HLA 中的右移会导致溢出,我不明白为什么。如果移动一次,它应该基本上将值除以 2。这对于正数是正确的,但对于负数显然不是。为什么?例如,如果输入 -10,则结果为 +123。
Program cpy;
#include ("stdlib.hhf")
#include ("hla.hhf")
static
i:int8;
begin cpy;
stdout.put("Enter value to divide by 2: ");
stdin.geti8();
mov(al,i);
shr(1,i); //shift bits one position right
if(@o)then // if overlow
stdout.put("overflow");
endif;
end cpy;