2009-10-28 7 views
1

숫자가 dl에 저장되어 있으며이 숫자가 최대 3 자리 숫자로 작동해야합니까? 다음은 숫자 0-9의 작동 코드입니다.DOS 어셈블리 간단한 수학

WriteNumber: 
;; print out number in dl 
push ax 
push dx 
add dl,"0" 
mov ah,02h ; printing one char 
int 21h 
pop dx 
pop ax 
ret 

예를 들어 2 자리 숫자입니다. 나는 dl/10을 가질 수 있었다. 그런 다음 결과와 나머지를 다른 문자로 인쇄하십시오. 하지만 숫자가 DIV의 AX 레지스터에 있어야하기 때문에 오류가 발생했습니다.

나는이 할 필요가

:

mov 인 도끼를, DL

그러나 그것은 작동하지 않습니다?

답변

1

난 당신이 도끼와 DL 서로 다른 크기 때문에

mov ax,dl

을 할 수있을 거라고 생각하지 않습니다.

movzx ax, dl

그리고 당신은 단지 마지막 바이트를 원하는 경우 다음 단지 DL과 알을 참조 : 당신은

mov ax, dx

또는 GJ에서 할 수 있어야합니다.

+0

문자를 읽기위한 int21가 8 비트 레지스터에두고, 그리고 DIV는 16 비트있을 때 나는 그것을 할 수 있습니까? – Algific

+0

레지스터는 실제로 32 비트이지만 실제로 ax, al, ah (전체 eax와 반대)를 사용하여 레지스터를 참조 할 수 있습니다. 그러므로 도끼 레지스터에 8 비트 값을 채우면 괜찮을 것입니다. – mrduclaw

+0

아. 고맙습니다. – Algific

0

나는이 할 필요가 :

mov 인 도끼를, DL

그러나 그것은 작동하지 않습니다?

mov 레지스터가 동일한 크기 (8 비트 또는 16 비트 또는 32 비트) 인 경우 작동합니다.

예 :

mov EAX, EDX 
; or 
mov AX, DX 
; or 
mov AL, DL 
관련 문제