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
Mas rato me bajo el TASM y lo veo ;) Por mientras puedes usar esto
mov bp,sp
mov ax,[bp]
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
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" ;)
COMO CONVIERTO LOS TIPOS STRING A INTEGER?
es verdad me faltaria incrementar SP
saludos
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
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 ('$')