James Harris
2018-12-21 19:49:50 UTC
What's the most readable way to include string literals in asm source code?
Option 1
========
I usually define string literals in a separate block, like this.
;**********
;
; Data section
;
;**********
section .data
msg_started: db "Operation started", 0
msg_finished_errors: db "Operation finished. Number of errors: ", 0
Then, later,
;**********
;
; Text section
;
;**********
mov ebx, msg_started
The downside to that is that the message can be separated from its use
by a few screens-worth of scrolling.
Option 2
========
To avoid a large separation between def and use one could temporarily
drop to the data section as needed in the middle of other code (I'll use
nops to indicate other executable code).
nop
nop
nop
section .data
msg_started: db "Operation started", 0
section .text
mov ebx, msg_started
The downside of that is it is arguably harder to read (and doesn't deal
with duplicate strings well).
Option 3
========
Or, maybe a macro could effect option 2 - something like the following.
(This is illustrative, not tested code.)
mov ebx, string_literal(db "Operation started", 0)
Of course, code layout is not a major issue but it is one of
convenience; and readability is important. So I wondered what other
people do to incorporate strings in code. What have you found to be the
most readable and easiest to work with?
Option 1
========
I usually define string literals in a separate block, like this.
;**********
;
; Data section
;
;**********
section .data
msg_started: db "Operation started", 0
msg_finished_errors: db "Operation finished. Number of errors: ", 0
Then, later,
;**********
;
; Text section
;
;**********
mov ebx, msg_started
The downside to that is that the message can be separated from its use
by a few screens-worth of scrolling.
Option 2
========
To avoid a large separation between def and use one could temporarily
drop to the data section as needed in the middle of other code (I'll use
nops to indicate other executable code).
nop
nop
nop
section .data
msg_started: db "Operation started", 0
section .text
mov ebx, msg_started
The downside of that is it is arguably harder to read (and doesn't deal
with duplicate strings well).
Option 3
========
Or, maybe a macro could effect option 2 - something like the following.
(This is illustrative, not tested code.)
mov ebx, string_literal(db "Operation started", 0)
Of course, code layout is not a major issue but it is one of
convenience; and readability is important. So I wondered what other
people do to incorporate strings in code. What have you found to be the
most readable and easiest to work with?
--
James Harris
James Harris