Ich mache diese Übung für die Universität und meine Assembler gibt mir einen Überlauf während einer Abteilung, ich habe Schritt für Schritt Debug-Register überprüft, aber ich kann das Problem nicht lösen, weil ich nicht in der Lage bin, es zu finden . Ich poste den Code, damit Sie versuchen könnten, mir zu helfen. Das Ziel des Programms ist es, die Anzahl der Münzen für den jeweiligen Wert zu multiplizieren, zum Beispiel habe ich 10 Münzen von 1 Euro, also habe ich 10 Euro; Ich muss mir merken, wie viel Geld ich insgesamt habe; Münzen und Werte sind in zwei Vektoren und sie sind jeweils durch Position verbunden.Division Überlauf auf Assembly
Der Code ist für einen Intel 8086
.model small
.stack
.data
value dw 1,2,5,10,20,50,100,200
coins db 100,23,17,0,79,48,170,211
euro dw 0
cent dw 0
.code
.startup
mov si,0 ;must arrive on 8
mov di,0
mov bx,100 ;to separate euro and decimals
mon: mov al,coins[si]
cbw
mul value[di]
div bx
add cent,dx
add euro,ax
inc si
inc di
inc di
cmp cent,100
jb cicl
mov ax,cent
mov cent,0
mov dx,0
div bx
add euro,ax
mov cent,dx
cicl: cmp si,8
jnz mon
.exit
end
Hoffe mein Code ist klar. Vielen Dank und Entschuldigung für mein schlechtes Englisch.
'Intel® 64 und IA-32 Architektur Software Entwicklerhandbuch Band 2 (2A, 2B & 2C): Befehlssatz Referenz, AZ', Abschnitt von 'div': * Vorzeichenlose Teilung DX: AX von r/m16, mit Ergebnis gespeichert in AX ← Quotient, DX ← Rest. * Wo hast du 'DX' auf einen vernünftigen Wert gesetzt? – EOF
@EOF 'mul' did;) – Jester
Das geht davon aus, dass der Assembler 'mul-Wert [di]' als' mul r/m16 'behandelt – Michael