2012-11-26 3 views
0

AH, AL, BHBL 레지스터의 값을 인쇄하는 절차를 만들고 싶습니다. 나는이있다 :어셈블러에서 AH, AL, BH 및 BL 레지스터의 값을 인쇄합니까?

prntABHL: 
    PUSH BL 
    PUSH BH 
    PUSH AL 
    PUSH AH 
    PUSH fourNums ! defined in data as "%d, %d, %d, %d\n" 
    PUSH _PRINTF 
    SYS 
    ADD SP, 12  ! reset stack 
    RET 

이것은 PUSH 지침 4 개의 레지스터 오류가 발생합니다. PUSH은 16 비트 값을 예상하고 AHAL은 8 비트 값이기 때문에 가정합니다. 그렇지 않은 16 비트 긴 경우

어떻게 함수에 인수로 AH, AL, BHBL 레지스터의 값을 지정할 수 있습니다? 이 문제를 해결하기위한 합리적으로 쉬운 방법이 있습니까?

답변

1

예를 들어 8 비트 레지스터의 값을 16 비트 값으로 푸시하면됩니다. cx 또는 임의의 다른 16 비트 범용 레지스터 (cx, dx, bp, si, di)로 자유롭게 :

편집 : movzx 사전 프로세서 (386)를 사용할 수 없습니다. 8088/8086 지침으로 대체되었습니다. 당신이 사용하는 16 비트 범용 레지스터 자유가없는 경우

xor cx, cx 
mov cl, bl 
push cx 
mov cl, bh 
push cx 
mov cl, al 
push cx 
mov cl, ah 
push cx 

, 당신은이 값이 다른 곳에서의 연기 할 저장하고 거기에서 스택 밀어 저장해야합니다.

+0

'MOV CL, BL'을하는 행과 CL에 무언가를 이동시키는 행에 오류 메시지 '등록 오류'가 표시됩니다. 무슨 일이 일어날 지 생각해? 그들은 길이가 일치합니다. –

+0

어떤 어셈블러를 사용하고 있습니까? – nrz

+0

8088 어셈블러를 사용하고 있습니다. –

관련 문제