diff --git a/README.md b/README.md index d042411..896acb0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # figASM -`figasm` è una semplice port in Assembly del celebre [figa](github.com/crisbal/kslf.git), celebre pacchetto per Arch Linux, una volta disponibile nella AUR ma bannato dal mantenitore @il\_muflone per comprensibili ragioni politically correct: +`figasm x86\_64` è una semplice port in Assembly del celebre [figa](github.com/crisbal/kslf.git), celebre pacchetto per Arch Linux, una volta disponibile nella AUR ma bannato dal mantenitore @il\_muflone per comprensibili ragioni politically correct: ![](https://i.imgur.com/1TQXOgX.png) @@ -16,13 +16,15 @@ Ma noi non lo pensavamo. A ben vedere, neanche lui stesso lo pensava: Questa volta, invece, il profeta @il\_muflone ci vide giusto. Perché la `figa` avrebbe fatto il suo ritorno di botto. Ma questa volta in pieno stile arch: nessun lentissimo script interpretato. Tutto Assembly. Nativo. Super ottimizzato per l'unica architettura supportata da Arch Linux, ossia x86\_64. -## Perché dovrei usare `figasm` anziché `figa`? +Ma anche il venerando @chic\_luke si sbagliava, perché la `figasm` era scritto per x86. Questo vuol dire che non è veramente ottimizzato per x86\_64, qui sono arrivato io. + +## Perché dovrei usare `figasm x86\_64` anziché `figa x86`? Perché la matematica non è un'opinione e i numeri parlano chiaro: -![](https://i.imgur.com/PX7C4pI.png) +![](https://i.imgur.com/PZQVmv1.png) -# Come faccio a compilare `figasm` da sorgente? +# Come faccio a compilare `figasm x86\_64` da sorgente? ```bash as -o figa.o figa.s diff --git a/figa b/figa new file mode 100755 index 0000000..843b512 Binary files /dev/null and b/figa differ diff --git a/figa.o b/figa.o new file mode 100644 index 0000000..1ced127 Binary files /dev/null and b/figa.o differ diff --git a/figa.s b/figa.s index 147d541..b04a68d 100644 --- a/figa.s +++ b/figa.s @@ -1,31 +1,33 @@ -.section .data - - schifo: - .ascii "Che schifo la figa.\n" - - schifo_len: - .long . - schifo +/* vim: set filetype=gas : */ - meglio: - .ascii "Meglio Linux!\n" +.data + figa: .string "Che schifo la figa\n" + figa_len: .quad .- figa - meglio_len: - .long . - meglio + linux: .string "Meglio Linux!\n" + linux_len: .long .- linux + + +.text + .globl _start -.section .text - .global _start _start: - movl $4, %eax - movl $1, %ebx - leal schifo, %ecx - movl schifo_len, %edx - int $0x80 - movl $4, %eax - movl $1, %ebx - leal meglio, %ecx - movl meglio_len, %edx - int $0x80 - movl $1, %eax - xorl %ebx, %ebx - int $0x80 + push %rbp + mov %rsp, %rbp + + mov $1, %rax + mov $1, %rdi + lea figa, %rsi + mov figa_len, %rdx + syscall + + mov $1, %rax + lea linux, %rsi + mov linux_len, %rdx + syscall + + xor %rdi, %rdi + mov $60, %rax + syscall +