|
|
|
|
|
by higherhalf
951 days ago
|
|
This can be done even simpler: global _start
_start:
jmp next
string:
db `Hello World!\n`
len: equ $ - string
next:
mov ecx, string
mov edx, len
mov ebx, 1
mov eax, 4
int 80h
mov ebx, 0
mov eax, 1
int 80h
For NASM, it can also be put into a macro, for example printing to video memory at 0xb8000: %macro print 1
mov ecx, %%loop_start - %%strdata
mov eax, 0x0700
jmp %%loop_start
%%strdata: db %1
%%loop_start:
mov al, [%%strdata + ecx - 1]
mov [0xb8000 + ecx * 2 - 2], ax
loop %%loop_start
%endmacro
|
|
This example uses a fixed symbolic reference ("string:") and is the normal way to do it. The trick is to it in a PC relative way.