打印BCD值(MASM)

时间:2016-05-04 14:00:59

标签: assembly masm x86-16

我写了一个带有中断1ah的代码,我这样做了:

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

现在,例如时间是“18:36”,它将打印小时,并且只打印8.因为我希望程序执行此操作。但是,我该怎么做才能显示“1”?

P.S:我测试了掩蔽较低的蚕食,但这不是我的答案。

1 个答案:

答案 0 :(得分:1)

这是在CH注册表中打印小时数所需的代码。

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

因为在8086上没有立即移位计数,所以必须使用CL寄存器。因此,有必要将CL寄存器中的分钟移动到另一个寄存器,如BL