-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_input.in
38 lines (37 loc) · 1.64 KB
/
test_input.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;
; This program runs in 32-bit protected mode.
; build: nasm -f elf -F stabs name.asm
; link: ld -o name name.o
;
; In 64-bit long mode you can use 64-bit registers
; e.g. rax instead of eax, rbx instead of ebx, etc.
; Also change "-f elf " for "-f elf64" in build command.
;
section .data; section for initialized data
str: db 'Hello world!', 0Ah; message string with new-line char
; at the end (10 decimal)
str_len: equ $ - str ; calcs length of string (bytes) by
; subtracting this address ($ symbol)
; from the str's start address
section .text ; this is the code section
global _start ; _start is the entry point and needs global
; scope to be 'seen' by the linker --
; equivalent to main() in C/C++
_start: ; definition of _start procedure begins here
mov eax, 4 ; specify the sys_write function code
; (from OS vector table)
mov ebx, 1 ; specify file descriptor stdout -- in gnu/linux,
; everything's treated as a file, even hardware
; devices
mov ecx, str ; move start _address_ of string message to ecx
; register
mov edx, str_len ; move length of message (in bytes)
int 80h ; interrupt kernel to perform the system call we
; just set up - in gnu/linux services are
; requested through the kernel
mov eax, 1 ; specify sys_exit function code
; (from OS vector table)
mov ebx, 0 ; specify return code for OS
; (zero tells OS everything went fine)
int 80h ; interrupt kernel to perform system call
; (to exit)