Проблема с делением если деление происходит без остатка то все работает, только знак почемуто не учитывается,
ну а если деление с остатком то вылазиет какая то ерунда.
И еще как в регистр АХ записать например число 2087
Код: Выделить всё
title РГЗ 3-й вариант
stdin=0
stdout=1
stderr=2
assume SS:StackSg, DS :D ataSg, CS:CodeSg ;Сегментным регистрам
;присвоены имена сегментов
StackSg segment stack ;начало сегмента стека
db 128 dup(?) ;стек размером 128 байт
StackSg ends ;конец сегмента стека
DataSg segment ;начало сегмента данных
a db ?
b db ?
c db ?
x db ?
y db ?
m db 10 ;множитель при перводе строки в число
Msg db 'Программа расчёта выражения y=135x+((cx-2087*b)/a^2); (1 вариант)',10,10,13,'$'
str1 db 'Клавиша "1" - приступить к решению',0Ah,0AH,0Dh,'Клавиша "2" - выход в DOS',10,10,13,'$'
str2 db 'Клавиша "V" - вывод результата на другую видеостраницу',10,10,13,'Клавиша "F" - запись результата в файл',10,10,13,'$'
MsgErr db 'Внимание!!! Деление на 0!! Введите другие данные!',10,10,13,'$'
zaprosA db 'Введите a: $'
zaprosB db 'Введите b: $'
zaprosC db 'Введите c: $'
zaprosX db 'Введите x: $'
probel db 10,10,13,'$'
buf db 8,8 dup (0)
bufout db 9 dup (?)
DataSg ends ;конец сегмента данных
CodeSg segment ;начало сегмента кода
Bxod: ;метка точки входа в программу
mov AX, DataSg ;адрес сегмента данных в АХ
mov DS, AX ;перевод адреса в DSв
mov AH, 09h ;номер функции 21-го прерывания*
lea DX, probel ;адрес строки сообщения в DX
int 21h ;вызов 21-го прерывания-
;-вывод строки на экран
lea DX, Msg
int 21h
lea DX, str1
int 21h
vibor:
mov AH, 07h ;ф-я ввода с клавиатуры без эха
int 21h
cmp AL, '2' ;нажата клавиша 2?
je perexod ;если да, идём на безусловный переход (усл. переход действует только в пределах 128 байт, а безусл. неограниченно)
cmp AL, '1' ;нажата клавиша 1?
jne vibor ;если нет (т.е. любая, кроме 1 или 2), возвращаемся на ввод
je dalee ;если да, идём далее
perexod:jmp vixod
dalee:
mov AH, 09h
lea DX, zaprosA
int 21h
mov AH, 0ah ;ввод с клавиатуры с эхом
lea DX, buf
int 21h
call conv
mov a, DL
mov AH, 09h
lea DX, zaprosB
int 21h
mov AH, 0ah ;ввод с клавиатуры с эхом
lea DX, buf
int 21h
call conv
mov b, DL
mov AH, 09h
lea DX, zaprosC
int 21h
mov AH, 0ah ;ввод с клавиатуры с эхом
lea DX, buf
int 21h
call conv
mov c, DL
mov AH, 09h
lea DX, zaprosX
int 21h
mov AH, 0ah ;ввод с клавиатуры с эхом
lea DX, buf
int 21h
call conv
mov x, DL