Kompilacja asemblerowa

meteor-666

Użytkownik
Dołączył
Czerwiec 7, 2008
Posty
24
Błąd wyskakuje podczas linkowania, a jego treść to " Fatal: 16 bit segments not supported in module program.asm "
Używam tasm.

Oto kod programy:

.model tiny
.code


start:
mov ah, 9
mov dx, offset info
int 21h

mov ah, 0
int 16h

mov ax, 4C00h
int 21h

info db "Czesc.$"

end start[/b]

Dlaczego tak jest?
 

Mo4x

Były Moderator
Dołączył
Grudzień 26, 2005
Posty
704
Odpowiedz znaleziona na google w 30 sekund:
"You are trying to make a 16 bit exe out of a 32 bit linker/assembler. Try using a differrent (16 bit version ) of the linker."
 

meteor-666

Użytkownik
Dołączył
Czerwiec 7, 2008
Posty
24
<div class='quotetop'>CYTAT(Mo4x @ 6.09.2009, 8:08) <{POST_SNAPBACK}></div>
Odpowiedz znaleziona na google w 30 sekund:
"You are trying to make a 16 bit exe out of a 32 bit linker/assembler. Try using a differrent (16 bit version ) of the linker."[/b]
Mam tylko w folderze tasm32.exe i tlink32.exe. Co zrobić żeby działało pod wersje 32?
 

meteor-666

Użytkownik
Dołączył
Czerwiec 7, 2008
Posty
24
Zmieniłem trochę kod i teraz mam tak

.486 ;to chyba oznacza ze chce pracować na wersji 32?
.model flat, stdcall

.const
info db 'Witaj Świecie.$',0

.code



start:

mov ah, 9

mov dx, offset info

int 21h

mov ah, 0

int 16h

mov ax, 4C00h

int 21h



end start[/b]

Teraz podczas "tasm32 program.asm" mam taki oto błąd: "Offset or pointer is 32-bit
---------------------------------------------------------------
Udało się ;p Znalazłem jakiś inny tasm (bez 32). Czym one się różnią? I dlaczego poza "witaj świecie" są jakieś dziwne znaki?
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
twój kod jest 16-bitowy. to jest niemożlywo korzystać z 32-bit linkera dla tego kodu. znależ tlink (bez "32") w seci albo spróbuj alink

pozdraw
-------------------
.486 ; oznacza że można używać intrukcji procesora 486
.model flat ; oznacza ze chce pracować na wersji 32

kluczi komandniego rządka tasm/tlink także mają znaczenije
 

meteor-666

Użytkownik
Dołączył
Czerwiec 7, 2008
Posty
24
Napisze to co pisałem wyżej:
Udało się ;p Znalazłem jakiś inny tasm (bez 32). Czym one się różnią? I dlaczego poza "witaj świecie" są jakieś dziwne znaki?

Jak rozpoznać czy kod jest 16-bitowy czy 32?
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Dziwne znaki są przez to że w okienku cmd jest inne kodowanie niż w Windows. Bitowość rozpoznaje się po rejestrach i budowie kodu.
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
bitowość się wyznaczają przez model albo przez "use 32"/"use 16". bitowość wpływa na adresacju. 32-bitow linker nie może linkować 16-bitowy aplikacji, a 16-bitow linker nie może linkować 32-bitowy aplikacji, ale nie ma różnicy jaky asembler używać dla asembluwanja: 32-bitow albo 16-bitow.

"$" - znaczka konca rządka dla funkcji 9 DOS i "0" tam nie trzeba. Jesli chcesz programuwać dla DOS - trzeba uczyć się funkcji DOS i BIOS, również jesli chcesz programuwać dla Windows - trzeba uczyć się WinAPI. tylko asemblera będze zamało
<


pozdraw
 
Do góry Bottom