Assembly-Sprache, die wie das Inkrementieren des multi-stellige dezimale ASCII-strings?
so, ich habe diesen Teil des Codes
mov SI, 0002
mov ah, INPUT[SI]
INC SI
mov al, INPUT[SI]
sub AX, 3030h
aad
inc al
cmp byte ptr INPUT[0002], 39h
jne OTHER
OTHER: aam
add ax, 3030h
mov INPUT[0003], al
mov INPUT[0002], ah
wobei die Eingabe die Eingabe des Benutzers.
Was dieser code macht ist die Schrittweite eine 2-stellige Zahl,
mein problem, wenn einer dreistelligen Zahl wird erhöht werden.
Beispiel:
Eingang: 98
Ausgabe: 99
Eingang: 99
Ausgang: 110
Gewünschten Ergebnisse:
Input: 99
Leistung: 100
- Ist dies umm, Hausaufgaben?
aam
?aad
? Heilige 8086, Batman!- Nach der Umwandlung sowohl als Eingabe-Ziffern 0-9 ganze zahlen in AX, nur Inkrement, das niedrige, ohne tragen von AL nach AH. So würde der code tun
39
->30
statt40
. Umgang mit 3-stelligen Ergebnissen in einem separaten und schwieriger problem. Auchjne OTHER
ist nutzlos, weil beide Seiten der Branche (fall-through-oder getroffen) sind am gleichen Ort. Auch, die ersten 4 Anweisungen konnten nurmov ax, [INPUT+2]
/xchg al,ah
. (Oder effizienterrol ax, 8
, es sei denn, Sie müssen rückwärts compat mit 8086, die nicht sofort dreht mit count > 1) - Wenn der input ist garantiert nur 2 Ziffern (oder noch einfacher, genau 2 Ziffern), dann
'99'
ist das nur der spezielle Fall und man konnte nur überprüfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die
inc
Befehl, wie:inc var
aber ich sehe, Sie haben diese in Ihrem code ohne Erfolg. Wenninc
nicht für Sie arbeiten, es gibt auchadd destination, source
Hoffe, das hilft.
Es ist viel einfacher, wenn Sie alle tragen-related stuff zu der CPU, würde ich vorschlagen, die komplette Umstellung der Eingabe-Zahl in einen integer inkrementiert und dann die Umwandlung zurück zu string und Ausgabe Sie. Ich möchte, dass Sie darüber nachdenken, also werde ich nur geben Sie eine C-ähnlichen pseudocode und Ihnen helfen, konvertieren Sie es für die Montage, wenn Sie weitere Hilfe benötigen 😉
Dies ist der code, den Sie umsetzen sollten in der Montage. Tun Sie es nicht blind, darüber nachzudenken, was Sie tun und warum!
Hinweis: können Sie vermeiden, alle diese Multiplikationen und Divisionen, schaut Sie sorgfältig an, was Sie teilen oder multiplizieren von 🙂