我在将字符串转换为整数(数字)时遇到问题。仅当字符串的值小于或等于 255 时才进行正确的转换(例如:port db "255",0x0)。如果整数值大于 255(如:port db "256",0x0),结果溢出。这是示例代码:
section .bss
PORT resw 1
section .data
port db "256",0x0
section .text
global _start
_start:
pusha
;reset eax,ebx,edx to 0
xor eax, eax
xor ebx, ebx
xor edx, edx
.loop:
;compare *port+edx against 0x0; pointer arithmetic?
cmp BYTE [port + edx], 0x0
je .exit
;copy port[edx] to bl
mov bl, BYTE [port + edx]
;substract '0' (48) to get 'real' integer
sub bl, '0'
;each cycle multiply by 10
imul eax, 10
;add ebx (not bl as eax is 32bit) to eax
add eax, ebx
inc edx
jmp .loop
.exit:
;convert port value to big-endian value
shl eax, 8
mov [PORT], eax
popa
mov eax, 1
int 0x80
正如我上面提到的,存储在 [PORT] 中的值被截断。现在 [PORT] 中的值为 0... 不应用移位指令 (shl eax, 8),值为 1。
我可能会错过一些愚蠢的东西或者我缺乏知识。请有人能解释一下这段代码有什么问题吗?
谢谢