Home > Software design >  x86_64 Warning : character constant too long [-w other] (nasm)
x86_64 Warning : character constant too long [-w other] (nasm)

Time:10-16

I am writing a compiler in attempt to switch my programming language from interpreted to compiled

this is the code my script generated:

section .bss
  digitSpace resb 100
  digitSpacePos resb 8
    string_at_index_0 resb 12
    string_at_index_0_len resb 4

section .data

section .text
    global _start
_start:
   mov rax, "Hello world"
   mov [string_at_index_0], rax
   mov byte [string_at_index_0_len], 13

   mov rax, 1
   mov rdi, 1
   mov rsi, string_at_index_0
   mov rdx, string_at_index_0_len
   syscall

   mov rax, 60
   mov rdi, 0
   syscall

when i run this code with nasm -f elf64 -o test.o test.asm i get this warning:

warning:character constant too long [-w other]

can anyone help me with this , and also if anyone could suggest a better way to output a Hello world that would be helpful too!

CodePudding user response:

mov rax, "Hello world"

RAX is an 64-bit (8 byte) register, you are trying to put 11 bytes into it.

Here is a simple hello world:

As can be seen you don't want to put the message inside the register, you want to put a pointer to the message into rsi.

section .data

msg: db "Hello World"

section .text
    global _start
_start:

   mov rax, 1 ; write function
   mov rdi, 1 ; to stdout
   mov rsi, msg ; pointer to message
   mov rdx, 11 ; length of the message
   syscall ; write

Ideally, your compiler should declare string literals in .data section and pass pointers to them when using them in functions.

  • Related