Добрый вечер, коллеги. В чём суть ошибки, есть цикл на 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, буду благодарен вашей помощи