errores al compilar asm

Iniciado por Drewermerc, 3 Mayo 2014, 22:15 PM

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

Drewermerc

hola a todos.
bueno apenas estoy empesando con programacion asm y bueno quise compilar.

Código (asm) [Seleccionar]

.MODEL SMALL

Stack SEGMENT STACK 'STACK'
DB 200h DUP(?)
Stack ENDS

Data SEGMENT 'DATA'
strMensaje db   "hola mundo", 10, 13, "$"
strMensajedos db "este es otro mensaje", 10, 13, "$"
Data ENDS

Code SEGMENT 'CODE'
ASSUME CS:Code, DS:Data, SS:Stack


Inicio PROC
mov ax,data
mov ds,ax
mov dx,offset strMensajedos
int 21h
mov dx,offset strMensajedos
int 21h
mov ax, 4c00h
int 21h
Inicio ENDP
Code ENDS
END Inicio




cuando lo compilo en windows 8 x64 me salen estos errores y warnings:
C:\nasm-2.11.02\prog>yasm-1.2.0-win64.exe -f win64 -o c:\nasm-2.11.02\prog\uno.asm.o  c:\nasm-2.11.02\prog\uno.asm
c:\nasm-2.11.02\prog\uno.asm:3: warning: Unrecognized string qualifier
c:\nasm-2.11.02\prog\uno.asm:4: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:10: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:13: error: junk at end of line, first unrecognized character is `:'
c:\nasm-2.11.02\prog\uno.asm:13: warning: `DS' segment register ignored in 64-bit mode
c:\nasm-2.11.02\prog\uno.asm:13: warning: `SS' segment register ignored in 64-bit mode
c:\nasm-2.11.02\prog\uno.asm:16: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:17: error: undefined symbol `data' (first use)
c:\nasm-2.11.02\prog\uno.asm:17: error:  (Each undefined symbol is reported only once.)
c:\nasm-2.11.02\prog\uno.asm:18: warning: `ds' segment register ignored in 64-bit mode
c:\nasm-2.11.02\prog\uno.asm:19: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:19: error: undefined symbol `offset' (first use)
c:\nasm-2.11.02\prog\uno.asm:29: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:30: error: instruction expected after label

C:\nasm-2.11.02\prog>

y cuando compilo en winxp me sale esto.
C:\nasm>nasm.exe -f win32 -o c:\prog\dos.exe c:\prog\dos.asm
c:\prog\dos.asm:1: error: attempt to define a local label before any non-local l
abels
c:\prog\dos.asm:1: error: parser: instruction expected
c:\prog\dos.asm:4: error: comma expected after operand 1
c:\prog\dos.asm:5: error: symbol `Pila' redefined
c:\prog\dos.asm:5: error: parser: instruction expected
c:\prog\dos.asm:9: error: symbol `Datos' redefined
c:\prog\dos.asm:9: error: parser: instruction expected
c:\prog\dos.asm:12: error: parser: instruction expected
c:\prog\dos.asm:14: error: parser: instruction expected
c:\prog\dos.asm:18: error: comma, colon, decorator or end of line expected after
operand
c:\prog\dos.asm:23: error: symbol `Inicio' redefined
c:\prog\dos.asm:23: error: parser: instruction expected
c:\prog\dos.asm:24: error: symbol `Codigo' redefined
c:\prog\dos.asm:24: error: parser: instruction expected
c:\prog\dos.asm:25: error: parser: instruction expected

C:\nasm>

tambien ya intente hacer primero el archivo .o y despues el .exe pero al intentar crear el .o mesalen los mismos errores.
bueno espero que me pueda ayudar saludos Drewermerc.

Eternal Idol

Esos son errores al ensamblar pero igual hay otro problema de concepto, ese codigo es de 16 bits para MS-DOS y vos estas intentando usar un ensamblador de 64/32 bits para Windows. Ademas hay que tener en cuenta que cada ensamblador tiene una sintaxis y no necesariamente soporta la de otros ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Drewermerc

hola Eternal Idol.
gracias por responder.

bueno pues ya pude compilar pero en linux cuando intento compilar en windows ya sea 8 o xp el .o se crea bien pero al crear el .exe me dice lo siguiente:

primero creo el .o asi:
nasm -f elf64 -o c:\nasm-2.11.02\hola2.o c:\nasm-2.11.02\hola2.nasm
despues al crear el .exe me da ese error:
ldrdf.exe -o c:\nasm-2.11.02\hola2.exe  c:\nasm-2.11.02\hola2.o
ldrdf:c:\nasm-2.11.02\hola2.o: invalid file format

