Сборка x64 Получить строку ввода пользователя в целое число для сравнения - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать программу, которая будет запрашивать 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
...