Вычисление выражения по формуле. - Assembler (223199)

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

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

Здравствуйте, необходимо написать программу вычисления выражение.Здесь Алгебраическая сумма i=от 1 до 2. Пример y=(a^2+2*a+c)*i, где a,c-любые числа. Написать нужно будет в цикле

Решение задачи: «Вычисление выражения по формуле.»

textual
Листинг программы
.model small
.stack 100h
.data
a db 3
c db 4
i dw 2
sum dd 0
.code
.486
begin:
mov ax, @data
mov ds, ax
 
mov al, a
imul al ; ax = a^2
mov bx, ax ; bx = a^2
mov al, a ; al = a
cbw ; ax = a
shl ax, 1 ; ax = 2a
add bx, ax ; bx = a^2 + 2a
mov al, c ; al = c
cbw ; ax = c
add bx, ax ; ax = a^2 + 2a + c
 
mov cx, i ; 
m1:
    mov ax, bx ; bx = значение нашего выражения
    imul cx ; умножаем на i
    shl edx, 8 ; сдвигаем старшую часть произведения на 8.
    mov dx, ax ; помещаем младшую часть в dx
    add sum, edx ; sum = sum + edx
loop m1
 
 
mov ah, 4ch
int 21h
end begin

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

  1. Код начинается с описания сегментов данных и кода, а также инициализации флага конца кадра (EOF) в 0.
  2. Переменные a и c инициализированы значениями 3 и 4 соответственно.
  3. Переменная i инициализирована значением 2.
  4. Переменная sum инициализирована значением 0.
  5. Код выполняет преобразование регистровых переменных в сегмент данных и обратно, чтобы обеспечить доступ к переменным a и c.
  6. Код выполняет вычисление значения a в квадрате, помещая результат в регистр bx.
  7. Код выполняет вычисление значения a в квадрате, помещая результат в регистр ax.
  8. Код выполняет вычисление значения a в квадрате, помещая результат в регистр bx.
  9. Код выполняет сложение bx и ax, чтобы получить значение a в квадрате + 2a.
  10. Код выполняет преобразование регистра al в слово (cbw), чтобы поместить значение a в регистры ax и bx.
  11. Код выполняет сдвиг значения ax на 1, чтобы получить 2a.
  12. Код выполняет сложение bx и ax, чтобы получить значение a в квадрате + 2a + c.
  13. Код выполняет инициализацию цикла m1, который будет выполняться i раз.
  14. Внутри цикла m1, код выполняет вычисление значения выражения, помещая результат в регистр bx.
  15. Код выполняет умножение значения bx на i и помещает результат в регистр edx.
  16. Код выполняет сдвиг значения edx на 8, чтобы поместить старшую часть произведения в старший регистр.
  17. Код выполняет сложение младшего регистра dx и edx, чтобы получить сумму, которую затем помещают в переменную sum.
  18. Код выполняет цикл m1 i раз.
  19. Код выполняет завершающую обработку, очищая регистры и выходя из программы.
  20. Код возвращает управление операционной системе.

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

5   голосов , оценка 3.6 из 5