; uso de equ para definir valores
STDIN equ 0
STDOUT equ 1
STDERR equ 2
SYS_READ equ 0
SYS_WRITE equ 1
SYS_EXIT equ 60
; definimos en cajitas las direcciones del texto
; usamos la caja msg y msg2 para guardar los strings
; el 0 al final del texto es para determinar cuando termina
section .data
msg db "Hello world!",10,0
msg2 db "mundo dos",10,0
msg3 db "stop",10,0
; inicio del codigo
section .text
global _start
; macro: practicamente es definir una funcion
%macro exit 0
mov rax, SYS_EXIT
mov rdi, 0
syscall
%endmacro
; ejecucion de todas las funciones e instrucciones
_start:
mov rax, msg
call _print
mov rax, msg2
call _print
mov rax, msg3
call _print
exit
; input: rax como puntero en un string
; output: imprimir el string de rax
; se define la funcion que se utilizara para imprimir texto y
; contar los caracteres
_print:
push rax
mov rbx, 0
; el bucle que cuenta los caracteres
; cuando copia el valor de rax en cl, compara si es igual a 0
; se hace un salto si no son iguales y se repite todo,
; si son iguales, se acaba el bucle
_printLoop:
inc rax
inc rbx
mov cl, [rax]
cmp cl, 0
jne _printLoop
mov rax, SYS_WRITE
mov rdi, STDOUT
pop rsi
mov rdx, rbx
syscall
ret
To embed this project on your website, copy the following code and paste it into your website's HTML: