Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
;Программа очистки экрана через видеобуфер
.model small
.486
.stack 100h
.code
begin: mov ax,@data
mov ds,ax
mov ax,0b800h; адрес видеобуфера текстовых режимов
mov es,ax; настройка регистра es на видеобуфер
mov di,00h; настройка регистра di на начало видеобуфера
mov ax,0700h; определение атрибутов фона и символа: черный фон, белый символ
mov cx,2000; счетчик числа выводимых символов- выводим на экран 2000 пробелов
rep stosw
mov ax,4c00h; вызов функции завершения программы
int 21h
end begin
;*****************************************************************
;Программа демонстрации суммирования элементов двух массивов целых чисел
.model small
.486
.stack 100h
.data
M1 db 1,2,3,4,5; первый исходный массив
M2 db 6,7,8,9,10;второй исходный массив
M3 db 5 dup(0); массив результата
.code
begin:mov ax,@data; настройка сегментного регистра ds
mov ds,ax; на сегмент данных
xor di,di;обнуление индексного регистра
mov cx,5;определение счетчика цикла
met: mov al,M1[di];пересылка элемента М1 в регистр
add al,M2[di];суммирование элементов массивов
mov M3[di],al;запись в память результата
inc di; увеличение индекса элемента массива
loop met; возврат на цикл
kon: mov ah,4ch
int 21h
end begin
;*****************************************************************
;Программа перекодировки символов из 16 системы счисления в ASCII или BCD код
.model small
.486
.stack 100h
.data
SH db 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh
ASCII db '0123456789abcdef'
BCD db 0,1,2,3,4,5,6,7,8,9,10h,11h,12h,13h,14h,15h
.code
begin: mov ax,@data
mov ds,ax
mov al,SH[3]; загрузка 3 элемента массива в al
mov dl,al; пересылка его в dl
lea bx,ASCII; настройка адреса массива ASCII кодов на регистр bx
xlat; перекодировка: в al вместо 16 кода – ASCII -код
mov ch,al; сохранение его в ch
mov al,dl; восстановление 16 кода в al
lea bx,BCD; настройка регистра bx на адрес массива BCD
xlat; перекодировка: в al вместо 16 кода – BCD -код
mov cl,al; сохранение его в cl
mov ah,4ch; завершение программы
int 21h
end begin
;****************************************************************
;Программа ввода и перевода вещественных границ интервала определения функции
.Model Small
.486
.Stack 200h
.Data
buf db 18; буфер для ввода вещественного числа
db 0; MS DOS возвращает число введенных символов
db 18 dup(0); максимальный размер вводимой строки
ten dw 10; константа 10
XL dq 0; левая граница интервала
XP dq 0; правая граница интервала
mes1 db 13,10,' Введите левую границу',13,10,'$'
mes2 db 13,10,' Введите правую границу',13,10,'$'
mes3 db 13,10,' Левая граница не может быть равна правой!',13,10,'$'
mes4 db 13,10,' Левая граница не может быть больше правой!',13,10,'$'
c dw 0; переменная для двоичного кода одной цифры числа
;*********************************************************
.Code
GRAN PROC; Процедура ввода и перевода вещественного числа
pusha
vvod:
mov ah, 0Ah; вызов системной функции для ввода строки
lea dx, buf
int 21h
fldz; загрузка в стек сопроцессора 0
mov si, 2; настройка si на первый символ введенной строки в буфере
cmp buf[si],'-'; первый символ - минус?
je M1; да – переход на M1
cmp buf[si],'+'; первый символ – плюс?
jne M2; если нет – то переход на M2
M1: inc si; переход к следующему символу в строке
M2: cmp buf[si],'.'; очередной символ – десятичная точка
je Drob; если да – то переход на обработку дробной части
cmp buf[si],0dh; иначе – сравнение с кодом клавиши Enter – признак конца строки
je Kon_enter; если да – то переход на метку Kon_enter
cmp buf[si],'0'; иначе – проверка: символ это цифра?
jb vvod; если код символа меньше кода нуля – то повторный ввод
cmp buf[si],'9';
ja vvod; если код символа больше кода девяти – то повторный ввод
mov al,buf[si]; если цифра – то загрузить ее код в al
sub al,'0'; перевод кода символа цифры в двоичный код
xor ah,ah; обнуление регистра
mov c, ax; сохранение двоичного кода цифры
fimul ten; умножение числа в вершине стека на 10
fild c; загрузка кода цифры в вершину стека
fadd; сложение с предыдущей частью числа
inc si
jmp M2; переход к следующему символу в целой части числа
Drob:; обработка дробной части
fldz
xor bx,bx
mov bl,buf[1]; загрузка в bx числа введенных символов
mov si,bx; настройка si на последний символ
inc si
L1:; цикл обработки дробной части
mov al,buf[si]
cmp al,'.'; сравнение с кодом десятичной точки
je Kon_drob; если точка – то завершение обработки дробной части
cmp buf[si],'0'; проверка кода символа на цифры
jb vvod
cmp buf[si],'9'
ja vvod
sub al,'0'; перевод в двоичный код
xor ah,ah
mov c, ax; сохранение двоичного кода цифры
fild c; загрузка кода цифры в вершину стека
fadd; сложение с предыдущей дробной частью числа
fidiv ten; деление на 10
dec si
jmp L1; переход к следующей цифре
Kon_drob: fadd; сложение целой и дробной частей числа
Kon_enter:
cmp buf[2],'-'; определение отрицательного числа
jne Kon; если число положительное – то на метку Kon
fchs; иначе – инвертировать число в вершине стека
Kon:
popa
ret
GRAN endp
;*******************************************
Start:; начало основной программы
mov ax,@data
mov ds,ax
repeat:
finit; инициализация сопроцессора
mov ah,9; вывод первого сообщения
lea dx,mes1
int 21h
Call GRAN
fst XL; сохранение левой границы интервала
mov ah,9; вывод второго сообщения
lea dx,mes2
int 21h
Call GRAN
fst XP; сохранение правой границы интервала
fcom; сравнение левой и правой границ
fstsw ax; передача кодов условия в ЦП
fwait
sahf
je ravno; если границы равны – то ошибка
jb menshe; если правая граница меньше левой – то ошибка
jmp end_progr; если границы введены верно – то выход из программы
ravno:
mov ah,9
lea dx,mes3
int 21h
jmp repeat
menshe:
mov ah,9
lea dx,mes4
int 21h
jmp repeat
end_progr:
mov ah,4ch
int 21h
End Start
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
Григорьев В.Г. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). Книга 1. Программная архитектура. - М., ГРАНАЛ, 1993. - с.346, ил.87.
Григорьев В.Г. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). Книга 2. Аппаратная архитектура. Книга 3. Устройство с плавающей точкой. Книга 4. Справочник по системе команд. - М., ГРАНАЛ, 1993. - с.382, ил.54.
Юров В. Assembler, -СПб: Питер, 2001, - 624 с.
Зубков С.В. Assembler для Dos, Windows и UNIX. 2 – е изд., испр. и доп. – М., ДМК, 2000. – 608 с.
Дата публикования: 2014-11-18; Прочитано: 335 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!