アセンブリコード(NASM)でファイルを削除しようとしましたが、 "mov dx、file_name"セクションの "再配置がデータに適合するように切り捨てられました"というエラーが発生しました。参考までに、 "input.txt"ファイルを削除しようとしていたファイルが自分のフォルダに存在しています。この種の問題で私は確信が持てません。私が逃したところを教えてください。アセンブリ内のファイルを削除
Linuxの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
Linux実行可能ファイルで16ビットMS-DOS関数を使用することはできません。 Linuxシステムコールを使用してプログラムを終了するのと同じ方法で、Linuxシステムコールを使用してファイルを削除する必要があります。 –
このエラーメッセージは、メモリオフセットが32bの32bモードになっているときに、ラベルオフセットを16bレジスタにロードするための作業を特に指しています。 'mov edx、file_name'を実行しますか?警告なしでコンパイルします(ただし、Linuxでは' int 21h'が動作しないため動作しません)。 – Ped7g