Fin:
; le resultat est dans bl
; c'est une valeur entiere arrondie par defaut
Fin_Programme:
mov ah, 0x4C
int 0x21
section .data
section .bss
Bon, voilà ce que ça donne en Asm x86 (je viens de le refaire, pas envie de rentrer chez moi pour rechercher une feuille que je ne retrouverai sans doute jamais) : org 0x0100
section .text
Debut:
; on suppose que la valeur entiere dont on veut la racine est dans ax
; cette valeur est strictement inferieure a 65536
; donc le resultat est strictement inférieur a 256, il tient dans bl
xor bx, bx ; test de nullité
test ax, ax
jz Fin
mov cl, 7 ; initialisation
mov dx, ax
Taille:
rcl dx, 1 ; taille du resultat
jc Taille_OK
rcl dx, 1
jc Taille_OK
dec cl
jmp Taille
Taille_OK:
inc bx ; preparation premiere iteration
mov dx, ax
ror dx, cl
ror dx, cl
dec dx
rcl ax, 3
rcl dx, 1
rcl ax, 1
rcl dx, 1
Iteration:
rol bx, 2 ; recherche de valeur de bit
inc bx
cmp bx, dx
ja Suite
sub dx, bx ; bit a 1
inc bx
Suite:
ror bx, 1 ; preparation iteration suivante
rcl ax, 1
rcl dx, 1
rcl ax, 1
rcl dx, 1
dec cl
jnz Iteration
N'ayant pas NAsm ici, je ne peux pas l'assembler pour le tester sous Debug.com et vérifier que je ne me sois pas gourré quelque part ...
Bien sûr, on peux largement améliorer ça (continuer après la virgule, prendre la racine d'une valeur non entière), mais ce n'était qu'un premier jet.
@++

Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.