[asm\linux] blad podczas linkowania

0

umiescilem pytanie w dziale newbie. nikt nie odpowiedzial. myslalem, ze to latwe pytanie.

segment .data
napis db "karol", 0xA
dlugosc equ $-napis

segment .text
global _start
_start:
mov AX, 4
mov BX, 1
mov CX, napis
mov DX, dlugosc
int 0x80

mov ax, 1
mov bx, 0
int 0x80

podczas linkowania wyskakuje mi blad "a.asm:(.text+0xa): relocation truncated to fit: R_386_16 against `.text'" co jest nie tak? (kompilacja w NASM)

0

W newbe ci nie powiedzieli, bo assembler sam w sobie nie jest uważany za coś dla nowych :] Nie podoba mi się

napis db "karol", 0xA

i

int 0x80

Nie próbowałeś użyć po prostu zwykłych wartości hexowych, jak naprzykład 0Ah? To mógł być błąd bo takie wartości z "x" są z reguły używane przy okraślaniu adresów w pamięci...

0
Dream Maker napisał(a)

Nie próbowałeś użyć po prostu zwykłych wartości hexowych, jak naprzykład 0Ah? To mógł być błąd bo takie wartości z "x" są z reguły używane przy okraślaniu adresów w pamięci...

?

A problem ... to nie jest program 32 bitowy? Bo jesli tak to nie mozesz wrzucac adresow ktore sa 32 bitowe do 16 bitowych rejestrow.

np zamiast

mov DX, dlugosc

zrob

mov EDX, dlugosc

ew

mov DX, word dlugosc

Jakby to byly wartosci, np [dlugosc] to kompilator by nie protestowal, tylko wrzucil 16 bitow z adresu dlugosc do dx. Moze pomoze.

0

sprawdzielm z word i [dlugosc], nie dziala. kompiluje tak:
n.a.s.m. -f elf plik.asm
ld -o prog plik.o

0

Zamień wszystkie ax, bx, cx, dx na eax, ebx, ecx, edx

0

ale wlasnie o to mi chodzi, zeby byly 16-bitowe. z 32-bitowymi nie byloby problemow.

0
Karolaq napisał(a)

ale wlasnie o to mi chodzi, zeby byly 16-bitowe. z 32-bitowymi nie byloby problemow.

Pod linuksa 16-bitowy? 8-0
Można wiedzieć po co?

0

no nie wiem. tak zeby programy mniej zajmowaly :d ale czy to oznacza, ze sie nie da napisac na obecnego linuksa 16-bitowej aplikacji?

1 użytkowników online, w tym zalogowanych: 0, gości: 1