Bueno, esta es mi primera incursion en este lenguaje despues de leer y ver ejemplos. Lo que hago en el programa es leer un nº por teclado 2 bytes y lo que quiero es imprimirlo por pantalla y aqui es donde tengo el problema:
La tecnica que sigo es hallar el divisor (1,10,100,1000,10000) dependiendo de las cifras que tiene el nº introducido por el usuario; luego voy dividiendo el nº por el divisor, despues divido el divisor (para quitarle ceros) y ahi se produce un error de DIVIDE ERROR, el proc es el siguiente:
las definiciones que realizo son:
a dw ? ;contiene el nº introducido
diez dw 10 ;cte de valor 10
PRINTNUM PROC NEAR
mov dl,10 ; introduzco 1 retorno de carro
mov ah,02
int 21h
mov dl,13 ; introduzco 1 retorno de carro
mov ah,02
int 21h
mov ax,1 ; contador para saber el nº de cifras q tiene a
mov bx,a ; cargo en bx la variable a
bucle:
mul diez
cmp ax,bx
jbe bucle ; multiplico ax por 10 hasta que ax>bx ojo el resultado es dx:ax
div diez ; asi tiene ax las mismas cifras q bx en este punto
push ax ; guardo el divisor
SacaCifra:
pop cx ; meto el divisor en cx
mov ax,bx ; cargo en ax la variable cuyos digitos quiero mostrar
div cx ; y la divido por cx q será 1,10,100,1000 o 10000
mov bx,dx ; guardo el resto q es lo q queda por sacar
mov dx,ax ; ya que en ax está el cociente
add dl,30h ; así tengo el caracter ascii q coresponde al digito
mov ah,02 ; lo saco en pantalla
int 21h
mov ax,cx ; cargo el divisor en ax
div diez ; y le quito 1 cero ------------ ERROR QUE ME DA: DIVIDE ERROR ------------
push ax ; lo guardo en la pila
cmp ax,1
jae SacaCifra
ret
PRINTNUM ENDP
Por cierto, al que quiera aprender como yo estoy haciendo, le recomiendo el emu8086 que es emulador, ensamblador y desensamblador todo en 1, funciona en Win9x,ME y XP y lo bueno es q si haces burradas, no se cuelga ya q es un emulador;) Si quisierais el nº de serie os podria pasar el mio para registrarlo;)
Salu2 y Espero vuestras respuestas