Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Примеры программ



;Программа очистки экрана через видеобуфер

.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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...