Assembly Itanium


No post anterior, mostrei os registradores da plataforma x64 e um exemplo de uma listagem em assembly. Como curiosidade, resolvi compilar um programa para a plataforma Itanium.


Rotina comando():



__int64 comando(__int64 a, __int64 b, __int64 c, 
__int64 d, __int64 e)
{
return a+b+c+d+e;
}


Disassembly: A plataforma Itanium são processadores RISC de 64-bits e utilizam instruções Explicitly Parallel Instruction Computing (EPIC). Ao ler a listagem do código em assembly, verificamos que não há semelhanças com a plataforma x64. Apesar de serem processadores 64-bits, a plataforma Itanium e x64 são incompatíveis.



alloc r38 = ar.pfs,8,0,2,0 
movl r27 = 0xCCCCCCCCCCCCCCCC

adds sp = -0x30,sp
adds r39 = 0,gp
addl r28 = 4,zero ;;

ld8.nta r2 = [sp]
mov r37 = b0
adds r3 = 8,sp ;;

adds r2 = 0,sp
nop.m 0
nop.b 0 ;;

st8 [r2] = r27,0x10
st8 [r3] = r27,0x10
cmp.eq.unc p15,p14 = 1,r28

adds r28 = -1,r28
nop.m 0
br.cond.dptk.many Console64!comando+0

adds r31 = 0x10,sp
adds r30 = 0x18,sp
adds r29 = 0x20,sp

adds r28 = 0x28,sp
adds r27 = 0x30,sp
nop.b 0 ;;

st8 [r31] = r32
st8 [r30] = r33
nop.b 0 ;;

st8 [r29] = r34
st8 [r28] = r35
nop.b 0 ;;

st8 [r27] = r36 ;;
adds r26 = 0x10,sp
adds r22 = 0x18,sp

adds r19 = 0x20,sp
adds r16 = 0x28,sp
adds r10 = 0x30,sp ;;

ld8 r25 = [r26]
ld8 r21 = [r22]
adds gp = 0,r39 ;;

ld8 r18 = [r19]
ld8 r15 = [r16]
add r20 = r25,r21 ;;

ld8 r9 = [r10]
add r17 = r20,r18 ;;
add r11 = r17,r15 ;;

add r36 = r11,r9 ;;
adds v0 = 0,r36
nop.i 0 ;;

adds sp = 0x30,sp
mov b0 = r37,Console64!comando+0x100
mov.i ar.pfs = r38

nop.m 0
nop.m 0
br.ret.sptk.many b0 ;;

Comments (0)

Skip to main content