Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - alienxz77b

#1
ASM / Error de ld en nasm
2 Noviembre 2021, 03:17 AM
Hola, tengo el siguiente error de ld:
c:/program files (x86)/sasm/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lib32

y no se como solucionarlo, ya busque en google pero no funciona  :-(
Gracias de antemano por la ayuda ;D
#2
Creo que esta es la solucion:
Código (asm) [Seleccionar]
%include "io.inc"
%macro print 1
    push eax
    push ecx
    mov eax, %1
    mov ecx, 0
    while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    jmp PRINT_CHAR [eax+ecx-1]
    jne while
    pop ecx
    pop eax
%endmacro
%macro strcpy 2
    push eax
    push ecx
    push edx
    push SI
    mov edx, %1
    mov eax, %2
    mov ecx, -1
    .while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    mov SI, [eax+ecx]
    mov [edx+ecx], SI
    jne .while
    pop SI
    pop edx
    pop ecx
    pop eax
%endmacro
;segment data
section .data
msg db "Hola", 13, 0
section .bss
msg2 resb 100
section .text
global CMAIN
CMAIN:
    xor eax, eax
    strcpy msg2, msg
    print msg2
    ret 0

;D
#3
De hecho solo se pueden imprimir cadenas usando el terminador nulo como en C  ;D
#4
ASM / Re: Variables macros de NASM
20 Octubre 2021, 23:29 PM
msg2 es una variable de ejemplo que quiero utilizar para imprimir un Hola mundo
Ejemplo:
Código (asm) [Seleccionar]


%macro printHelloWorld 0
section .data
    msg db "Hola mundo", 0
    section .text
    push ecx
    mov ecx, -1
    while:
    add ecx, 1
    cmp byte [msg +ecx], 0
    jmp PRINT_CHAR [msg +ecx]
    jne while
    pop ecx
%endmacro
section .text
global CMAIN
CMAIN:
    xor eax, eax
    printHelloWorld
    ret 0
#5
Según Wikipedia:
https://es.wikipedia.org/wiki/Strcpy
La sintaxis de strcopy esta bien  ;D
Codigo sin bugs o algo parecido (puede que tenga errores  :()
Código (asm) [Seleccionar]
%include "io.inc"
%macro print 1
    push eax
    push ecx
    mov eax, %1
    mov ecx, -1
    while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    jmp PRINT_CHAR [eax+ecx]
    jne while
    pop ecx
    pop eax
%endmacro
%macro strcpy 2
    push eax
    push ecx
    push edx
    push SI
    mov edx, %1
    mov eax, %2
    mov ecx, -1
    .while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    mov SI, [eax+ecx]
    mov [edx+ecx], SI
    jne .while
    pop SI
    pop edx
    pop ecx
    pop eax
%endmacro
;segment data
section .data
msg db "Hola", 0
section .bss
msg2 resb 100
section .text
global CMAIN
CMAIN:
    xor eax, eax
    strcpy msg2, msg
    print msg2
    ret 0
#6
Ya arregle el código  :D:
Código (asm) [Seleccionar]
%include "io.inc"
%macro print 1
    push eax
    push ecx
    mov eax, %1
    mov ecx, -1
    while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    jmp PRINT_CHAR [eax+ecx]
    jne while
    pop ecx
    pop eax
%endmacro
%macro strcpy 2
    push eax
    push ecx
    push edx
    push SI
    mov edx, %1
    mov eax, %2
    mov ecx, -1
    .while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    mov SI, [eax+ecx]
    mov [edx+ecx], SI
    jne .while
    pop SI
    pop edx
    pop ecx
    pop eax
%endmacro
;segment data
section .data
msg db "Hola", 13, 0
section .bss
msg2 resb 100
section .text
global CMAIN
CMAIN:
    xor eax, eax
    strcpy msg2, msg
    print msg2
    ret 0

Gracias por su ayuda  a todos los que respondieron ;D
Nos vemos  ;)
#7
ASM / Variables macros de NASM
20 Octubre 2021, 02:26 AM
Hola  :D gracias por las repuestas a esta pregunta :)
Tengo el siguiente código de ensamblador nasm que no funciona  :-\ pero no se porque:
Código (asm) [Seleccionar]

%include "io.inc"
%macro print 1
   %%msg2 dw 12 ; esta la linea del error :(
   push eax
   push ecx
   mov eax, %1
   mov ecx, -1
   while:
   add ecx, 1
   cmp byte [eax+ecx], 0
   jmp PRINT_CHAR [eax+ecx]
   jne while
   pop ecx
   pop eax
%endmacro
section .data
msg db "Hola", 13, 0
section .text
global CMAIN
CMAIN:
   xor eax, eax
   print msg
   ret 0

Mi intención con esto es crear una variable en una macro para usarla en un bucle, esta en una macro que imprime caracteres para que sepa si funciona o no  ;D pero no funciona  :(, si cambio el valor de 12 a 500 o 250, se traba el programa y no ejecuta :(, tambien si uso algo como;
Código (asm) [Seleccionar]
%%msg2 db "Hola mundo"
No funciona
Gracias por las respuestas :)
Edit:
Logre hacerlo funcionar con el siguiente codigo:
Código (asm) [Seleccionar]

%macro print 1
section .data
    msg2 db "Hola mundo";
    section .text
    push eax
    push ecx
    mov eax, %1
    mov ecx, -1
    while:
    add ecx, 1
    cmp byte [eax+ecx], 0
    jmp PRINT_CHAR [eax+ecx]
    jne while
    pop ecx
    pop eax
%endmacro
#8
Hola gracias por responder  ;D, al parecer sigue tirando el mismo error  :-\
#9
Decidí cambiarme a Linux porque Windows es muy difícil  ;D
#10
Hola :), primero gracias por tomarse el tiempo para leer esta pregunta  ;D

Tengo este código ensamblador de NASM que realice para probar una teoría de condicionales
el chiste es que no puedo hacerlo correr debido a un problema que me sale:
Código (mpasm) [Seleccionar]
%include "io.inc"
%macro print 1
   push eax
   push ecx
   mov eax, %1
   mov ecx, -1
   while:
   add ecx, 1
   cmp byte [eax+ecx], 0
   jmp PRINT_CHAR [eax+ecx]
   jne while
   pop ecx
   pop eax
%endmacro
%macro strcpy 2
   push eax
   push ecx
   push edx
   mov eax, %1
   mov edx, %2
   mov ecx, -1
   .while:
   add ecx, 1
   cmp byte [eax+ecx], 0
   mov [edx+ecx], byte [eax+1]; al parecer en esta linea de codigo esta el error  :-[
   jne .while
   je print edx
   pop edx
   pop ecx
   pop eax
%endmacro
;segment data
section .data
msg db "Hola", 13, 0
msg2 db "     ", 0
section .text
global CMAIN
CMAIN:
   xor eax, eax
   call strcpy msg, msg2
   ret 0

Error:

C:\Users\Windows\AppData\Local\Temp\SASM\program.asm:40: error: invalid combination of opcode and operands
gcc.exe: error: C:\Users\Windows\AppData\Local\Temp\SASM\program.o: No such file or directory


No se que hacer para solucionarlo, programo en windows bajo el IDE de SASM
Agradezco toda la ayuda  ;D
Edit:
En la linea 25 era:
Código (asm) [Seleccionar]
    mov [edx+ecx], byte [eax+ecx]; al parecer en esta linea de codigo esta el error  :-[
:xD