Выполнение арифметических операций над числами с фиксированной запятой
Краткое сожержание материала:
3
Цель: ознакомиться с командами арифметических операций, вводом данных с клавиатуры и выводом данных на экран.
Задание: написать программу ввода с клавиатуры двух чисел в 9-ричной системе счисления размером с слово, выполнения над ними деления и вывода результата в исходной системе счисления. Программа должна предусматривать контроль вводимой информации, контроль диапазона чисел и результата операции (переполнение, невозможность деления).
Программа:
;-----------ЛАБОРАТОРНАЯ РАБОТА №3
.MODEL SMALL
.STACK 100H
.186
.DATA
S1 DB 'ВВЕДИТЕ ДЕЛИМОЕ В ДЕВЯТИРИЧНОЙ СИСТЕМЕ'
DB ' СЧИСЛЕНИЯ (ОТ -48848 ДО 1О8806): ',10,13,'$'
S2 DB 'ВВЕДИТЕ ДЕЛИТЕЛЬ В ДЕВЯТИРИЧНОЙ СИСТЕМЕ'
DB ' СЧИСЛЕНИЯ (ОТ -48848 ДО 1О8806): ',10,13,'$'
S3 DB 'НЕВЕРНАЯ ЗАПИСЬ ЧИСЛА В ДЕВЯТИРИЧНОЙ'
DB ' СИСТЕМЕ СЧИСЛЕНИЯ ИЗ ЗАДАННОГО ДИАПАЗОНА.','$'
S4 DB 'ДЕЛЕНИЕ НЕВОЗМОЖНО: ДЕЛИТЕЛЬ РАВЕН НУЛЮ.','$'
S5 DB 'ДЕЛЕНИЕ НЕВОЗМОЖНО: ДЕЛИТЕЛЬ БОЛЬШЕ ДЕЛИМОГО.','$'
S6 DB 'ОСТАТОК: ',10,13,'$'
S7 DB 'ЧАСТНОЕ: ',10,13,'$'
L DB '48848' ;МИНИМАЛЬНОЕ ЧИСЛО
H DB '108806' ;МАКСИМАЛЬНОЕ ЧИСЛО
SX DB 12 DUP('x') ;ДЕЛИМОЕ
SY DB 12 DUP('y') ;ДЕЛИТЕЛЬ
SZ DB 8 DUP('0'),'$' ;ЧАСТНОЕ
.CODE
BEGIN: MOV AX, @DATA
MOV DS, AX
;-----------ОЧИСТКА БУФЕРА КЛАВИАТУРЫ
START: CLI ;ЗАПРЕТ ПРЕРЫВАНИЙ
SUB AX, AX
MOV ES, AX
MOV AL, ES:[41AH]
MOV ES:[41CH], AL
STI ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ
;-----------ОЧИСТКА ЭКРАНА
CLD
MOV AX, 0B800H
MOV ES, AX
MOV DI, 0
MOV AL, 32
MOV AH, 7
MOV CX, 2000
REP STOSW
;-----------УСТАНОВКА КУРСОРА В ЛЕВЫЙ ВЕРХНИЙ УГОЛ ЭКРАНА
MOV AH, 2 ;НОМЕР ФУНКЦИИ
MOV BH, 0 ;НОМЕР СТРАНИЦЫ
MOV DH, 0 ;СТРОКА
MOV DL, 0 ;СТОЛБЕЦ
INT 10H ;ПОЗИЦИОНИРОВАНИЕ КУРСОРА
;-----------ВЫВОД ПРИГЛАШЕНИЯ ВВОДА ДЕЛИМОГО
LEA DX, S1
MOV AH, 9
INT 21H
;-----------ВВОД ДЕЛИМОГО
LEA DX, SX
MOV BX, DX
MOV [BX], BYTE PTR 9 ;ПРЕДПОЛАГАЕМАЯ ДЛИНА СТРОКИ
MOV AH, 0AH
INT 21H
;-----------УСТАНОВКА КУРСОРА
MOV AH, 2 ;НОМЕР ФУНКЦИИ
MOV BH, 0 ;НОМЕР СТРАНИЦЫ
MOV DH, 2 ;СТРОКА
MOV DL, 0 ;СТОЛБЕЦ
INT 10H ;ПОЗИЦИОНИРОВАНИЕ КУРСОРА
;-----------ПРОВЕРКА ПРАВИЛЬНОСТИ ВВОДА ДЕЛИМОГО
LEA DX, SX
MOV BX, DX
CALL CONTROL ;ПРОВЕРКА ПРАВИЛЬНОСТИ ВВОДА
MOV AL, [BX]
CMP AL, '0'
JE ZERO1 ;ЧИСЛО ВВЕДЕНО НЕВЕРНО
JMP NEAR PTR DELITEL
ZERO1: LEA DX, S3
MOV AH, 9
INT 21H
;===========ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
MOV AH, 7
INT 21H
JMP NEAR PTR START
;-----------ВЫВОД ПРИГЛАШЕНИЯ ВВОДА ДЕЛИТЕЛЯ
DELITEL: LEA DX, S2
MOV AH, 9
INT 21H
;-----------ВВОД ДЕЛИТЕЛЯ
INPUT: LEA DX, SY
MOV BX, DX
MOV [BX], BYTE PTR 9 ;ПРЕДПОЛАГАЕМАЯ ДЛИНА СТРОКИ
MOV AH, 0AH
INT 21H
;-----------УСТАНОВКА КУРСОРА
MOV AH, 2 ;НОМЕР ФУНКЦИИ
MOV BH, 0 ;НОМЕР СТРАНИЦЫ
MOV DH, 4 ;СТРОКА
MOV DL, 0 ;СТОЛБЕЦ
INT 10H ;ПОЗИЦИОНИРОВАНИЕ КУРСОРА
;-----------ПРОВЕРКА ПРАВИЛЬНОСТИ ВВОДА ДЕЛИТЕЛЯ
LEA DX, SY
MOV BX, DX
CALL CONTROL ;ПРОВЕРКА ПРАВИЛЬНОСТИ ВВОДА
CMP [BX], BYTE PTR '0'
JE ZERO2 ;ЧИСЛО ВВЕДЕНО НЕВЕРНО
JMP NEAR PTR OK
ZERO2: LEA DX, S3
MOV AH, 9
INT 21H
;===========ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
MOV AH, 7
INT 21H
;-----------ОЧИСТКА БУФЕРА КЛАВИАТУРЫ
CLI
SUB AX, AX
MOV ES, AX
MOV AL, ES:[41AH]
MOV ES:[41CH], AL
STI
;-----------ОЧИСТКА ЭКРАНА
CLD
MOV AX, 0B800H
MOV ES, AX
MOV DI, 480
MOV AL, 32
MOV AH, 7
MOV CX, 480
REP STOSW
;-----------УСТАНОВКА КУРСОРА
MOV AH, 2 ;НОМЕР ФУНКЦИИ
MOV BH, 0 ;НОМЕР СТРАНИЦЫ
MOV DH, 3 ;СТРОКА
MOV DL, 0 ;СТОЛБЕЦ
INT 10H ;ПОЗИЦИОНИРОВАНИЕ КУРСОРА
JMP NEAR PTR INPUT
;-----------УСТАНОВКА КУРСОРА
OK: MOV AH, 2 ;НОМЕР ФУНКЦИИ
MOV BH, 0 ;НОМЕР СТРАНИЦЫ
MOV DH, 4 ;СТРОКА
MOV DL, 0 ;СТОЛБЕЦ
INT 10H ;ПОЗИЦИОНИРОВАНИЕ КУРСОРА
;-----------ПРОВЕРКА ВОЗМОЖНОСТИ ДЕЛЕНИЯ
LEA BX, SX
CALL CTRL0
MOV AH, [BX]
LEA BX, SY
CALL CTRL0
MOV AL, [BX]
CMP AL, '0'
JE NULL
JMP N_NULL
;-----------ДЕЛИТЕЛЬ РАВЕН НУЛЮ
NULL: LEA DX, S4
MOV AH, 9
INT 21H
JMP NEAR PTR ENDPROG
;-----------ДЕЛИТЕЛЬ НЕ РАВЕН НУЛЮ
N_NULL: CMP AH, '0'
JNE DELENIE
;-----------ДЕЛИМОЕ РАВНО НУЛЮ
LEA DX, S7
MOV AH, 9
INT 21H
LEA BX, SZ
MOV [BX], BYTE PTR '0'
INC BX
MOV [BX], BYTE PTR 10
INC BX
MOV [BX], BYTE PTR 13
INC BX
MOV [BX], BYTE PTR '$'
LEA DX, SZ
MOV AH, 9
INT 21H
LEA DX, S6
MOV AH, 9
INT 21H
LEA DX, SZ
MOV AH, 9
INT 21H
JMP NEAR PTR ENDPROG
;-----------ДЕЛИМОЕ И ДЕЛИТЕЛЬ НЕ РАВНЫ НУЛЮ
DELENIE: LEA SI, SX
LEA DI, SY
CALL COMPARE
CMP [SI], BYTE PTR 1
JE POSSIBLE
;-----------ДЕЛИТЕЛЬ БОЛЬШЕ ДЕЛИМОГО
LEA DX, S5
MOV AH, 9
INT 21H
JMP NEAR PTR ENDPROG
;-----------НАЧИНАЕТСЯ ДЕЛЕНИЕ
POSSIBLE: MOV BX, 7 ;BX - ИНДЕКС ДЛЯ ЧАСТНОГО
;-----------В СХ - ЧИСЛО РАЗРЯДОВ ДЕЛИТЕЛЯ
AGAIN: MOV CL, SY[1] ;CX - ЧИСЛО РАЗРАДОВ ДЕЛИТЕЛЯ
MOV CH, 0
;-----------DI - НА МЛАДШИЙ РАЗРЯД ДЕЛИТЕЛЯ
MOV DI, CX ;DI - ИНДЕКС ДЛЯ ДЕЛИТЕЛЯ
INC DI
;-----------УДАЛЕНИЕ ВЕДУЩИХ НУЛЕЙ ДЕЛИТЕЛЯ
MOV SI, 2 ;SI - ИНДЕКС ДЛЯ ДЕЛИМОГО
MOV AL, SY[SI]
CMP AL, '-'
JNE BEFORE_C1
INC SI
DEC CX
BEFORE_C1: MOV AL, SY[SI]
CMP AL, '0'
JE SS1
JMP LBLL
SS1: INC SI
DEC CX
JMP BEFORE_C1
;-----------SI - НА МЛАДШИЙ РАЗРЯД ДЕЛИМОГО
LBLL: MOV AL, SX[1]
CBW ;АН - ДЛЯ ЗАПИСИ ПЕРЕНОСА
MOV SI, AX
INC SI
;-----------НАЧАЛО ЦИКЛА ДЕЛЕНИЯ
;===========СРАВНЕНИЕ ЦИФР РАЗРЯДА ДЕЛИМОГО И ДЕЛИТЕЛЯ
C1: MOV AL, SX[SI]
CMP AL, SY[DI]
JAE NEXT
;===========ЦИФРА ДЕЛИМОГО МЕНЬШЕ ЦИФРЫ ДЕЛИТЕЛЯ
ADD AL, 9 ;ЗАЁМ ЕДИНИЦЫ
SUB AL, SY[DI] ;ВЫЧИТАНИЕ
ADD AL, '0' ;ПЕРЕВОД ЦИФРЫ В ЕЕ КО...
Выполнение арифметических операций в АЛУ
Рассмотрены основные алгоритмы выполнения арифметических операций для чисел с фиксированной и плавающей запятой. Приведены примеры выполнения операций...
Родовое содержание и видовые формы арифметической операции над натуральными числами
Описание стандартного подхода к изучению арифметических операций над натуральными числами. Связь между операциями над конечными количествами и операци...
Разработка программного обеспечения для реализации арифметических операций над комплексными числами
Понятие и функции комплексных чисел. Правила выполнения арифметических операций с комплексными числами. Действия с комплексными числами: сложение, выч...
Лабораторная работа №3 по информатике
Лабораторная работа 3ИЗУЧЕНИЕ ПРИНЦИПОВ ОРГАНИЗАЦИИ АРИФМЕТИКО-ЛОГИЧЕСКИЗ УСТ-РОЙСТВ. СТРУКТУРА АЛУ ДЛЯ УМНЛЖЕНИЯ ЧИСЕЛ С ФИКСИРОВАННОЙЗАПЯТОЙЦ е л ь...
Проектирование цифрового автомата по выполнению арифметических операций
Изучение принципа работы цифрового автомата для сложения двоичных чисел, представленных в форме с фиксированной запятой, на базисе алгебры Буля. Прави...