Вычислить значение выражения: (a^2+b(2c-d)^2)/3e - Assembler (223235)

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

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

Вычислить f=(a^2+b(2c-d)^2)/3e , операнды – слова, вычисления беззнаковые. Подскажите,что в этом коде нужно исправить?
Листинг программы
  1. .model small
  2. .386
  3. .stack 100h
  4. . data
  5. a dw 2
  6. b dw 2
  7. c dw 4
  8. d dw 3
  9. e dw 199
  10. t dw 3
  11. x dd ?
  12. w dd ?
  13. z dw ?
  14. .code
  15. begin:
  16. mov ax,@data
  17. mov ds,ax
  18. mov ax,e
  19. cmp ax,0
  20. jz m
  21. mul t
  22. mov bx,dx
  23. sal bx,16
  24. mov bx,ax
  25. mov x,ebx
  26. mov ax,c
  27. sal ax,1
  28. sub ax,d
  29. mul ax
  30. mov bx,dx
  31. sal bx,16
  32. mov bx,ax
  33. mov ax,b
  34. cwde
  35. mul ebx
  36. mov ebx,edx
  37. mov ecx,eax
  38. mov ax,a
  39. cwde
  40. mul eax
  41. adc eax,ecx
  42. adc edx,ebx
  43. div x
  44. m: mov ax,4c00h
  45. int 21h
  46. end begin

Решение задачи: «Вычислить значение выражения: (a^2+b(2c-d)^2)/3e»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4.     a dw 2
  5.     b dw 2
  6.     c dw 4
  7.     d dw 3
  8.     e dw 199
  9. .code
  10. begin:
  11.     mov ax,@data
  12.     mov ds,ax
  13.     mov ax,e
  14.     test ax,ax
  15.     jz m
  16.             ;умножение на 3 заменим сложение с удвоенным числом
  17.     mov bp,ax   ;bp=ax=e
  18.     shl ax,1    ;ax=ax*2=e*2
  19.     add bp,ax   ;bp=ax*3=e*3
  20.             ;найдем b(2c-d)^2
  21.     mov ax,c    ;ax=c
  22.     shl ax,1    ;ax=2c
  23.     sub ax,d    ;ax=2c-d
  24.     mul ax      ;dx:ax=(2c-d)^2
  25.     mov bx,dx   ;сохраним множимое для умножения на b
  26.     mov cx,ax   ;bx:cx=(2c-d)^2
  27.             ;умножим bx:cx * b в столбик
  28.             ;сначала умножаем младшее слово множимого на b, сохраняем, как двойное слово
  29.             ;затем умножаем старшее слово на b, добавляем младшее слово до предыдущего старшего
  30.             ;старшее слово игнорируем. Считаем, что числа помещаются в слово!
  31.     mul b       ;dx:ax = cx*b
  32.     xchg ax,cx  ;обменяем местами множимое и результат умножения младшего слова множимого на множитель
  33.     xchg dx,bx
  34.     mov ax,b    ;множитель
  35.     mul dx      ;умножаем старшее слово множимого на множитель
  36.     add bx,ax   ;добавляем младшее слово произведения к старшему слову результата
  37.             ;старшее слово результата игнорируем, считаем, что оно = 0, т.е. результат умножения помещается в слово
  38.             ;найдем a^2
  39.     mov ax,a
  40.     mul ax      ;dx:ax=a^2
  41.     add ax,cx   ;dx:ax=a^2+(2c-d)^2
  42.     adc dx,bx
  43.    
  44.     div bp      ;ax=a^2+(2c-d)^2 / 3e
  45.    
  46. m:  mov ax,4c00h
  47.     int 21h
  48. end begin

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

Код выполняет следующие действия:

  1. Устанавливает модель памяти на small.
  2. Определяет сегменты данных и кода.
  3. Инициализирует переменные a, b, c, d и e.
  4. Проверяет, равно ли значение переменной e нулю. Если да, то выполняет последовательность операций, которая заменяет умножение на сложение с удвоенным числом.
  5. Находит значение (2c-d)^2.
  6. Умножает (2c-d)^2 на b.
  7. Находит значение a^2.
  8. Находит значение выражения a^2 + (2c-d)^2.
  9. Делит значение выражения на 3e.
  10. Если значение переменной e не равно нулю, выполняет последовательность операций, которая выводит на экран сообщение 4c00h.
  11. Если значение переменной e равно нулю, выполняет последовательность операций, которая выводит на экран сообщение 4c00h.

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


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

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

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

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

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

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