Вычисление по формулам значений 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

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


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

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

12   голосов , оценка 3.583 из 5
Похожие ответы