il codice assembly generato dai compilatori è di solito molto diverso da
quello usato dai programmatori assembly.
in primo luogo i parametri delle funzioni: mentre i compilatori li inseriscono
sullo stack (e lo si può vedere dalle istruzioni di contorno che generano il
cosidetto 'stack frame'), nella programmazione assembly vengono usati i
registri.
in secondo luogo il valore di ritorno; i compilatori usano il registro (e)ax
mentre in assembly non esiste una regola al riguardo anche se (e)ax è
il più usato.
la funzione potrebbe essere tradotta in assembly in questo modo:
;-----------------------------------------------------
; Ritorna il segno dell'intero fornito come parametro
;
; Parametro:
; eax intero con segno
;
; Valore di ritorno
; eax 1 se parametro positivo
; -1 se parametro negativo
;
; Registri modificati
; nessuno
;-----------------------------------------------------
sign PROC
push edx ; salva registro
mov edx,eax
mov eax,1 ; inizializza il risultato a 'positivo'
cmp edx,0
jg label1
mov eax,-1
label1:
pop edx ; recupera valore originale di edx
ret
sign ENDP