Hola, estoy desarrollando un compilador en Basic 6.0 y hasta ahora he logrado superar muchos obstaculos (procesamiento y traducción de ecuaciones matematicas + funciones a ensamblador, adición de APIS y otras cosas) pero tengo un problema con las cadenas.
Para que se hagan una idea con lo que estoy tratando les doy el siguiente código de ejemplo de mi compilador.
El problema esta al tratar de rellenar la variable "Cadenita" con "Soy una vulgar cadena".
Ya que al visualizar el MessageBox amarece "Soy un0" como texto.
El código ensamblador generado es el siguiente.
Como se puede notar, para asignarle a Cadenita el texto "Soy una vulgar cadena" utilizo strcat ya que yo asumí que strcat copia el segundo parametro en el primero, ¿que estoy haciendo mal?
Para que se hagan una idea con lo que estoy tratando les doy el siguiente código de ejemplo de mi compilador.
Código [Seleccionar]
API MessageBox(Opcional hWnd:Entero,Texto:Cadena = "Hola soy una cadenita",Título:Cadena = "Soy un sexual título",Opcional Bandera:Entero = 48):Entero, "User32.dll" "MessageBoxA"
Var Cadenita:Cadena
Var OtroParametro:Entero
Var Título:Cadena
Var Cuarto:Entero
Cadenita = "Soy una vulgar cadena"
Título = "mnmnqmnqmnqm"
Cuarto = 48
MessageBox(0,Cadenita,Título,Cuarto)
El problema esta al tratar de rellenar la variable "Cadenita" con "Soy una vulgar cadena".
Ya que al visualizar el MessageBox amarece "Soy un0" como texto.
El código ensamblador generado es el siguiente.
Código [Seleccionar]
; Código generado en Fractor!
include 'C:\Users\DarkBlue\Desktop\Fractor\Macros.inc'
format PE GUI 4.0
.datos
TmpStr0 db "Hola soy una cadenita",0
TmpStr1 db "Soy un sexual título",0
cadenita db ?
otroparametro dd ?
título db ?
cuarto dd ?
TmpStr2 db "Soy una vulgar cadena",0
TmpStr3 db "mnmnqmnqmnqm",0
.código
inicio:
push eax ; Preservamos EAX.
push TmpStr2
push cadenita
ccall [strcat]
add esp,8
pop eax ; Restauramos EAX
push eax ; Preservamos EAX.
push TmpStr3
push título
ccall [strcat] ; POSIBLE ERROR.
add esp,8
pop eax ; Restauramos EAX
push eax ; Preservamos EAX.
push TmpStr2 ; Empujamos el valor de TmpStr2.
push TmpStr3 ; Empujamos el valor de TmpStr3.
mov eax,48 ; Fin del calculo.
mov [cuarto],eax ; Movemos a la variable el valor de EAX.
pop eax ; Restauramos EAX.
push eax ; Preservamos EAX.
push [cuarto] ; Empujamos el valor de cuarto.
push título ; Empujamos el valor de título.
push cadenita ; Empujamos el valor de cadenita.
push 0
call [MessageBox]
pop eax ; Restauramos EAX.
push 0
call [ExitProcess]
entry inicio
; Procedimientos declarados.
; Fin de los procedimientos declarados.
.importar
; APIS declaradas.
library \
Kernel32,'Kernel32.dll',\
msvcrt,'msvcrt.dll',\
User32,'User32.dll'
import \
Kernel32,ExitProcess,'ExitProcess'
import \
msvcrt,strcat,'strcat'
import \
User32,MessageBox,'MessageBoxA'
; Fin APIS.
Como se puede notar, para asignarle a Cadenita el texto "Soy una vulgar cadena" utilizo strcat ya que yo asumí que strcat copia el segundo parametro en el primero, ¿que estoy haciendo mal?