【发布时间】:2015-06-13 00:18:52
【问题描述】:
对组装很陌生!
我的汇编代码采用十六进制输入,即 0-9 和 a-f 其他输入将导致错误,输入的每个字符都存储在一个数组中,并且数组中的每个元素都将被用于打印它们的整数值,但是对于某些原因元素地址正在打印。 请查看下面的代码并为我的问题提供解决方案。如果您需要完整的代码,请告诉我。
(下面代码的思想是获取十六进制数的每个元素并以十进制数打印元素)
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
请解决我的问题。 非常感谢。
【问题讨论】:
-
如果没有看到
print_int做了什么,很难知道发生了什么。你怎么知道它正在打印地址,而不仅仅是其他一些无效值?另外,由于您使用NEWLINE作为循环结束条件,您真的要使用loop吗?ecx是否具有您为循环计数器设置的值?如果不是,那么它只会循环在ecx或直到NEWLINE中给出的次数,以先到者为准。 -
您还会遇到冲突:
10是NEWLINE,并且在您的最终答案中也是一个有效的十六进制数字值(您的打印代码无法区分NEWLINE以及最初的a十六进制数字)。