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

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

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

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

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

textual
Листинг программы
    mov bx, ax ;результат умножения сохраняем в bx
 
    imul bx ;возводим в 3 степень, результат в dx:ax
    mov cx, dx ;сохраняем старшее слово
 
    imul bx ;умножаем младшее слово
    push ax ;сохраняем результат
    push dx
    mov ax,cx ;умножаем старшее слово
    imul bx
    pop cx
    add ax,cx
    adc dx,0
 
    mov bx,dx ;теперь результат в bx:dx:ax
    mov dx,ax
    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