2016-05-04 11 views
-1

schrieb ich einen Code mit Interrupt 1Ah, und ich habe dies:Drucken eines BCD-Wert (MASM)

mov al, ch 
and al, 0fh 
mov dl, al 

Nun, zum Beispiel Zeit „18.36“, so hat es Stunden drucken und druckt nur 8. Weil ich wollte, dass Programm das macht. Aber was kann ich tun, um "1" zu zeigen?

S.S: Ich testete Maskierung unteren Nibble, aber es war nicht meine Antwort.

+1

zu verschieben. Würden Sie Ihren vollständigen Code posten? –

+0

Wenn Sie wirklich mit BCD-Werten arbeiten, sollten Sie sich die Anweisungen 'AAA',' AAD', 'AAM',' AAS' anschauen. Sie passen ASCII nach ... an. – zx485

+0

Wie für Ihre [vorherige Frage] (http://stackoverflow.com/questions/37024912/bcd-to-ascii-conversion) empfohlen, müssen Sie jedes Nibble separat drucken. Verschiebe das obere Nibble in die untere Position, maskiere es, füge '0' hinzu, drucke das Zeichen. Dann maskiere das untere Nibble, füge '0' hinzu, drucke. Natürlich müssen Sie mit einer * Kopie * arbeiten, da bei der ersten Operation die 2. Ziffer verworfen wird. –

Antwort

1

Dies ist der Code, den Sie benötigen, um die Stunden im Register CH auszudrucken.

mov bl, cl ;Save-guard the minutes! 
mov dl, ch 
mov cl, 4 ;On 8086 you need to use CL 
shr dl, cl ;High nibble 
add dl, 30h ;Make character 
mov ah, 02h ;DOS PrintChar 
int 21h 
mov dl, ch 
and dl, 0fh ;Low nibble 
add dl, 30h ;Make character 
mov ah, 02h ;DOS PrintChar 
int 21h 

auf 8086 Da es keine ist sofort Verschiebung zählen Sie die CL Register verwenden. Daher ist es notwendig, die Minuten im CL Register in ein anderes Register wie BL