Вычисление по формулам значений 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, вдруг у кого-то ещё нет
Код:
Условие:
;условие ; 12*a^2+8*b ; X = -----------; ; 2*c^2-a ; ; (21+a)*x+1 ; X = -----------. ; 14-c*b ;a=5; b=3; c=-3; ; Пример для случая когда переменные байты .model small .stack 100h .DATA a db 5 b db 3 c db -3 x db ? y db ? .CODE ;--------------Загрузка адреса сегмента DATA в DS mov ax,@Data mov ds,ax ;--------------Начало вычислений ;--------------Расчёт X mov al, c ;загружаем в аккумулятор переменную c imul c ;c^2 mov cl, 2 ;загружаем в cl - 2 sal ax, cl ;c^2 sub al, a ;c^2-a mov bl, al ;перемещаем знаменатель в bl ;------------ mov al, a ;загружаем в al переменную a imul a ;a^2 mov cl, 12 ;загружаем в cl 12 imul cl ;a^2*12 mov dx, ax ;переносим в dx ax mov al, b ;загружаем в al переменную b sal ax, 3 ;b*8 add ax, dx ;12*a^2 + 8*b cbw ;подготавливаем число к делению idiv bl ;12*a^2+8*b / 2*c^2-a mov x, al ;переносим в x значение после деления ;--------------Расчёт Y mov al, c ;загружаем в аккумулятор переменную c imul b ;c*b mov bl, al ;перемещаем знаменатель в bl mov al, 14 ;загружаем в al - 14 sub al, bl ;14 - c*b mov bl, al ;перемещаем знаменатель в bl ;------------ mov al, 21 ;загружаем в al - 21 add al, a ;21+a imul x ;(21+a)*x inc al ;(21+a)*x + 1 cbw ;подготавливаем число к делению idiv bl ;(21+a)*x+1 / 12-c*b mov y, al ;переносим в y значение после деления ;--------------Конец программы mov ah,4ch ; функция DOS завершения программы ; программы int 21h ; завершить программу 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
Листинг программы
model tiny .code org 100h start: mov al,c imul al mov bx,ax shl bx,1; mov al,a cbw sub bx,ax imul al mov cl,12 imul cl xchg ax,cx mov al,b cbw shl ax,3 add ax,cx idiv bx ret a db 5 b db 3 c db -3 end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д