Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 给定的十六进制输入应转换为十进制_Assembly_X86_Nasm - Fatal编程技术网

Assembly 给定的十六进制输入应转换为十进制

Assembly 给定的十六进制输入应转换为十进制,assembly,x86,nasm,Assembly,X86,Nasm,对组装来说是相当新的 我的汇编代码采用十六进制输入,即0-9,a-f其他输入将导致错误,输入的每个字符都存储在一个数组中,数组中的每个元素都将被用来打印其整数值,但由于某种原因,元素地址正在打印。 请查看下面的代码,并为我的问题提供解决方案。如果你需要完整的代码,请告诉我 (下面代码的思想是获取十六进制数的每个元素,并以十进制数打印这些元素) 请解决我的问题。 非常感谢。在不了解打印过程的情况下,我认为问题出在打印过程中。如果您使用的是printf,则在按下具有您的值的寄存器时,只需添加两个方括

对组装来说是相当新的

我的汇编代码采用十六进制输入,即0-9,a-f其他输入将导致错误,输入的每个字符都存储在一个数组中,数组中的每个元素都将被用来打印其整数值,但由于某种原因,元素地址正在打印。 请查看下面的代码,并为我的问题提供解决方案。如果你需要完整的代码,请告诉我

(下面代码的思想是获取十六进制数的每个元素,并以十进制数打印这些元素)

请解决我的问题。
非常感谢。

在不了解打印过程的情况下,我认为问题出在打印过程中。如果您使用的是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