Умножьте два числа вместе (повторным сложением) в x86 - PullRequest
0 голосов
/ 04 августа 2020

Я написал базовую 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

Но я не совсем уверен, как это сделать с метками и всем остальным. Каким будет предложенный способ сделать это?

...