【发布时间】:2020-08-10 03:31:09
【问题描述】:
我有以下程序将两个数字相乘:
.globl main
main:
# Store the two numbers temporarily in ebx, ecx
mov $7, %ebx
mov $14, %ecx
# clear out eax and add ebx (7) to it ecx (14) times
mov $0, %eax
multiply_step:
add %ebx, %eax
dec %ecx
jnz multiply_step
ret
但是,如果我为 14 和 7 添加变量,无论出于何种原因,程序运行大约需要一秒钟,这似乎有点奇怪(上面的程序是瞬时的)--
.globl main
.globl x,y
x: .byte 7
y: .byte 14
main:
mov x, %ebx
mov y, %ecx
mov $0, %eax
multiply_step:
add %ebx, %eax
dec %ecx
jnz multiply_step
ret
为什么这个程序需要更长的时间才能运行?我将两者都调用为:
$ gcc m2.s -o m2 && ./m2; echo $?
# 98
【问题讨论】:
-
您可以使用调试器查看您在寄存器中获得的值;这是清楚了解这里发生的事情的简单方法。