ist die Zuordnung: Schreiben eines "einfachen Rechners für 32-Bit-Ganzzahlen" in MASM mit der Irvine32-Bibliothek. Wie kann ich diesen "Schreibzugriffsverletzung" -Fehler beheben? Hier
Hier ist der Link zu der Dokumentation der Irvine32 Bibliothek (die ich verwenden müssen): http://programming.msjc.edu/asm/help/
Im Moment bin ich nur das Experimentieren mit, wie man Machen Sie eine erfolgreiche Vorlage prompt/output, und ich beginne mit der Addition. Mein Problem ist, dass ich eine "Schreibzugriffsverletzung" bekomme, wenn ich versuche, WriteString (eine Irvine32-Prozedur) zu verwenden, um die erste Zeile der Antwortausgabe auszugeben. Es wird der Text auf der Konsole gedruckt, aber der Fehler tritt unmittelbar danach auf. Was mich verwirrt ist, dass ich früher im Programm WriteString für andere Strings erfolgreich benutze; Es ist seltsam, dass es hier nicht funktioniert.
Hier ist ein Screenshot von den während der Fehlersuche angezeigt Fehler:
Hier ist mein Code:
.386
.MODEL flat,stdcall
.STACK 4096
ExitProcess PROTO,dwExitCode:DWORD
WriteString PROTO
ReadDec PROTO
.DATA
promptLineOne DB "1. X + Y 6. X and Y",13,10,0
promptLineTwo DB "2. X - Y 7. X or Y",13,10,0
promptLineThree DB "3. X * Y 8. not X",13,10,0
promptLineFour DB "4. X/Y 9. X xor Y",13,10,0
promptLineFive DB "5. X mod Y 10. Exit Program",13,10,0
adding DB "Adding X and Y; enter X, then enter Y",0
added DB "The sum of X and Y is: ",0
tryAgain DB "Try again",0
.CODE
prompt PROC
MOV ECX,5
MOV EAX,0
MOV EDI,OFFSET promptLineOne
L1:
MOV EDX,EDI
INVOKE WriteString
L2:
INC EDI
MOV AL,[EDI]
CMP EAX,0
JNZ L2
INC EDI
LOOP L1
RET
prompt ENDP
calculate PROC
MOV EDX,OFFSET adding
INVOKE WriteString
op1 DD ?
op2 DD ?
result DD ?
L1:
INVOKE ReadDec
JNC chastise
JC FirstPass
JNC L1
FirstPass:
MOV op1,EAX
L2:
INVOKE ReadDec
JNC chastise
JC SecondPass
JNC L2
SecondPass:
MOV op2,EAX
ADD EAX,op1
ADD EAX,op2
MOV result,EAX
MOV EDX,OFFSET added
INVOKE WriteString
MOV EDX,OFFSET result
INVOKE WriteString
RET
calculate ENDP
chastise PROC
MOV EDX,OFFSET tryAgain
INVOKE WriteString
RET
chastise ENDP
main PROC
INVOKE prompt
INVOKE ReadDec
INVOKE calculate
INVOKE ExitProcess,0
main ENDP
END main
Vielen Dank für einen Blick! :)
Vielen Dank! Ich konnte das ganze Labor mit deiner Hilfe beenden. Diese kleinen Unterschiede sind Dinge, auf die ich wachsam achten muss – jollypop