2014-01-30 2 views
2

보조 플래그는 하위 니블이 상위 니블에 대한 올림을 생성 할 때 설정됩니다. 예 :X86 프로세서의 보조 플래그

1001 9 
    1001 9 
    ---- ---- 
1 0010 18 

이 경우 axillary carry가 설정됩니다.

올바른 BCD 응답을 얻으려면 BCD를 추가하는 동안 낮은 자리 니블에 0110을 추가하는 데이 캐리가 사용된다고 들었습니다.

그러나이 경우를 캐리는이 니블에서 생성되지 않습니다이 경우

1001 9 
0011 3 
---- --- 
1100 12 

생각은, 보조 캐리가 설정되지하지만 대답은 올바른 BCD 추가하지 않다. 그런 다음 프로세서가 응답을 수정하고 올바른 BCD 응답을 얻으라는 메시지를 표시합니다.

+0

BCD는 1970 년대에 중요 존재 여부를 확인하는 것이 단지 AF 아니다 10 진수 수학을 사용하는 썸휠, 닉시 튜브 및 계산기가있었습니다. 그게 다 없어 졌어. 그리고 지침도 마찬가지입니다, 그들은 x64에서 이월되지 않았습니다. 당신은 이것으로 당신의 시간을 낭비하고 있습니다. –

답변

3

나머지 의미는 DAA (또는 AAA)입니다. 전체, 그들은 (DAA 용)입니다

당신이 볼 그래서
IF 64-Bit Mode 
    THEN 
    #UD; 
    ELSE 
    old_AL ← AL; 
    old_CF ← CF; 
    CF ← 0; 
    IF (((AL AND 0FH) > 9) or AF = 1) 
     THEN 
     AL ← AL + 6; 
     CF ← old_CF or (Carry from AL ← AL + 6); 
     AF ← 1; 
     ELSE 
     AF ← 0; 
     FI; 
    IF ((old_AL > 99H) or (old_CF = 1)) 
     THEN 
     AL ← AL + 60H; 
     CF ← 1; 
     ELSE 
     CF ← 0; 
    FI; 
FI; 

,이 문제는, 그것은 또한 숫자가 다시 때> 9.

1

DAA 또는 AAA을 수동으로 사용해야합니다. > 9 인 경우 현재 니블을 조정하고 상위 니블에 1을 추가합니다.

+0

보조 플래그에 다른 용도가 있습니다 – Danny

+0

이것은 새로운 질문이며 너무 광범위합니다. CF에 대해서는 [Intel documentation] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)에서 확인할 수 있습니다. – m0skit0