Duda de Assembly

Iniciado por defconx, 22 Septiembre 2012, 18:00 PM

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

defconx

Hola Gente,

No se si este es el lugar mas indicado para postear esto, pero si no lo es asi, haganmelo saber.

Si alguno tiene experiencia en lenguaje assembly, podria decirme si la directiva de compilacion WORD PTR para direccionamiento indirecto, se puede usar con la memoria asignada a la pila?

Estoy haciendo este programa y al intentar compilarlo, todas las lineas que incluyen esta directiva dan error de compilacion.
Esto es raro, dado que la directiva ha compilado bien en otros casos.

El programa suma 2 numeros de 32 bits almacenados en memoria, por medio de la subrutina sum32. Se pasa uno de los numeros por referencia y el otro por valor, ambos a traves de la pila.

ORG 1000H
NUM1 DW 0101H
     DW 0101H
NUM2 DW 0909H
     DW 0909H
RES  DW ?
     DW ?
   
ORG 3000H
SUM32: MOV BX,SP
      ADD BX,6
      MOV DX, WORD PTR [BX]
      ADD BX,2
      MOV AX, WORD PTR [BX]
      SUB BX,4
      MOV CX, WORD PTR [BX]
      MOV BX,CX
      ADD AX, WORD PTR [BX]
      ADD BX,2
      ADD DX, WORD PTR [BX]
      MOV BX,SP
      ADD BX,2
      MOV CX, WORD PTR [BX]
      MOV BX,CX
      MOV WORD PTR [BX],AX
      ADD BX,2
      MOV WORD PTR [BX],DX
RET

ORG 2000H
PUSH AX
PUSH BX
PUSH DX
PUSH CX
MOV AX,NUM1
PUSH AX
MOV AX,NUM1+2
PUSH AX
MOV AX,OFFSET NUM2
PUSH AX
CALL SUM32
POP AX
POP AX
POP AX
POP AX
POP CX
POP DX
POP BX
POP AX
HLT
END


Muchas gracias!

Nop+

Cita de: defconx en 22 Septiembre 2012, 18:00 PM
Hola Gente,

MOV DX, WORD PTR [BX]

Esta instrucción esta mal puesta, si tu quieres mover al registro dx, el contenido de BX, debes ponerlo así

Mov DX, Word ptr [EBX] ; pero ojo esto lo que hará es mover lo que hay en la direccion apuntada por ds:bx....


Lo correcto sería

lea ebx,[numero]     ; imagina que numero tiene el valor 6
mov dx, word ptr [ebx] ; moverá  6 a dx



fary

Cita de: Nop+ en 24 Septiembre 2012, 23:50 PM
Esta instrucción esta mal puesta, si tu quieres mover al registro dx, el contenido de BX, debes ponerlo así

Mov DX, Word ptr [EBX] ; pero ojo esto lo que hará es mover lo que hay en la direccion apuntada por ds:bx....


Lo correcto sería

lea ebx,[numero]     ; imagina que numero tiene el valor 6
mov dx, word ptr [ebx] ; moverá  6 a dx




Esa instrucción esta correctamente puesta ;)




Respondiendo al tema me imagino que quieres hacer algo así:

Código (asm) [Seleccionar]
mov dx,word ptr [sp]

Que claro que se puede hacer :)

Yo mas bien creo que tu error esta en usar la instruccion org varias veces.. eso creo que no se puede hacer  :-\

un saludo!
Un byte a la izquierda.