lc3 汇编 - 将 ASCII 转换为数字

lc3 assembly - converting ASCII to numeric

我在 R0 中有一个 ASCII 字符,为了 return R0 中的数字等价物,我得到了以下说明:

Find the index of the given ASCII_digit in “0123456789ABCDEF”
The index is the Numeric_Digit equivalent of the given ASCII_Digit

看似小菜一碟,但逐个字符检查的过程:

DIGITS  .STRINGZ "0123456789ABCDEF" ;Digit_String

是什么让我完全困惑。

你会怎么做?

我想你会将当前索引处的字符串的倒数添加到 R0 中的 ASCII,如果它 returns 0 你找到了你的字符?

请指教

谢谢

你可以这样做:

LEA R1, DIGITS ;R1 is our string pointer/counter
START
    LD R2, R1 ;get the current character
    ADD R1, R1, 1 
    NOT R2, R2 ;these lines
    ADD R2, R2, 1 ;get the two's complement of R2, equivalent to -R2
    ADD R3, R0, R2 ;this is like cmp r0, r2
    BRnz ;loop back unless the characters are equal
LEA R2, DIGITS
NOT R2, R2 ;R2 = 1 - R2, we account for the 0
ADD R1, R1, R2

此后R0中字符的整数值在R1中。 R0 未受影响。

我假设 LC3 使用二进制补码表示。