Problema en ASM (IBM y compatibles)

Iniciado por Riki_89D, 9 Octubre 2009, 20:52 PM

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

Riki_89D

Hola que tal estan?

Miren estoi leyendo un libro de ensamblador de 16 bits,para aprender un poco e introducimr en este "lenguaje",el caso es que e llegado a un apartado en donde se da la equivalencia de las instrucciones PUSH y POP,la de guardar valores en la pila i la de recuperarlos,pues me dan este codigo:

Push AX equivale a:


SUB SP,2
MOV [SP],AX



Creo que era asin,y la del POP me la pone aisn:

MOV AX,[SP]
ADD SP,2




Creo que era asin,el caso es que si yo ago el equivalente a push despues con la instruccion POP BX (o cualquier otro registro) por ejemplo POP BX en BX se debera agregar el valor que e guardado con el codigo primero no? por k sesupone que es equivalente a PUSH,y otra cosa yo compilo con el TASM y TLINK,i no me daj poner:

MOV AX,[SP]


pero si lo ago sin corchetes:


MOV AX,SP


entonces si que me deja,es lo mismo sin corchetes que con corchetes,creo que no no? por que no me deja con corchetes?



ayuda porfa :(


salu2



YST

#1
Mas rato me bajo el TASM y lo veo ;) Por mientras puedes usar esto
Código (asm) [Seleccionar]

mov bp,sp
mov ax,[bp]


Yo le enseñe a Kayser a usar objetos en ASM

Riki_89D

Hola yst,gracias por responer,si no me equivoco este codigo que me as pasado seria el equivalente a la instruccion POP no? corrigeme si me equivoco porfavor,lo e probado i no me da ingun error parece que funciona,pero me surge una duda que aún no se resolver,como puedo mostrar por pantalla el valor actual de un registro? igual que podemos mostrar caracteres direccionando el segmento de datos,pues como ago para poder mostrar valores de los registros por pantalla?


salu2

YST

No , no es como el pop AX le faltaria agregar una suma de 2 a SP :P

Lo de mostrar el valor actual en pantalla te hace faltaria pasar de "integer" a "string" ;)


Yo le enseñe a Kayser a usar objetos en ASM

Riki_89D

COMO CONVIERTO LOS TIPOS STRING A INTEGER?


es verdad me faltaria incrementar SP

saludos

YST

#5
Cita de: Riki_89D en 11 Octubre 2009, 18:39 PM
COMO CONVIERTO LOS TIPOS STRING A INTEGER?


es verdad me faltaria incrementar SP

saludos

Para pasar el numero a ascii te tendrias que hacer una funcion que lo hiciera ;)

PD: Lo de interger a string es solo una manera de decirlo ya que en ASM no existen :P


EDIT :

El codigo quedaria algo a si
Código (asm) [Seleccionar]

org 100h

mov dx,8

call WordToString
mov ah,09
mov dx,lb2
int 21h
int 20h
ContarCantidad:
mov di,ax
mov si,0
.bucle:
xor dx,dx
mov bx,10
div bx

inc si
cmp ax,0
jne .bucle
;dec si
ret


;Le pasas el word por DX ;)
WordToString:
cmp dx,10
jle .UnoSolo
push dx
mov ax,dx
call ContarCantidad
pop dx
mov cx,-1
mov word[Cantidad],si
sub [Cantidad],2
.bucle:
push dx
dec si
inc cx

mov bx,1
mov dx,si
.Elevar:
dec dx
imul bx,10
cmp dx,0
jne .Elevar
pop dx
push dx
mov ax,dx
xor dx,dx
div bx
pop dx
mov di,lb2
add di,cx
mov byte[di],al
add  byte[di],'0'
imul ax,bx
sub dx,ax


cmp [Cantidad],cx
jne .bucle
add dl ,'0'
mov di,lb2
add di,cx
mov byte[di+1],dl
.salir:
ret
.UnoSolo:
mov di,lb2
add dl,'0'
mov byte[di],dl
jmp .salir
Cantidad dw ?
lb2 db 200 dup ('$')



Yo le enseñe a Kayser a usar objetos en ASM