assembly 使用LR35902汇编,使用我自己的非ASCII字符Map将无符号16位整数从HL转换为文本

0qx6xfy6  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(198)

我需要弄清楚如何为LR35902创建一个例程(Game Boy的Z80类CPU),它将把HL的内容(不是它所指向的地方,而是存储在它里面的实际数字)并将它转换成1到5(实际值的范围为0到65,535,因为HL是16位的)非ASCII * 字符使用十进制系统。我有打印例程,可以很容易地找出一种方法来裁剪前导零。
所有我需要的是至少一些伪代码的这个函数,最多一个实际的RGBDS LR35902 ASM例程。

  • 我没有使用ASCII,而是使用我自己的每个字符1个字节的字符Map,其中字符0是十六进制字节$17,一直增加到9,即$20。
jgovgodb

jgovgodb1#

如何将秒转换为基数60(小时分秒)?例如1234秒
1234除以3600(60^2)得到小时数,其余数为零1234
将余数1234除以60(60^1)得到分钟数,即20分钟余数34
余数34除以1(60^0)得到秒数,即34
因此,1234秒的基数10转换为基数60(HH:MM:SS)为00:20:34
不管是什么基的转换是一样的,除非一个基是另一个基的幂(二进制到十六进制,十六进制到二进制,二进制到八进制,八进制到二进制),然后你可以走捷径。
您将从基数2转换为基数10,然后您可以使用ASCII或任何其他表示法来表示基数10的数字。
这个问题在这里已经被问了几百次了。下一个问题是,如果你的处理器没有除法运算,我该如何除以10。这个问题也被问了很多次,回答了很多次。
从数字到您的显示表示的转换是对你我们需要看到整个表,因为你只有10位数来处理你可以,如果没有别的只是做一个查找表。

scyqe7ek

scyqe7ek2#

奖金预例程,以转换的数字HL点或数字在A包括。
这是可行的,这只是一个问题,裁剪前导零。

ConvertNumberHLPoint::
    ld a, [hl]
ConvertNumberA::
    ld h, 0
    ld l, a
ConvertNumberHL::
    ; Get the number in hl as text in de
    ld bc, -10000
    call .one
    ld bc, -1000
    call .one
    ld bc, -100
    call .one
    ld bc, -10
    call .one
    ld c, -1
.one
    ld a, "0"-1
.two
    inc a
    add hl, bc
    jr c, .two
    push bc;
    push af;
    ld a, b;
    cpl;
    ld b, a;
    ld a, c;
    cpl;
    ld c, a;
    inc bc;
    call c, .carry;
    pop af;
    add hl, bc;
    pop bc;
    ld [de], a
    inc de
    ret

.carry;
    dec bc;
    ret;

如果在LR 35902上有一个操作码sbc hl,bc,就像在Z 80上一样,就可以用它替换以空白注解--;--结尾的行。(2的补码,)然后,为了SBC指令中的进位功能,如果进位被设置,则将其再次递增,然后取消备份af,将hl加到2的补码bc,和最后未备份BC。

kq4fsx7k

kq4fsx7k3#

此例程将HL中的值转换为ASCII表示,从DE指向的内存位置开始,以十进制形式表示,并带有尾随零,因此其长度始终为5个字符。http://map.grauw.nl/sources/external/z80bits.html#5.1

reg2ascdec: ld   bc,55536
            call OneDigit
            ld   bc,64536
            call OneDigit
            ld   bc,65436
            call OneDigit
            ld   c,-10
            call OneDigit
            ld   c,b
OneDigit:   ld   a,47         ;replace with $16 (for $17-$20)
DivideMe:   inc  a
            add  hl,bc
            jr   c,DivideMe
            sbc  hl,bc
            ld   (de),a
            inc  de
            ret

相关问题