Разрешение на ассемблирование непривилегированных инструкций

;; процессора 80286 (реальный режим) и инструкций арифметического

;; сопроцессора 80287.

;; Сегмент стэка -----------------------------------------------------------

Stack_segment segment para stack

Dw 16 dup(?)

Stack_segment ends

;; Сегмента данных ---------------------------------------------------------

Data_segment segment para

;; переход на новую строку и возврат каретки

Cr equ 0Dh

Lf equ 0Ah

;; количество символов

Symblos_num equ 16

;; массив, хранящий введённую последовательность

Arr_symbols db symblos_num dup(?)

;; выводимые сообщения

txt_empty_str db 'BBegeHHa9I nocJIegoBaTeJIbHocTb nycTa9I!

XoTuTe noBTopuTb BBog? (y/n)...',cr,lf,'$'

txt_separator db ' >> $'

txt_enter_symb db 'BBeguTe cuMBoJIbI, no}I{aJIyucTa:',cr,lf,'$'

Txt_out_symb db 'BBbIBog cuMBoJIoB B o6paTHoM nop9IgKe c 3aMeHou

u,uqpP:',cr,lf,'$'

txt_print_start db 'BBbIBog Ha ne4aTb.',cr,lf,'$'

txt_print_busy db 'IIpuHTep 3aH9IT!',cr,lf,'$'

txt_print_no_paper db 'HeT 6yMaru!',cr,lf,'$'

txt_print_error db 'Owu6ka Bo BpeM9I ne4aTu!',cr,lf,'$'

Data_segment ends

;; Сегмент кода ------------------------------------------------------------

Code_segment segment para

;; ********************************* MAIN **********************************

;; Главная функция

Main proc far

Assume cs:code_segment,ds:data_segment,ss:stack_segment

Push ds

Mov ax,0

Push ax

Mov ax,data_segment

Mov ds,ax

;; очистка экрана и установка режима

;; режим - 3 (80x25 цветной алфавитноцифровой)

Xor ax,ax

Mov al,3

Int 10h

;; в случае пустой введённой последовательности производится повтор

;; сообщения с просьбой ввести символы, либо выход из программы

main_Repeat_input:

;; вывод времени с разделителем

Call out_curr_time

;; вывод сообщения с просьбой ввести символы

Mov ah,09h

Mov dx,offset txt_enter_symb

Int 21h

;; ввод символьной последовательности

Call input_symbols

Cmp bx,0;; последовательность пустая?

Jne main_Symbols_were_enter;; если нет, продолжаем обработку

;; иначе вывод соответствующего сообще-

;; ния

Call out_curr_time

Mov dx,offset txt_empty_str

Int 21h;; вывод вопроса о повторе ввода

;; если ответом на вопрос были не "y" или "n", то повтор чтения

;; клавиши производится до получения правильного ответа

main_Repeat_answer:

Mov ah,10h;; функция чтения клавиши со 101-

;; клавишной клавиатуры

Int 16h;; вызов

cmp ah,15h;; "Y"?

Je main_Repeat_input;; если да, то повторяем ввод

cmp ah,31h;; "N"?

Jne main_Repeat_answer;; если нет, то спросить ещё раз

Jmp main_End_program;; если да, то выход из программы

;; если символы были введены, то их обработка продолжается

main_Symbols_were_enter:

Call out_curr_time

;; вывод сообщения о том, что сейчас будут выведены символы

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

Mov dx,offset txt_out_symb

Int 21h

Call out_curr_time

Push bx

Call out_revers_replace_symb;; вывод символов на экран

Call out_curr_time

Mov dx,offset txt_print_start

Int 21h

Pop bx

Call out_symbols_on_printer

;; задержка


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: