Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Выполнение арифметических операций над числами с фиксированной запятой

Тип: лабораторная работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Создание программы ввода с клавиатуры двух чисел в 9-ричной системе счисления размером с слово, выполнение над ними деления и вывода результата в исходной системе счисления. Программа предусматривает контроль вводимой информации и результат операции.
Краткое сожержание материала:

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ИЗУЧЕНИЕ ПРИНЦИПОВ ОРГАНИЗАЦИИ АРИФМЕТИКО-ЛОГИЧЕСКИЗ УСТ-РОЙСТВ. СТРУКТУРА АЛУ ДЛЯ УМНЛЖЕНИЯ ЧИСЕЛ С ФИКСИРОВАННОЙЗАПЯТОЙЦ е л ь...

Проектирование цифрового автомата по выполнению арифметических операций
Изучение принципа работы цифрового автомата для сложения двоичных чисел, представленных в форме с фиксированной запятой, на базисе алгебры Буля. Прави...