; Simple example
; Writes Hello World to the output
JMP start
hello: DB "Magdiel Ruiz!" ; Variable
DB 0 ; String terminator
start:
MOV C, hello ; Point to var
MOV D, 232 ; Point to output
CALL print
HLT ; Stop execution
print: ; print(C:*from, D:*to)
PUSH A
PUSH B
MOV B, 0
.loop:
MOV A, [C] ; Get char from var
MOV [D], A ; Write to output
INC C
INC D
CMP B, [C] ; Check if end
JNZ .loop ; jump if not
POP B
POP A
RET
Lenguaje ensamblador en línea 1
Añadir leyenda |
Ahora veremos en el segundo lenguaje ensamblador en línea:
Lenguaje ensamblador en línea 2
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov edx, len ;message length
mov ecx, msg ;message to write
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Magdiel RUiz',0xa ;our dear string
len equ $ - msg ;length of our dear string
Y por ultimo en el ultimo lenguaje ensamblador en línea:
Lenguaje ensamblador en línea 3
;nasm 2.11.08
section .data
hello: db 'Magdiel Ruiz!',10 ; 'Magdiel Ruiz!' plus a linefeed character
helloLen: equ $-hello ; Length of the 'Hello world!' string
section .text
global _start
_start:
mov eax,4 ; The system call for write (sys_write)
mov ebx,1 ; File descriptor 1 - standard output
mov ecx,hello ; Put the offset of hello in ecx
mov edx,helloLen ; helloLen is a constant, so we don't need to say
; mov edx,[helloLen] to get it's actual value
int 80h ; Call the kernel
mov eax,1 ; The system call for exit (sys_exit)
mov ebx,0 ; Exit with return code of 0 (no error)
int 80h;
No hay comentarios:
Publicar un comentario