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