fl/th.s

101 lines
1.1 KiB
ArmAsm

bits 64
default rel
global trap
global trapsz
global cat
global sel
extern scmap
section .data
sel: db 1
trapsz: dd cat-trap;
buf: db 0
section .text
trap:
;mov rax, 60
;syscall
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
push rsi
push rbp
push rbx
push rdx
push rcx
mov r8, [rdi]
mov r9, [rdi+8]
mov r10, [rdi+16]
mov r11, [rdi+24]
mov r12, [rdi+32]
mov r13, [rdi+40]
mov r14, [rdi+48]
mov r15, [rdi+56]
mov rsi, [rdi+72]
mov rbp, [rdi+80]
mov rbx, [rdi+88]
mov rdx, [rdi+96]
mov rax, [rdi+104]
mov rcx, [rdi+112]
mov rdi, [rdi+64]
syscall
pop rcx
pop rdx
pop rbx
pop rbp
pop rsi
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
ret
push rbx
;mov ax, word [rel scmap + 2*eax]
lea rbx, [scmap]
lea rax, [rbx + 2*rax]
movzx eax, ax
pop rbx
ret
cat:
push r12
push rbx
mov r12, rdi ; fd to read
mov rbx, rsi ; bytes to read
.l: mov eax, 3 ; read
mov rdi, r12
lea rsi, [buf]
mov rdx, 1
syscall
mov eax, 4 ; write
mov rdi, 1
lea rsi, [buf]
mov rdx, 1
syscall
dec rbx
jnz .l
pop rbx
pop r12
ret