customio.inc
.set stdin, 0x00
.set stdout, 0x01
.set syscall_read, 0x3
.set syscall_write, 0x4
.text
.globl strlen
.globl strcpy
.globl puts
.globl gets
strlen:
push %ebp
mov %esp, %ebp
push %esi
push %ecx
xor %ecx, %ecx
mov 0x8(%ebp), %esi
.strlen_lp:
movb (%esi), %al
cmpb $0x0, %al
je .strlen_lp_fin
inc %esi
inc %ecx
jmp .strlen_lp
.strlen_lp_fin:
mov %ecx, %eax
pop %ecx
pop %esi
leave
ret $0x4
strcpy:
push %ebp
mov %esp, %ebp
push %edi
push %esi
push %ecx
xor %ecx, %ecx
mov 0x8(%ebp), %edi
mov 0xc(%ebp), %esi
.strcmp_lp:
cmpb $0x0, (%esi)
movb $0x0, (%edi)
je .strcmp_lp_fin
movb (%esi), %al
movb %al, (%edi)
inc %esi
inc %edi
inc %ecx
jmp .strcmp_lp
.strcmp_lp_fin:
mov %ecx, %eax
pop %ecx
pop %esi
pop %edi
leave
ret $0x4
puts:
push %ebp
mov %esp, %ebp
push %ebx
push %ecx
push %edx
mov 0x8(%ebp), %ecx
push %ecx
call strlen
mov %eax, %edx
mov $stdout, %ebx
mov $syscall_write, %eax
int $0x80
mov %ecx, %eax
pop %edx
pop %ecx
pop %ebx
leave
ret $0x4
gets:
push %ebp
mov %esp, %ebp
sub $0x1000, %esp
push %esi
push %ebx
push %ecx
push %edx
mov $0x1000, %edx
lea -0x1000(%ebp), %ecx
mov $stdin, %ebx
mov $syscall_read, %eax
int $0x80
mov 0x8(%ebp), %eax
push %ecx
push %eax
call strcpy
pop %edx
pop %ecx
pop %ebx
pop %esi
leave
ret $0x4
main.s
.text
.include "customio.inc"
.globl main
main:
push %ebp
mov %esp, %ebp
push %edx
sub $0x100, %esp
lea -0x100(%ebp), %edx
push $string
call puts
push %edx
call gets
push %edx
call puts
xor %eax, %eax
pop %edx
leave
ret
.section .rodata
string:
.string "Input : "
Posted by RevDev