Arvorezinha – HP Precision Architecture (aka PA-RISC aka DEMONIO)
E ca fica mais uma arvorezinha, desta vez numa arquitectura demoniaca.
hpux$ cat arvorezinha.S
.LEVEL 1.1 ; cenas gays do hpux
.SPACE $PRIVATE$ ; o HPPA funciona por spaces, ler arch book
.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 ; pra mais informacoes ou esquizofrenia antecipada
.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
.SPACE $TEXT$
.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
.IMPORT $global$,DATA
.IMPORT $$dyncall,MILLICODE
.IMPORT write,CODE ; eh mais simpatico fazer imports
.IMPORT exit,CODE
.IMPORT __main,CODE
.SPACE $TEXT$
.SUBSPA $LIT$
.align 4
STAR
.STRING "\x2a\x00"
LF
.STRING "\x0a\x00"
.SPACE $TEXT$
.SUBSPA $CODE$
.align 4
.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
.EXPORT main,ENTRY,PRIV_LEV=3,RTNVAL=GR ; a cena dos privilege levels eh funny
main
.PROC
.CALLINFO FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
.ENTRY
.CALL
xor %r4,%r4,%r4 ; aka meter %r4 a zero :)
arewedoneyet
comib,=,n 5,%r4,kk10xbai ; se %r4 for 5, BAI NAO!
nop
xor %r3,%r3,%r3 ; inicializar o counter do segundo loope
letsdothis
comb,<=,n %r3,%r4,estrela ; se o %r3 for menor ou igual a %r4
xor %r1,%r1,%r26 ; sim, isto eh um nop
ldi 1,%r26 ; escolher o fd (1 eh stdout)
ldil LR'LF,%r19 ; copiar a stringue com
ldo RR'LF(%r19),%r25 ; paneleirices...
ldi 1,%r24 ; length da stringue
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR
bl write,%r2
xor %r1,%r2,%r3 ; sim, isto eh um nop
addi 1,%r4,%r4 ; incrementar o %r4
b arewedoneyet
shladd %r4,2,%r8,%r15 ; sim, isto eh um nop
estrela
ldi 1,%r26 ; ver outro write
ldil LR'STAR,%r19 ; eh a mm merda
ldo RR'STAR(%r19),%r25
ldi 1,%r24
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR
bl write,%r2
add %r13,%r14,%r15 ; sim, isto eh um nop
addi 1,%r3,%r3
b letsdothis
nop ; adivinha...
kk10xbai
ldi 0,%r26
.CALL ARGW0=GR
bl exit,%r2
shrpw %r8,%r7,8,%r9 ; nop nop nop
subi,OD 42,%r3,%r12 ; nop nop nop nopppppp! :D
.EXIT
.PROCEND
hpux$ gcc arvorezinha.S
*
**
***
****
*****
hpux$
jah agora para esclarecer um pouco certas esquisitisses desta arquitectura, para loadar uma word (32 bits), como todas as instruções têm de ter 32bits eh obvio que nao da para meter um endereço com esse tamanho e ainda gastar 6 bits num opcode. entao o que estes genios da computacao fizeram foi primeiro loadar 21 bits e depois os 11 bits restantes.
tipo ali em cima
ldil LR'STAR,%r19
ldo RR'STAR(%r19),%r25
LR' saca 21 bits da string STAR para o %r19
RR' saca os 11 bits que faltam...
digam la, HPPA nao eh uma arquitectura magnifica ? (FUCK NO!)
Faz-me um filho!
Que medo de arquitectura.
Faz-me um filho GAY!!!