我正在尝试创建一个程序,要求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