Assembly x64将用户输入字符串输入整数以进行比较

时间:2018-04-25 01:58:45

标签: assembly 64-bit nasm x86-64

我正在尝试创建一个程序,要求2个数字,然后比较它们。我最初只是比较了两个用户输入的字符串,但发现它不起作用。它将它们视为字符串而不是实际字符。所以,如果我要做以下事情:

N1: 0000001
N2: 20
N1 is larger than N2

因此,同事告诉我将数字转换为序数值。到目前为止我有这个代码..

r10 = length of inp1
xor rcx, rcx
ord:
    cmp r10, rcx                    ;compare length against counter
    je error                        ;jmp 
    movzx r14, BYTE[inp1+rcx]       ;store first char from inp1 to r14
    cmp r14, 0x0a                   ;compare first char against /n
    je error                        ;jmp if /n
    mov rax, 10                     ;mov 10 into rax
    mul r15                         ;mul rax * r15
    add r15, rax                    ;add rax to r15        
    sub r14, 30                     ;sub 30 from r14
    add r15, r13                    ;add r13 to r15
    inc rcx                         ;inc counter
    jmp ord                         ;loop

这是基于以下C代码:

char str[6] = "1234\n";
int i = 0;
int tmp = 0;

for(i = 0; i < 6; i++) {
    if (str[i] != '\n') {
        tmp *= 10;
        tmp += str[i];
        i++;
    }
}

我的输出不正确。我不确定我在这里缺少什么。他走过C代码,展示了int i和int tmp如何改变并最终解决的每一步,但是对于我的ASM,我不能让它做同样的事情。

我正在编译

nasm -f elf64 -o out.o out.asm && gcc -o out out.o

0 个答案:

没有答案