NASM ::无法将字符串转换为int,其值大于255

时间:2013-09-23 21:20:51

标签: linux nasm i386

我将字符串转换为整数(数字)时遇到问题。仅当字符串的值小于或等于255(例如:port db“255”,0x0)时,才会进行正确的转换。 如果整数值大于255(如:端口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.

我可能会想念一些愚蠢的事情或者我缺乏知识。 有人可以解释这段代码有什么问题吗?

由于

0 个答案:

没有答案