To je moc málo informací, potřeboval bych znát instrukční sadu toho procesoru, kolik registrů má a co se s nimi dá dělat, prostě jeho vlastnosti, a třeba také kolikabitový vůbec je... Máš k tomu nějakou dokumentaci?
Zatím jsem si trochu vypomohl pomocí Céčka a GCC, takže pro inspiraci:
Kód: Vybrat vše
movl $0, -24(%ebp)
movl $43690, -28(%ebp)
jmp .L5
.L6:
movl -28(%ebp), %eax
addl -8(%ebp), %eax
movzbl (%eax), %eax
testb %al, %al
jns .L7
addl $1, -24(%ebp)
.L7:
addl $2, -28(%ebp)
.L5:
cmpl $44200, -28(%ebp)
jle .L6
To mi ještě připomíná ten původní kód, když jsem zapnul mírnou optimalizaci, tak to vypadá o dost zajímavěji (netvrdím že chápu co to dělá):
Kód: Vybrat vše
movl $0, %edx
movl $0, %eax
.L4:
cmpb $-128, 43690(%esi,%eax,2)
sbbl $-1, %edx
addl $1, %eax
cmpl $256, %eax
jne .L4
A s maximální optimalizací to vyvádí ještě šílenější věci:
Kód: Vybrat vše
xorl %edx, %edx
xorl %eax, %eax
.L4:
cmpb $-128, 43690(%esi,%eax,2)
sbbl $-1, %edx
addl $1, %eax
cmpl $256, %eax
jne .L4
Je to tedy dvaatřicetibitový kód pro 386, neadresuji přímo paměť, ale pole, a pracovní hodnoty si to drží v proměnných na zásobníku místo v registrech, proto jsou tam ty hrůzy jako
-28(%ebp).
Jestli to chceš luštit, tak čísla jsou desítková, uvozená
$, registry
%, labely pro skoky jsou
.L, a pozor na to že instrukce mají obrácené pořadí operandů než intelovský assembler, takže
movl odkud, kam!