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 使用二进制补码表示。
我在 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 使用二进制补码表示。