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
,