Assembly 给定的十六进制输入应转换为十进制
对组装来说是相当新的 我的汇编代码采用十六进制输入,即0-9,a-f其他输入将导致错误,输入的每个字符都存储在一个数组中,数组中的每个元素都将被用来打印其整数值,但由于某种原因,元素地址正在打印。 请查看下面的代码,并为我的问题提供解决方案。如果你需要完整的代码,请告诉我 (下面代码的思想是获取十六进制数的每个元素,并以十进制数打印这些元素) 请解决我的问题。Assembly 给定的十六进制输入应转换为十进制,assembly,x86,nasm,Assembly,X86,Nasm,对组装来说是相当新的 我的汇编代码采用十六进制输入,即0-9,a-f其他输入将导致错误,输入的每个字符都存储在一个数组中,数组中的每个元素都将被用来打印其整数值,但由于某种原因,元素地址正在打印。 请查看下面的代码,并为我的问题提供解决方案。如果你需要完整的代码,请告诉我 (下面代码的思想是获取十六进制数的每个元素,并以十进制数打印这些元素) 请解决我的问题。 非常感谢。在不了解打印过程的情况下,我认为问题出在打印过程中。如果您使用的是printf,则在按下具有您的值的寄存器时,只需添加两个方括
非常感谢。在不了解打印过程的情况下,我认为问题出在打印过程中。如果您使用的是printf,则在按下具有您的值的寄存器时,只需添加两个方括号即可。如果看不到print\u int的功能,很难判断发生了什么。你怎么知道它打印的是地址而不是其他无效值?另外,由于您正在使用
换行符
作为循环结束条件,因此是否确实要使用循环
?ecx
是否有您为循环计数器设置的值?如果没有,那么它只会循环在ecx
或直到换行符
中给出的次数,以先到者为准。您还将遇到冲突:10
是换行符
,也是最终答案中的有效十六进制数字值(您的打印代码无法区分换行符
与原来的a
十六进制数字之间的区别)。
mov ebx, array
next_loop: ;this loop is to convert the character
mov al, [ebx]
cmp al, NEWLINE ; here NEWLINE is 10 which is already defined
je end_loop
cmp al, 97
jge subblock
jl numsub
numsub:
sub al, 48
mov [ebx], al
jmp next
subblock:
sub al, 97
add al, 10
mov [ebx], al
jmp next
next:
inc ebx
loop next_loop
; below code is to print the value which is stored in array
end_loop:
mov ebx, array
mov eax, message2
call print_string
print_loop:
mov al, [ebx]
inc ebx
call print_int ; addresses of ebx is printing but not the value
cmp al, NEWLINE
jne print_loop
jmp finalend