Протабулировать функцию с заданным шагом - Assembler

Узнай цену своей работы

Формулировка задачи:

. Протабулировать функцию у = а(х+b) а=3; b=1; 1 < x < 10; Шаг изменения x=1

Решение задачи: «Протабулировать функцию с заданным шагом»

textual
Листинг программы
    .model flat
    .data
a   db 3
b   db 1
y   db ? ; у = а*(х+b), 1 < x < 10 ->  3*(2+1) = 9 <= y <= 30 = 3*(9+1) -> байта для y хватит
    .code
public main
main proc
    ;1 < x < 10 (Шаг изменения al=x=1)
    mov ecx, 8
l:  mov al, cl
    neg al
    add al, 10
    
    ;у = а*(х+b)
    add al, b
    cbw  ; (число теперь в ax)  
    mul a
 
    mov y, al ; отбросили старший байт, т.к. мы знаем, что он нулевой   
    loop l
quit:
    xor ax, ax
    ret
main endp
end

Объяснение кода листинга программы

  1. Объявлены переменные a, b, y (см. комментарии в коде).
  2. Переменная a равна 3.
  3. Переменная b равна 1.
  4. Переменная y не определена на старте (отображается как ?).
  5. Шаг изменения переменной al равен 1.
  6. Переменная cl равна 8.
  7. В цикле от 1 до 8 (включительно) переменная al принимает значения от 1 до 8.
  8. На каждой итерации цикла к переменной al добавляется значение переменной b.
  9. Результат каждой итерации цикла (без старшего байта) сохраняется в переменной y.
  10. Старший байт результата отбрасывается, так как он всегда равен 0.
  11. После завершения цикла программа завершается.
  12. Переменная ax обнуляется.
  13. Возврат в вызывающую программу.

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы