Я пытаюсь удалить файл в ассемблере (NASM), но у меня возникла ошибка «усечение переселения в соответствии с данными» в разделе «mov dx, file_name». FYI, файл, который я пытался удалить файл «input.txt», существует в моей папке. Я не настолько уверен в этом вопросе. Дайте мне знать, где я пропустил.Удалить файл в сборке
section.data
; filename
file_name DB "input.txt"
section .text
global _start
_start:
nop
mov dx, file_name ; getting an error : relocation truncated to fit R_386_16 against .data
mov ah,41h ; function 41h - delete file
int 21h ; call DOS service
endIt:
nop
;Exit the program back to linux legally
mov eax, 1 ; exit system call value
mov ebx, 0 ; exit return code
int 80h ; Call the kernel
Вы не можете использовать 16-разрядные функции MS-DOS в исполняемом файле Linux. Чтобы удалить файл, вам необходимо использовать системный вызов Linux, так же, как вы используете системный вызов Linux для выхода из программы. –
Это сообщение об ошибке относится конкретно к вашим усилиям по загрузке смещения метки в регистр 16b, тогда как вы находитесь в режиме 32b, где смещения памяти составляют 32b. Будете ли вы делать «mov edx, file_name», он будет компилироваться без предупреждения (но это не сработало, потому что 'int 21h' под linux не работает). – Ped7g