tambien quisiera que me ayudaras con estas dudas.
1.-queria saber por que algunos tutoriales en internet compilar asm de 16bist en win7.
2.-si compilo asm de x32 este funcionara en cualquier sistema x32.
3.-si compilo asm x32 funcionara en x64 o tengo que programarlo especialmente para x64.
4.-bueno por ultimo qusiera saber si entonces ya no se usa asm de 16bits.

bueno gracias de nuevo espero que me puedas ayudar.

Eternal Idol

Cita de: Drewermerc en  4 Mayo 2014, 01:10 AMbueno pues ya pude compilar pero en linux cuando intento compilar en windows ya sea 8 o xp el .o se crea bien pero al crear el .exe me dice lo siguiente:

Me sorprende bastante que lo hayas podido ensamblar (no compilar) en Linux, tal vez estes equivocado ... igual es imposible que funcione el ejecutable ya que usa los servicios propios de MS-DOS (los de la interrupcion 21h).

Cita de: Drewermerc en  4 Mayo 2014, 01:10 AM1.-queria saber por que algunos tutoriales en internet compilar asm de 16bist en win7.
2.-si compilo asm de x32 este funcionara en cualquier sistema x32.
3.-si compilo asm x32 funcionara en x64 o tengo que programarlo especialmente para x64.
4.-bueno por ultimo qusiera saber si entonces ya no se usa asm de 16bits.

En las versiones de 32 bits de Windows modernas todavia se pueden ejecutar programas de 16 bits.

Si ensamblas un programa de 32 bits para el procesador x86 funcionara en cualquier S.O. que soporte el formato de ejecutable ... es decir nativamente un programa para Windows funcionara en Windows.

Los procesadores de x64 tiene un modo de compatibilidad con x86, Windows lo usa por ejemplo.

Muy poco, todos los S.O.s modernos trabajan en 32 y 64 bits.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Drewermerc

hola si tienes razon es ensamblar y bueno es que creo que se me olvido mencionar que pude compilar pero encontrado el codigo para x32 y x64.
mira este es el codigo de x32.
entonces no saber a que se debera el error que me da al tratar de generar el .exe
Código (asm) [Seleccionar]

global _start            ; global entry point export for ld

section .text
_start:

    ; sys_write(stdout, message, length)

    mov eax, 4        ; sys_write syscall
    mov ebx, 1        ; stdout
    mov ecx, message    ; message address
    mov edx, length        ; message string length
    int 80h

    ; sys_exit(return_code)

    mov eax, 1        ; sys_exit syscall
    mov ebx, 0        ; return 0 (success)
    int 80h

section .data
    message: db 'Hello, world!',0x0A    ; message and newline
    length: equ $-message            ; NASM definition pseudo-instruction


Eternal Idol

La clave estaba aca:
Si ensamblas un programa de 32 bits para el procesador x86 funcionara en cualquier S.O. que soporte el formato de ejecutable ... es decir nativamente un programa para Windows funcionara en Windows.

Con ese codigo no podes generar un .exe (PE) para Windows, es un ELF para Linux (usa los servicios propios de este S.O., los de la interrupcion 080h) como le pasas de argumento. Y obviamente Windows no soporta nativamente un ELF ...

PD. x32 no existe, hay 32 bits, 64 bits, x86, x64, mira en Wikipedia.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Drewermerc

#6
gracias por la aclaracion.
entonces programar esm en linux y wndows es diferente.
nose si tengas un tutorial o alguna informacion sobre programacion de asm de 32bits en windows y lunux es que no encuentro nada que me funcione y encuentro casi pura informacion de 16bits.
y bueno nose si sepas es que tambien e queri probar con masm pero al instalar me dice que nesesito tener microsoft visual studio c++ express redistributable 2005.
espeor que me puedas ayudar.

Eternal Idol

Si, es diferente, cada S.O. provee unos servicios y una forma de acceder a ellos.

En los temas con chincheta de este subforo tenes toda la informacion que queres, en este por ejemplo esta el enlace a los tutoriales de Iczelion:
http://foro.elhacker.net/asm/entry_point-t256455.0.html

El redistributable lo podes bajar de Internet facilmente, buscalo en Google, es redistribuible como su nombre lo indica.

http://blogs.msdn.com/b/nikolad/archive/2006/04/11/download-location-for-vcredist.aspx
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Drewermerc

holagracias pro responder.
nose si sepas de alguna otra paguian por que los intente descargar pero ningun link funciona todo dicen error file no found.
bueno espero que me puedas ayudar.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón