Эффективное хранение данных в сборке и вычисления с ним - PullRequest
0 голосов
/ 27 апреля 2020

недавно я начал изучать ассемблер, и это настоящее путешествие! :) Я знаю несколько базовых вещей c и хочу узнать о хранении данных, воссоздав мою программу python. Программа должна принять входные данные (я не уверен, если это возможно при сборке) и вернуть количество голов, которое будет иметь гидра через определенное количество дней. Формула: result = ((old_day*new_day)+(new_day-old_day)) Я упростил мой python код до:

old_day = 2
new_day = 3
fight = 5

temp1 = 0
temp2 = 0
temp3 = 0

for i in range(fight):
    temp1 = old_day*new_day
    temp2 = new_day-old_day
    temp3 = temp1+temp2
    old_day = new_day
    new_day = temp3

print(old_day)

И до сих пор я придумал это в сборке:

global _start

section .data
    old dw 2
    l_old equ $ - old
    new dw 3
    l_new equ $ - new
    tem1 dw 0
    l_tem1 equ $ - tem1
    tem2 dw 0
    l_tem2 equ $ - tem2
    tem3 dw 0
    l_tem3 equ $ - tem3
    days dw 4


section .text
_start:
    mov al, [old]
    mov bl, [new]
    mov cl, [tem1]
    mov dl, [tem2]
    mov ah, [days]

    mov eax, 1
    mov ebx, 0
    int 0x80

label:

Я застрял на этикетке поскольку mul хранит свой результат в aex, но я храню свои значения в al и ah. Мой вопрос: mul переопределит мои данные? Есть ли лучший способ хранения данных? И, наконец, мне нужны все строки с equ или это актуально только при выводе? Спасибо за ваше время и помощь:)

...