Ja, Sie wird höchstwahrscheinlich Erhalte ein seltsames Zeichen, weil int 21/ah = 02 verlangt, dass das zu druckende Zeichen im Verzeichnis dl
liegt und du nichts mit dl
ausgefüllt hast.
Sie wollen den Wert mit etwas übertragen, wie:
mov ax, 10
add ax, 5
push ax ; these are the two new lines.
pop dx
mov ah, 02h
jedoch bedenken, dass, auch wenn Sie Übertragung den Wert al
-dl
tun , Zeichennummer 15 kann nicht sein, was du erwartest. 15 ist eines der ASCII-Steuerzeichen und ich bin mir nicht sicher, was die DOS-Interrupts für sie ausgeben werden.
Wenn Sie die Ziffern 15
drucken möchten, müssen Sie zwei Anrufe, eine mit dl = 31h
und die zweite mit dl = 35h
(die beiden ASCII-Codes für die 1
und 5
Zeichen).
Wenn Sie wissen möchten, wie man eine Zahl in einem Register nimmt und die Ziffern für diese Nummer in lesbarer Form ausgibt, gibt es einen Pseudocode in an earlier answer of mine.
Von dieser Antwort haben Sie die Pseudo-Code:
val = 247
units = val
tens = 0
hundreds = 0
loop1:
if units < 100 goto loop2
units = units - 100
hundreds = hundreds + 1
goto loop1
loop2:
if units < 10 goto done
units = units - 10
tens = tens + 1
goto loop2
done:
if hundreds > 0: # Don't print leading zeroes.
output hundreds
if hundreds > 0 or tens > 0:
output tens
output units
;; hundreds = 2, tens = 4, units = 7.
Jetzt müssen Sie, dass in x86-Assembler übersetzen. Beginnen wir mit dem gewünschten Wert in ax
starten:
mov ax, 247 ; or whatever (must be < 1000)
push ax ; save it
push dx ; save dx since we use it
mov dx, 0 ; count of hundreds
loop1:
cmp ax, 100 ; loop until no more hundreds
jl fin1a
inc dx
sub ax, 100
jmp loop1
fin1a:
add dx, 30h ; convert to character in dl
push ax ; save
mov ah, 2
int 21h ; print character
pop ax ; restore value
; now do tens and units the same way.
pop dx ; restore registers
pop ax
Nun, da Codesegment (ungeachtet etwaiger Fehler aufgrund der Tatsache, es ist eine Weile her, seit ich Montage tat) aus der Hunderter-Stelle gedruckt werden soll und lassen Axt nur mit den Zehn und Einheitsziffer.
Es sollte eine einfache Angelegenheit sein, die Funktionalität noch zweimal zu duplizieren, um die Zehner- und Einheitenplätze zu erhalten.
Danke, aber können Sie meinen Code mit Korrektur neu schreiben. –
@Lion, siehe das Update. – paxdiablo
Leider ist das Problem weiterhin vorhanden, nachdem Sie Ihren Code angewendet haben. –