Pregunta

Tengo un número almacenado en dl, ¿y necesito que funcione para números de hasta tres dígitos? Aquí está el código de trabajo para los dígitos 0-9.

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

Por ejemplo, para dos dígitos. Podría tomar dl / 10. Y luego imprima el resultado y el resto en diferentes caracteres. Pero recibí un error, porque el número debe estar en el registro AX para el DIV.

Necesito hacer esto:

mov axe, dl

¿Pero eso no funcionará?

¿Fue útil?

Solución

No creo que puedas hacer

mov ax, dl

ya que ax y dl son de diferentes tamaños. Deberías poder hacer

mov ax, dx

o de GJ:

movzx ax, dl

Y luego solo haga referencia a dl y al si desea solo el último byte.

Otros consejos

  

Necesito hacer esto:

     

mov axe, dl

     

¿Pero eso no funcionará?

mov funcionará si los registros tienen el mismo tamaño, tanto de 8 bits como de 16 bits o 32 bits.

Ejemplo:

mov EAX, EDX
; or
mov AX, DX
; or
mov AL, DL
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top