Я написал базовую c программу для умножения двух положительных чисел следующим образом:
# multiply two numbers together via addition
.globl main
main:
# Lets put the two numbers into two registers
# You must use `movl` or the `l` suffix when moving something into the %eax register
movl $7, %ebx
movl $8, %ecx
# Zero out another register where we can do the additions
# We will zero out eax because that is what linux expects as return
movl $0, %eax
add_step:
# Add the data from the first number (ebx) into the eax register ecx times
addl %ebx, %eax
# Decrement the second number (ecx), assuming it is positive
dec %ecx
jnz add_step
# Shouldn't the 'return' statement occur in `main` and not in this subroutine?
ret
Кажется ли этот подход более или менее верным? Обычно числа помещаются в регистр для работы, или они обычно смещены от некоторого базового значения или около того? Наконец, где же ret
go? Кажется, что поток программы должен быть примерно таким:
main
some_stuff()
add_step()
some_stuff()
return
Но я не совсем уверен, как это сделать с метками и всем остальным. Каким будет предложенный способ сделать это?