Вычисление по формулам значений 2х уравнений - Assembler

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

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

Всё просто, ситуация тривиальна но проблематична. Учусь на программиста, второй курс заканчиваю, программируем на языках высокого уровня, C++ C#, Java была не так давно. Проблема в том, что по одному предмету прошлись вскользь по Асемблеру. Препод сам ничего по нему не знает, но нам задал написать простенькие программки на нём, вычисление по формулам значений 2х уравнений. Я написал, но она считает не правильно. Сам не знаком с ассемблером, всё чот писал, нарыл и начитался в сети, прошу помощи, по тому, что задали вчера, а завтра сдавать. С пн сессия и это просто ужас! Говорю сразу, чётко и ясно, не надо за меня писать задачу, прошу только помочь справить ошибки, если можете Писал я в NotPad++, через DosBox запускал TASM и через него создавал obj-файл, а после Tlink, после которого появлялись в папке map-файл и exe-шник. Последний открывал через TD в том же DOSbox. Пошагово запускал и смотрел на значения переменных, вроде как считает, но почему-то, если производить те же вычисления на калькуляторе, то они не сходятся и не сходятся прилично. По этой ссылке, можно скачать архив с папкой TASM, где будут все три exe-шника (tasm.exe, tlink.exe, td.exe) и файл laba.asm, вдруг понадобиться. А это официальный сайт DOSbox, вдруг у кого-то ещё нет Код:
Листинг программы
  1. ;условие
  2. ; 12*a^2+8*b
  3. ; X = -----------;
  4. ; 2*c^2-a
  5. ;
  6. ; (21+a)*x+1
  7. ; X = -----------.
  8. ; 14-c*b
  9. ;a=5; b=3; c=-3;
  10. ; Пример для случая когда переменные байты
  11. .model small
  12. .stack 100h
  13. .DATA
  14. a db 5
  15. b db 3
  16. c db -3
  17. x db ?
  18. y db ?
  19. .CODE
  20. ;--------------Загрузка адреса сегмента DATA в DS
  21. mov ax,@Data
  22. mov ds,ax
  23. ;--------------Начало вычислений
  24. ;--------------Расчёт X
  25. mov al, c ;загружаем в аккумулятор переменную c
  26. imul c ;c^2
  27. mov cl, 2 ;загружаем в cl - 2
  28. sal ax, cl ;c^2
  29. sub al, a ;c^2-a
  30. mov bl, al ;перемещаем знаменатель в bl
  31. ;------------
  32. mov al, a ;загружаем в al переменную a
  33. imul a ;a^2
  34. mov cl, 12 ;загружаем в cl 12
  35. imul cl ;a^2*12
  36. mov dx, ax ;переносим в dx ax
  37. mov al, b ;загружаем в al переменную b
  38. sal ax, 3 ;b*8
  39. add ax, dx ;12*a^2 + 8*b
  40. cbw ;подготавливаем число к делению
  41. idiv bl ;12*a^2+8*b / 2*c^2-a
  42. mov x, al ;переносим в x значение после деления
  43. ;--------------Расчёт Y
  44. mov al, c ;загружаем в аккумулятор переменную c
  45. imul b ;c*b
  46. mov bl, al ;перемещаем знаменатель в bl
  47. mov al, 14 ;загружаем в al - 14
  48. sub al, bl ;14 - c*b
  49. mov bl, al ;перемещаем знаменатель в bl
  50. ;------------
  51. mov al, 21 ;загружаем в al - 21
  52. add al, a ;21+a
  53. imul x ;(21+a)*x
  54. inc al ;(21+a)*x + 1
  55. cbw ;подготавливаем число к делению
  56. idiv bl ;(21+a)*x+1 / 12-c*b
  57. mov y, al ;переносим в y значение после деления
  58. ;--------------Конец программы
  59. mov ah,4ch ; функция DOS завершения программы ; программы
  60. int 21h ; завершить программу
  61. END
Условие:
a = 5; b = 3; c = -3; 12*a^2+8*b X = -----------; 2*c^2-a (21+a)*x+1 X = -----------. 14-c*b

Решение задачи: «Вычисление по формулам значений 2х уравнений»

textual
Листинг программы
  1. model   tiny
  2. .code
  3. org 100h
  4. start:
  5. mov al,c
  6. imul    al
  7. mov bx,ax
  8. shl bx,1;
  9. mov al,a
  10. cbw
  11. sub bx,ax
  12. imul    al
  13. mov cl,12
  14. imul    cl
  15. xchg    ax,cx
  16. mov al,b
  17. cbw
  18. shl ax,3
  19. add ax,cx
  20. idiv    bx
  21.     ret
  22. a   db  5
  23. b   db  3
  24. c   db  -3
  25.     end start

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


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

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

12   голосов , оценка 3.583 из 5

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

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

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