Je suis dans un cours de Machine Architecture et Assembly Language, et je suis supposé créer un programme MASM qui crée la séquence de Fibonacci jusqu'à un nombre défini par l'utilisateur, compris entre 1 et 46. Quand J'essaie de transférer la chaîne stockée dans un BYTE
marqué buffer
, qui est l'endroit où les auteurs du livre ReadString
procédure stocke une chaîne à une autre BYTE
marquée user
, je reçois cette sortie de construction:Déplacement d'un BYTE vers un BYTE
1>------ Build started: Project: MASM2, Configuration: Debug Win32 ------
1> Assembling fibonacci.asm...
1>fibonacci.asm(39): error A2070: invalid instruction operands
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\masm.targets(50,5): error MSB3721: The command "ml.exe /c /nologo /Sg /Zi /Fo"Debug\fibonacci.obj" /Fl"MASM2.lst" /I "c:\Irvine" /W3 /errorReport:prompt /Tafibonacci.asm" exited with code 1.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Je ne sais pas pourquoi je ne peut pas passer à des objets de même taille les uns dans les autres. J'ai commenté les parties de l'utilisateur et imprimé le tampon, et il stocke l'entrée comme une chaîne correctement. Toute aide est grandement appréciée.
*** Note: Nous utilisons le livre Assembly Language pour le processeur x86, 7th Ed. par Kip Irvine, et en utilisant sa bibliothèque Irvine32.
; Calculate Fibonacci to the nth degree
INCLUDE Irvine32.inc
.data
buffer BYTE 21 DUP(0)
welcome BYTE "Welcome to Fibonacci! My name is Zach, I will be your programmer today!", 0
question BYTE "What is your name?: ", 0
greet BYTE "Hello, ", 0
user BYTE ?
prompt BYTE "Enter a number from 1 to 46: ", 0
debrief BYTE "GoodBye"
input SDWORD ?
fib DWORD ?
.code
main proc
call Clrscr
;Print Welcome Screen
mov edx,OFFSET welcome
call WriteString
call Crlf
;Get Username and Greet
mov edx,OFFSET question
call WriteString
call Crlf
mov edx,OFFSET buffer
mov ecx,SIZEOF buffer
call ReadString
mov user, buffer
mov edx,OFFSET greet
call WriteString
mov edx,OFFSET buffer
call WriteString
call Crlf
;Get Input-- 1 to 46
mov edx,OFFSET prompt
call WriteString
call ReadInt
mov input,eax
;Validate n
;Calculate-5 terms per line w/5 spaces between
mov ecx,input
mov al, ','
mov eax,1
call WriteDec
start:
call WriteChar
call WriteDec
mov fib, eax
add eax,fib
LOOP start
;Debrief
call Crlf
mov edx,OFFSET debrief
call WriteString
invoke ExitProcess,0
main endp
end main
Fun Nouvelle sortie:
1>------ Build started: Project: MASM2, Configuration: Debug Win32 ------
1> Assembling fibonacci.asm...
1>fibonacci.asm(44): error A2022: instruction operands must be the same size
1>fibonacci.asm(45): error A2022: instruction operands must be the same size
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\masm.targets(50,5): error MSB3721: The command "ml.exe /c /nologo /Sg /Zi /Fo"Debug\fibonacci.obj" /Fl"MASM2.lst" /I "c:\Irvine" /W3 /errorReport:prompt /Tafibonacci.asm" exited with code 1.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Si ce qui précède est 'fibonacci.asm', l'erreur de compilation se réfère à'appel WriteString' et'appel Crlf' qui ne peut pas être le problème .. Qu'est-ce que sur les lignes 44 et 45? – Kenney
Je disposais d'un en-tête et de quelques lignes de débogage lorsque je publiais la sortie, et les supprimais pour l'affichage du code, j'ai corrigé la section de sortie – zgangwer20
À l'avenir, mettez en surbrillance la ligne signalée par le message d'erreur. Dans ce cas, je pense que c'est 'mov user, buffer'. Le message d'erreur indique exactement quel est le problème: Les opérandes de l'instruction 'mov' ne sont pas légaux. Vérifiez le manuel du processeur. Il liste les combinaisons d'opérandes valides. Mémoire-à-mémoire n'est pas sur la liste. –