Pagina 1 di 1

Problema di assembling con Masm32!

MessaggioInviato: mer feb 06, 2008 2:08 pm
da SolidSnake
Salve a tutti, sono un niubbo con l'assembler [nb] [:-H] . Ho cercato di far partire un semplicissimo hello world, ma dopo averlo salvato nella directory c:\masm32 come un file hello.asm, provando ad assemblarlo dall'editor mi ritorna sempre lo stesso tipo di errore, ovvero:

Assembling: C:\masm32\hello.asm
C:\masm32\prova.asm(12) : error A2004: symbol type conflict
C:\masm32\prova.asm(36) : warning A4023: with /coff switch, leading underscore required for start address : hello

Il codice è questo:
Codice: Seleziona tutto


assume cs:code,ds:data

code segment

    org 100h

hello:

    mov ax,data   
    mov ds,ax   


    lea dx,message
    mov ah,09h
    int 21h

    mov ax,4c00h   
    int 21h

code ends


data segment

    message db  "Hello, World!$"

data ends


end hello




Grazie a chiunque possa offrirmi qualche valido suggerimento per migliorarmi.. [nb] [cry]

MessaggioInviato: mer feb 06, 2008 2:58 pm
da KeyroEvolution
prova a vedere qui :

http://it.wikipedia.org/wiki/Hello_worl ... _syntax.29

ci sono tutti gli hello world che vuoi!

Comunque :

Codice: Seleziona tutto
data segment

message db  "Hello, World!$"


Io sono un po` arrugginito sull'assembly, ma mi pare che lui voglia i data segment prima di tutto. "message" non e` stato definito in alto e si arrabbia un po'.

prova a mettere i data segment dopo code segment.

MessaggioInviato: mer feb 06, 2008 3:42 pm
da SolidSnake
Ho provato.. ma dà sempre lo stesso errore!

Ho provato anche a copiare e incollare l'hello world di wikipedia, ma mi pare che quello sia per il Tasm.. comunque sia non funziona neanche [uhm]

MessaggioInviato: mer feb 06, 2008 6:36 pm
da Aesir
Cestina la guida a 16-bit che stai usando e cercane una a 32-bit (suggerirei Iczelion).

Ciao.

MessaggioInviato: mer feb 06, 2008 7:21 pm
da SolidSnake
Ho provato il sito di Iczelion e ho visto numerosi programmi-esempio scaricabili.
Ansioso di assemblare almeno 1 programmino, ho copiaincollato il tutto su MASM32 e.....

FATAL ERROR A1000 CANNOT OPEN FILE: WINDOWS.INC

Non mi riconosce i file da includere, ma perché ???

Inoltre mi chiedo se anche questo sia a 16bit , dato che è tratto da un libro abbastanza recente...
Codice: Seleziona tutto
STACK SEGMENT
        dichiarazioni relative allo stack
STACK ENDS
DATI SEGMENT
        dichiarazione dei dati
DATI ENDS
CODICE SEGMENTS
        ASSUME CS:CODICE, SS:STACK, DS:DATI
INIZIO:
        MOV AX, DATI
        MOV DS, AX
        istruzione del programma
        MOV AH, 4CH
        INT 21H
CODICE ENDS
        ENDS INIZIO


perché se così non fosse .... [?]

MessaggioInviato: mer feb 06, 2008 8:42 pm
da Aesir
se non ti trova windows.inc è probabilmente prchè gli devi dare il percorso completo in include (tipo include d:\Masm32\include\windows.inc).

Il codice che posti invece è ancora a 16 bit (int 21h è un interrupt di DOS).
Comunque in generale in qualsiasi codice in cui trovi .MODEL flat, stdcall è a 32 bit quelli con .MODEL small, tiny, compact ... sono a 16 bit.

Se vuoi apprendere le basi a 16-bit non è un problema puoi anche usare Masm32 per assemblare però devi trovare un Linker a 16bit.

Ciao!

MessaggioInviato: gio feb 07, 2008 10:54 am
da SolidSnake
se non ti trova windows.inc è probabilmente prchè gli devi dare il percorso completo in include (tipo include d:\Masm32\include\windows.inc).


grazie Aesir! finalmente sono riuscito a far partire un hello word.. già è qualcosa per un noob dell'assembly come me [nb] [std]

Codice: Seleziona tutto
 .386
 .model flat,stdcall
option casemap:none

includelib C:\masm32\lib\kernel32.lib

SetConsoleTitleA PROTO :DWORD
GetStdHandle PROTO     :DWORD
WriteConsoleA PROTO    :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO      :DWORD
Sleep PROTO            :DWORD




 .const

sConsoleTitle  db 'Primo Programma in Assembly',0
sWriteText  db 'Hello, World!!'

 .code


Main PROC
  LOCAL hStdout :DWORD       

  push offset sConsoleTitle   
  call SetConsoleTitleA


  push -11
  call GetStdHandle
  mov hStdout,EAX


  push 0
  push 0
  push 16d
  push offset sWriteText
  push hStdout
  call WriteConsoleA


  push 2000d
  call Sleep


  push 0
  call ExitProcess

Main ENDP


Solo una cosa, sperando di non essere troppo noioso.. perché è necessario includere tutta la directory?
Codice: Seleziona tutto
includelib C:\masm32\lib\kernel32.lib

Non c'è un modo per far si che il file venga incluso senza specificare c:\masm32\lib??

Grazie

MessaggioInviato: gio feb 07, 2008 3:51 pm
da Aesir
Non c'è un modo per far si che il file venga incluso senza specificare c:\masm32\lib??


Forse se i file da includere si trovano nella stessa directory del compilatore no, comunque devi provare non ne sono sicuro.

Comunque benvenuto nel mondo dell'assembly!

Ciao!