간단한 고수준 어셈블리 프로그램이 있습니다. 여기에서 비트 이동 및 회전 기능을 배우고 있습니다. 나는이 간단한 프로그램을 가지고 비트를 한 바이트 씩 이동하면서 놀 수있다. 마지막 비트가 서명을 위해 예약으로 바이트 (127)에 설정되어캐리 플래그가 설정되지 않는 이유는 무엇입니까?
static
var: int8 := 127;
begin test1;
stdout.put(var, nl);
shl(1, var);
stdout.put(var, nl);
if (@C) then stdout.put("carry set"); endif;
end test1;
그것이
01111111. 번 왼쪽으로 시프트함으로써 반드시 있어야 캐리 플래그가 발생 하는가?
그러나 실제로는 모든 바이트가 왼쪽으로 한 번 이동하므로 바이트는 이제 11111110 또는 -2가됩니다.
이 문제가 매번 발생하면 어떤 조건으로 인해 carry 플래그가 설정됩니까?
플랫폼은 그대로는 부호 비트를 두지 않는 것입니다, 당신이 사용중인 이동 명령은 논리적 비트 쉬프터 것 같다 7 64 비트
가능한 중복 ([조립 CF (캐리)와 (오버플로) 플래그의 약] http://stackoverflow.com/questions/791991/ about-assembly-cfcarry-and-ofoverflow-flag) – Amber
"shift"가 의도 였다고 생각합니다. – WaelJ
@paul, 죄송합니다. 지금 내 질문을 반영하도록 코드를 변경했습니다. –