J'ai des problèmes avec l'utilisation de décalages pour multiplier deux nombres donnés par l'utilisateur. Il demande à l'utilisateur d'entrer deux entiers et il est supposé les multiplier. Mon programme fonctionne bien en demandant les nombres entiers, mais quand il donne le produit c'est un nombre astronomique non où c'est proche. Où est-ce que je me trompe? quel registre lit-il?Multiplication à l'aide de décalages dans l'assemblage. Mais obtenir un nombre trop élevé nombre dehors! Où vais-je mal?
%include "asm_io.inc"
segment .data
message1 db "Enter a number: ", 0 message2 db "Enter another number: ", 0 message3 db "The product of these two numbers is: ", 0
segment .bss
input1 resd 1 input2 resd 1
segment .text Global main main: enter 0,0 pusha
mov eax, message1 ; print out first message
call print_string
call read_int ; input first number
mov eax, [input1]
mov eax, message2 ; print out second message
call print_string
call read_int ; input second number
mov ebx, [input2]
cmp eax, 0 ; compares eax to zero
cmp ebx, 0 ; compares ebx to zero
jnz LOOP ;
LOOP:
SHL eax, 1
dump_regs 1 mov eax, message3 ; print out product call print_string mov ebx, eax call print_int
s'il vous plaît formater votre code un peu plus lisiblement . à première vue, je ne vois rien qui ressemble à une multiplication (il y a un décalage de 1 par 1, pas en boucle), je ne vois même pas où vous agissez sur les valeurs d'entrée en dehors des tests 'ebx' contre zéro. – Mat
qu'est-ce qui n'est pas lisible à ce sujet? – BDilly
Votre code n'a pas beaucoup de sens, et ne semble pas contenir quoi que ce soit ressemblant à une tentative de multiplication. Y a-t-il eu, peut-être, une erreur dans le fait de couper/coller? –