Задать вопрос
@fsociety_one

Перемещение обрезано по месту: R_386_16 у неопределённого символа «.data»?

Добрый вечер, коллеги. В чём суть ошибки, есть цикл на jmp, который должен выполняться 3 раза, в процессах которого он выводит сначала одну рамку (16-20 строки), потом значение массива, в первый круг нулевое, во второй первое и т.д. (22 - 28) и вторую рамку, после чего повторяется.
section .text
        global _start    

_start:
        mov	edx, lenBT
        mov	ecx, borderTop
        mov	ebx, 1
        mov	eax, 4
        int	0x80

        mov     cx, 0
        jmp     cellValues

cellValues:
        push    cx
        mov	edx, 2
        mov	ecx, borderMiddleA
        mov	ebx, 1
        mov	eax, 4
        int	0x80

        mov	edx, 1
        pop     bx
        mov     ecx, [field + bx]
        push    bx
        mov	ebx, 1
        mov	eax, 4
        int	0x80

        mov	edx, 3
        mov	ecx, borderMiddleB
        mov	ebx, 1
        mov	eax, 4
        int	0x80

        pop     cx
        inc     cx
        cmp     cx, 3
        jne     cellValues

        mov	edx, lenBB
        mov	ecx, borderBottom
        mov	ebx, 1
        mov	eax, 4
        int	0x80

        mov     eax, 1   
        int	0x80

section .data
        field db 'X', 'A', 'V', 'A', 'V', 'A', 'V', 0xa

        borderTop db '***** ***** *****', 0dh, 0ah, '*   * *   * *   *', 0xa
        lenBT equ $ - borderTop
        
        borderMiddleA db '* '
        borderMiddleB db ' * '

        borderBottom db 0dh, 0ah, '*   * *   * *   *', 0dh, 0ah, '***** ***** *****', 0xa
        lenBB equ $ - borderBottom

Но возникла проблема, при таком коде выбивает ошибку
main.o: в функции «cellValues»:
main.asm:(.text+0x3e): перемещение обрезано по месту: R_386_16 у неопределённого символа «.data»

Если изменить строку 24 в цикле:
mov ecx, [field + bx]
На:
mov ecx, field
Всё прекрасно работает.
Для сборки использую:
nasm -f elf32 main.asm
ld -m elf_i386 -s -o main main.o
На англ. форумах нашел только то, что эта ошибка чаще с 16-бит программами, хотя я пишу (По крайней мере, мне так кажется) под 32, буду благодарен вашей помощи
  • Вопрос задан
  • 498 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы