装配移动编号而不是符号

时间:2016-05-30 13:12:26

标签: assembly

这可能听起来非常愚蠢(而且可能非常愚蠢)但是当我将一个值从一个变量复制到一个寄存器时,我注意到他像一个符号一样复制它(可能需要用ASCII代码做什么?),但我需要它作为一个数字而不是。 我试图做的事情:

    mov ah,[byte ptr playerSize]
    mov [statusBar+17],ah

并且在播放到playerSize中的值之后,啊包含了一些符号,当我尝试将其移回statusBar时,符号被移动而不是数字。

感谢您提供任何帮助:)

1 个答案:

答案 0 :(得分:0)

它不是符号,它是实际的数字,例如32,当玩家大小为32时。

您的问题是,您希望以人格式显示数字(十进制数)。通常任何字体渲染功能都使用某种字符编码,常见的(编程人员应该知道)是ASCII和UTF-8(前127个代码与ASCII基本相同)。

因此,如果您希望字体渲染显示" A",您首先要知道哪种数字编码大A(对于CPU,只有0中的数字..(2 ^ num_of_bits) -1,CPU不知道什么是" A"。在ASCII和UTF-8中,大" A"被编码为数字65,因此存储器由四个字节组成" 65,65,65,0和#34;,作为输入输入到某个例程,显示零终止字符串,将显示" AAA"。

现在我假设你的" statusBar"是ASCII零终止字符串,你通过某种方式显示...?可能。

所以你想要32号(播放器大小)转换为字符串,如0x20,0x20,0x33,0x32(" 32"),并将它存储在statusBar + 17到statusBar + 20字节的内存中。

如果你有渲染状态栏的功能,你可能还有一个数字格式化功能,搜索你的API。

否则自己做,只需检查所需的编码(ASCII转换很简单,数字 x 有ASCII码 x + 0x30),并将数字除以10,编码余数,将其放在字符串的末尾,向左移动一个,继续直到除数的结果为零,然后用空格填充剩下的字符串。