Ensamblador - Preguntaaa!!

 
Vista:

Preguntaaa!!

Publicado por Chochi (2 intervenciones) el 28/06/2008 21:04:35
Una pregunta! esque estoy haciendo un programa que no se como seguir, me marca error y me dice 'value out of range' ya no se donde moverle o que hacer pa que me corra! alguien me puede ayudar porfis. Esta es la parte en la que me he atorado, espero que alguien pueda ayudarme

mov ax,'dato1'
push ax
mov ax,'dato2'
push ax
mov ax,'dato3'
push ax
mov ax,'dato4'
push ax
mov ax,'dato5'
push ax
mov ah,0
int 21h

Obviamente antes de esto esta la definicion de memoria, el stack y el inicio de codigo ah! y la definicion de los datos que estoy usando! AYUDA PLISS :(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Preguntaaa!!

Publicado por MSH (120 intervenciones) el 28/06/2008 21:34:51
Esta rutina guarda tus datos en la pila, pero siempre debes asegurarte de que en algun punto de tu código debes sacarlos de ella con las instrucciones pop,popa;según sea el caso. De otra forma al ejecutar el código habrá algún problema de desbordamiento de datos.

De cualquier manera, sería necesario que explicaras qué debe hacer tu código para corregir el problema adecuadamente

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Preguntaaa!!

Publicado por Chochi (2 intervenciones) el 28/06/2008 21:43:04
Ahh ok! muchas gracias por la ayuda. Y bueno, lo que pasa es que mi profe nos dejo terminar este preograma, pero segun lo que nos dijo solo era como un ejemplo de el uso del push, y me extraña que no haya mencionado que le faltaba el pop para que asi nosotros vieramos por donde ir.... pero bueno, el caso es que no se usar el pop...es igual que el push? y donde se pone? en el mismo còdigo donde estou poniendo los push? Muchas gracias por tu ayuda :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Preguntaaa!!

Publicado por MSH (120 intervenciones) el 29/06/2008 05:37:18
No me había fijado en las comillas donde dice 'dato1'. Lo que sucede es que la pila guarda una palabra,(2 bytes), por eso te marca error al ensamblar.

Por ahora dejo un ejemplo (a modo de juego) para que veas como se usa la pila

;Segmento de Pila
PILA SEGMENT PARA STACK 'STACK'
DW 64 DUP(0)
PILA ENDS
;Segmento de datos
DATOS SEGMENT PARA 'DATA'

DATOS ENDS
;Segmento de Codigo
CODIGO SEGMENT PARA 'CODE'
ASSUME DS:DATOS, CS:CODIGO, SS:PILA

PRINCIPAL PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATOS
MOV DS,AX
MOV ES,AX

mov ax,'=2'
push ax
mov ax,'to'
push ax
mov ax,'da'
push ax
mov ax,'to'
push ax
mov ax,'da'
push ax

mov cx,05 ;numero de veces que se va a repetir el loop
ciclo:
pop dx ;el último dato almacenado en la pila se manda a dx
xchg dh,dl ; intercambia datos en el registro
mov ah,02h
int 21h
xchg dh,dl
mov ah,02h
int 21h
loop ciclo ;repite ciclo

mov ax,4c00h ;sale del programa
int 21h

PRINCIPAL ENDP
CODIGO ENDS
END PRINCIPAL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Preguntaaa!!

Publicado por Perceval Ciro (23 intervenciones) el 13/07/2008 07:43:02
Es cierto la pila admite solo registros de 16 bits... Lo que pasa es que el error, no es porque empuje mas de 16 bits a la pila, sino que no esta permitido desplazar mas de 16 bits al registro AX, que obviamente es de 16 bits. Y creo yo que la indicacion 'dato1', seguramente es un variable, fijate si moves el valor de dato1 al registro AX... es decir
mov ax, dato1... siendo una variable DB o DW, tiene que entrar y despues, tambien es cierto lo que marca el amigo MSH, que tenes que retirar todo lo que colocas en la pila.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar