2013-12-07 58 views
1

您好我目前正在编写一个程序,我需要在屏幕上打印寄存器AX的值。我想到的方法很少,但他们没有奏效。任何想法如何使它?例如ax = 0abcdh。寄存器,组件的打印值x8086

+2

请提一下您尝试过的是什么以及您的错误是什么。 –

+0

转换为十六进制字符串,将其打印出来。有什么问题?你的尝试在哪里? – Devolus

回答

0

您必须将寄存器的值分成不同的部分。

示例:十六进制输出:

MOV CX, 4 
next_digit: 
    PUSH CX 
    MOV CL, 4 
    ROL AX, CL 
    PUSH AX 
    AND AL, 0Fh 
    ADD AL, '0' 
    CMP AL, '9' 
    JLE not_a_letter 
    ADD AL, 'A'-'9'-1 
not_a_letter: 
    ; Now write the character AL to the screen 
    POP AX 
    POP CX 
    LOOP next_digit 

该代码会破坏CX寄存器的内容,所以你必须将它保存在栈上,如果你不希望修改CX寄存器。

行“现在将字符AL写入屏幕”取决于操作系统。

如果你想要十进制输出它有点棘手。你必须使用DIV指令并除以10.你会得到从右到左的数字!