Ayuda con este ejercicio

Iniciado por danielo-, 11 Octubre 2010, 01:18 AM

0 Miembros y 1 Visitante están viendo este tema.

danielo-

Hola a todos, ya habia querido antes iniciarme en ensamblador, y esta vez me toca a a la fuerza aprender, pues llevo esta materia :s jaja.. como sea, nos han marcado de tarea un pequeño programa que lea del teclado 4 numeros del 1 al 15 y meterlos en una pila, pero en forma de hexadecimal, es decir que yo pueda ingresar 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f y lo unico que tiene que hacer el programa es devolverme el valor real, es decir, si meto a que me devuelva 10, b->11, c->12 y asi sucesivamente.

Se que debería ser sencillo, pero esque no se nada de ensamblador :(, hasta ahorita llevo la entrada y el almacenaje en pila, planeaba que al momento de hacer el pop hiciera la conversion, pero no e podido !  :( :( :( a ver si agluien me ayuda, hasta aorita esto es lo que tengo:

Código (asm) [Seleccionar]

pila segment stack "STACK"
dw 4 DUP(0)
pila ends

data segment
data ends

code segment

assume cs:code,ds:data,ss:pila
inicio:
mov ax, data    ;un db es una palabra de 16 its
mov ds, ax     ;//cargar el segmento de codigo en memoria

MOV     AH,01h ;Le meto 1 a ah para que meta en al
INT     21h ;Espera el teclado
mov ah,0h ;limpio ah
push ax ;lo meto en la pila

MOV     AH,01h
INT     21h
mov ah,0h
push ax

MOV     AH,01h
INT     21h
mov ah,0h
push ax

MOV     AH,01h
INT     21h
mov ah,0h
push ax

;lo hice 4 veces, y ahora a hacer el pop
;POP
pop ax                 ;Y ya no se que mas hacer!
cmp    ax,'a'          ; una comparacion talvez?
jz salt                    ; asi se hace la comparacion?

salt proc near        ;pero que  pasa si no es una a?
sub al,31h              ; como ponerle el else ???? (o algo asi)
mov dl,al
mov ah,02h
int 21h
salt endp

MOV AX, 4C00h  ;halt    dos dice que es la terminacion del programa
INT 21h  ;;int rebisa lo que esta en 21h.
                ;es la interrupcion de pantalla con la funcion 4c que es la de hald


code ends
end inicio
; que perdido estoy,ayudenme :(


EI: juntando mensajes.

Ninguna idea?
Ya estoy cerca de terminar, pero a ver si me resuelven esta duda,
yo realizo una comparacion con cmp, si es igual a la cadena, hago el salto a una etiqueta con el je y si no es igual salto hacia otra etiqueta con el jne, pero ahora, el problema esque como esta una etiqueta detras de otra, pues me hace el proceso seguido, ya se que estoy haciendo algo mal, pues no deberia suceder esto, pero esque no se como indicarle que despues de realizar la etiqueta vuelva a la linea de donde salto  :-\, intente hacerlo con call y proc, pero esque no me deja poner je call procedimiento :S ayuden a este novato porfa

Иōҳ

busca en google como hacer la conversion hexadecimal a decimal luego lo adaptas, no es muy dificil.

Y sobre el else

.IF
.ELSE
.ENDIF

?
Eres adicto a la Ing. Inversa? -> www.noxsoft.net