Вычислить значение выражения - Assembler (223301)

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

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

Доброго времени суток! Есть выражение вида (a+b)*2. Переменные типа байт. Значение переменных а=255, b=3.
Листинг программы
  1. .model small
  2. .data
  3. a db 3
  4. b db 255
  5. n db 2
  6. .code
  7. .486
  8. mov ax,@data
  9. mov ds,ax ; load data segment
  10. mov al,a
  11. cbw
  12. mov cx,ax; cx = a(w)
  13. mov al,b
  14. cbw
  15. add ax,cx; ax = a(w)+b(w) ; на этом этапе флаг переноса cf=1, af=1 , что соответствует (если я правильно понимаю) ; числу 102(16) = 258(10)
  16. mov al,n; al=2
  17. cbw
  18. imul si; ax= (a+b) * 2; на этом этапе cf=0, значение в ax=4, но af=1. Я никак не могу понять, где число 204(16) =
  19. ; 516(10)
Вопрос:Если я правильно понимаю, то результатом должно быть двойное слово, правильно ли у меня написан код? Далее нужно будет возвести результат в третью степень, но пока я борюсь с этой частью кода..

Решение задачи: «Вычислить значение выражения»

textual
Листинг программы
  1.     mov bx, ax ;результат умножения сохраняем в bx
  2.  
  3.     imul bx ;возводим в 3 степень, результат в dx:ax
  4.     mov cx, dx ;сохраняем старшее слово
  5.  
  6.     imul bx ;умножаем младшее слово
  7.     push ax ;сохраняем результат
  8.     push dx
  9.     mov ax,cx ;умножаем старшее слово
  10.     imul bx
  11.     pop cx
  12.     add ax,cx
  13.     adc dx,0
  14.  
  15.     mov bx,dx ;теперь результат в bx:dx:ax
  16.     mov dx,ax
  17.     pop ax

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

  1. mov bx, ax — результат умножения сохраняем в bx
  2. imul bx — возводим в 3 степень, результат в dx:ax
  3. mov cx, dx — сохраняем старшее слово
  4. imul bx — умножаем младшее слово
  5. push ax — сохраняем результат
  6. push dx
  7. mov ax,cx — умножаем старшее слово
  8. imul bx
  9. pop cx
  10. add ax,cx — складываем с предыдущим результатом
  11. adc dx,0 — добавляем единицу к результату (если результат младшего слова был 0)
  12. mov bx,dx — теперь результат в bx:dx:ax
  13. mov dx,ax
  14. pop ax — возвращаем ax в стек для дальнейших операций

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут