Вычислить значение выражения - 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
Объяснение кода листинга программы
- 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 — добавляем единицу к результату (если результат младшего слова был 0)
- mov bx,dx — теперь результат в bx:dx:ax
- mov dx,ax
- pop ax — возвращаем ax в стек для дальнейших операций
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д