Вычислить значение выражения: (a^2+b(2c-d)^2)/3e - Assembler (223235)
Формулировка задачи:
Вычислить f=(a^2+b(2c-d)^2)/3e , операнды – слова, вычисления беззнаковые.
Подскажите,что в этом коде нужно исправить?
.model small .386 .stack 100h . data a dw 2 b dw 2 c dw 4 d dw 3 e dw 199 t dw 3 x dd ? w dd ? z dw ? .code begin: mov ax,@data mov ds,ax mov ax,e cmp ax,0 jz m mul t mov bx,dx sal bx,16 mov bx,ax mov x,ebx mov ax,c sal ax,1 sub ax,d mul ax mov bx,dx sal bx,16 mov bx,ax mov ax,b cwde mul ebx mov ebx,edx mov ecx,eax mov ax,a cwde mul eax adc eax,ecx adc edx,ebx div x m: mov ax,4c00h int 21h end begin
Решение задачи: «Вычислить значение выражения: (a^2+b(2c-d)^2)/3e»
textual
Листинг программы
.model small .stack 100h .data a dw 2 b dw 2 c dw 4 d dw 3 e dw 199 .code begin: mov ax,@data mov ds,ax mov ax,e test ax,ax jz m ;умножение на 3 заменим сложение с удвоенным числом mov bp,ax ;bp=ax=e shl ax,1 ;ax=ax*2=e*2 add bp,ax ;bp=ax*3=e*3 ;найдем b(2c-d)^2 mov ax,c ;ax=c shl ax,1 ;ax=2c sub ax,d ;ax=2c-d mul ax ;dx:ax=(2c-d)^2 mov bx,dx ;сохраним множимое для умножения на b mov cx,ax ;bx:cx=(2c-d)^2 ;умножим bx:cx * b в столбик ;сначала умножаем младшее слово множимого на b, сохраняем, как двойное слово ;затем умножаем старшее слово на b, добавляем младшее слово до предыдущего старшего ;старшее слово игнорируем. Считаем, что числа помещаются в слово! mul b ;dx:ax = cx*b xchg ax,cx ;обменяем местами множимое и результат умножения младшего слова множимого на множитель xchg dx,bx mov ax,b ;множитель mul dx ;умножаем старшее слово множимого на множитель add bx,ax ;добавляем младшее слово произведения к старшему слову результата ;старшее слово результата игнорируем, считаем, что оно = 0, т.е. результат умножения помещается в слово ;найдем a^2 mov ax,a mul ax ;dx:ax=a^2 add ax,cx ;dx:ax=a^2+(2c-d)^2 adc dx,bx div bp ;ax=a^2+(2c-d)^2 / 3e m: mov ax,4c00h int 21h end begin
Объяснение кода листинга программы
Код выполняет следующие действия:
- Устанавливает модель памяти на
small
. - Определяет сегменты данных и кода.
- Инициализирует переменные a, b, c, d и e.
- Проверяет, равно ли значение переменной e нулю. Если да, то выполняет последовательность операций, которая заменяет умножение на сложение с удвоенным числом.
- Находит значение (2c-d)^2.
- Умножает (2c-d)^2 на b.
- Находит значение a^2.
- Находит значение выражения a^2 + (2c-d)^2.
- Делит значение выражения на 3e.
- Если значение переменной e не равно нулю, выполняет последовательность операций, которая выводит на экран сообщение
4c00h
. - Если значение переменной e равно нулю, выполняет последовательность операций, которая выводит на экран сообщение
4c00h
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д