Ensamblaje de DOS Matemáticas simples
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á?
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