[大会x86-64]
具体来说,我试图将137,799转换为十四进制,然后转换为ASCII值,应该是“3830B”,但我得到“3830;”,所以我的最后一位数字由于某种原因是错误的。这是我的代码:
; Part 1 - Successive division
mov eax, dword [iNum1] ; get the integer 137,799
mov rcx, 0 ; digitCount = 0
mov ebp, 14 ; set for dividing by 14
divideLoop:
mov edx, 0
div ebp ; divide by 14
push rdx ; push remainder
inc rcx
cmp eax, 0
jne divideLoop
; -----
; Part 2 - Convert remainders and store
mov rbx, num1String ; get addr of string
mov rsi, 0 ; index = 0
popLoop:
pop r8
add r8b, "0" ; converting to ASCII
mov byte [rbx+rsi], r8b
inc rsi
loop popLoop
mov byte [rbx+rsi], NULL
我不明白我做错了什么。任何帮助,将不胜感激。
你的错误是将你输入的数字添加到字母'0':
add r8b, "0" ; converting to ASCII
这适用于数字,因为0
到9
在ASCII中是连续的,但在数字之后在字母表开始之前有一些符号。看看这个表:
https://www.torsten-horn.de/techdocs/ascii.htm
最简单的方法是在程序中添加一个查找表(“0123456789AB”),然后使用你得到的数字来索引正确的字符。
table: .string "0123456789AB"
// ...
mov r8b, [table+r8b]