Программирование на языке Ассемблер

Основные этапы разработки программы на Ассемблере, содержание ее текста. Классификационные признаки системы команд, виды инструкций и способы адресации операндов. Проверка различных клавиш в буфере клавиатуры, порты ее контроллера и функции клавиш.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 12.08.2011
Размер файла 47,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

14

18

КОНТРОЛЬНАЯ РАБОТА

ПО ДИСЦИПЛИНЕ «ПРОГРАММИРОВАНИЕ»

Содержание

Задание 1. Тест клавиатуры

Задание 2. Проверка различных клавиш в буфере клавиатуры

Список используемой литературы

Задание 1. Тест клавиатуры

ассемблер инструкция операнд клавиша

Язык программирования наиболее полно учитывающий особенности "родного" микропроцессора и содержащий мнемонические обозначения машинных команд называется Ассемблером. Программа, написанная на Ассемблере, называется исходной программой. Далее остановимся на версии, называемой Турбо Ассемблер.

Разработка программы на Ассемблере состоит из следующих этапов:

1) Составление алгоритма в виде блок-схемы или структурного описания,

2) Ввод в ЭВМ текста исходной программы PROG.ASM с помощью редактора текстов. Имя PROG может быть произвольным, а расширение ASM - обязательно,

3) Перевод (трансляция или ассемблирование) исходной программы в машинные коды с помощью транслятора TASM.EXE. На этом этапе получается промежуточный продукт PROG.OBJ (объектный код). Выявленные при этом синтаксические и орфографические ошибки исправляются повтором пп. 2 и 3,

4) Преобразование с помощью программы TLINK.EXE объектного кода PROG.OBJ в выполнимый код PROG.EXE или PROG.COM.

5) Выполнение программы и ее отладка начиная с п. 1, если встретились логические ошибки.

Текст программы на Ассемблере содержит следующие операции:

· а) команды или инструкции,

· б) директивы или псевдооператоры,

· в) операторы,

· г) предопределенные имена.

Действия обусловленные операциями перечисленными в пп. б, в, г выполняются на этапе трансляции, т.е. являются командами Ассемблеру. Операции, называемые командами или инструкциями выполняются во время выполнения программы, т.е. являются командами микропроцессору.

Инструкция записывается на отдельной строке и включает до четырех полей, необязательные из которых выделены:

[метка:]

мнемоника_команды

[операнд(ы)]

[;комментарий]

Метка или символический адрес содержит до 31 символа из букв цифр и знаков ? @. _ $. Причем цифра не должна стоять первой, а точка, если есть должна быть первой.

Мнемоника - сокращенное обозначение кода операции (КОП) команды, например мнемоника ADD обозначает сложение (addition).

Операндами могут быть явно или неявно задаваемые двоичные наборы, над которыми производятся операции. Операнды приводятся в одной из четырех систем счисления и должны оканчиваться символом b(B), o(O), d(D), h(H) для 2, 8, 10 или 16-ной СС. К шестнадцатиричному числу добавляется слева ноль, если оно начинается с буквы.

Система команд может быть классифицирована по трем основным признакам:

· длина команды или число занимаемых ею байтов,

· функциональное назначение и

· способ адресации.

Для МП 1810ВМ86 (8086) команда занимает от одного до шести байтов. Первым байтом команды всегда является код операции, например код команды INT XXh равен CD(HEX).

По функциональному признаку инструкции можно разбить на пять больших групп:

· 1) команды пересылки данных,

· 2) арифметические команды,

· 3) логические команды,

· 4) команды переходов и

· 5) команды управления.

Существует пять основных способов адресации:

· регистровая,

· непосредственная,

· прямая,

· косвенная и

· стековая.

Большинство остальных способов адресации являются комбинациями или видоизменениями перечисленных.

В первом случае операнд(ы) располагаются в регистрах микропроцессора (МП), например по команде MOV AX,CX пересылается содержимое CX в AX.

При непосредственной адресации операнд располагается в памяти непосредственно за КОП, инструкция MOV AL, 0f5h записывает число 245(f5) в регистр AL.

В случае прямой адресации за КОП следует не сам операнд, а адрес ячейки памяти или внешнего устройства, например команда IN AL, 40h вводит байт данных из внешнего устройства с адресом 40h.

Косвенная адресация отличается от регистровой тем, что в регистре хранится адрес операнда, т.е. по команде MOV AL, [BX] в аккумулятор al будет записано число из ячейки памяти с адресом, хранящимся в регистре BX.

Стековая адресация производится к операндам расположенным в области памяти, называемой стек.

model small

.stack 100h

.data

MaxLen db 5

Len db 0

buff db 5 dup (0)

minus db 0

mas db 7 dup (0)

sum db 0

min db 7Fh

ErrInpMsg db 'Error Input!!!',13,10,'$'

InpMsg db 'Input '

Count db 0,' element (-128..127) :',13,10,'$'

Otvet db 'Otevet: $'

.code

start:

mov ax,@data

mov ds,ax

mov es,ax

xor ax,ax

call input

call Do

call output

mov ah,8

int 21h

mov ax,4c00h

int 21h

input proc

xor di,di

mov cx,7

inputLoop:

call inputEl

inc di

loop inputLoop

ret

endp

inputEl proc

push cx

inputElMain:

mov mas[di],0

call InputMsg

mov ah,0Ah

mov dx,offset MaxLen

int 21h

mov dl,10

mov ah,2

int 21h

cmp Len,0

je errInputEl

mov minus,0

xor bx,bx

mov bl,Len

mov si,offset Len

add si,bx

mov bl,1

xor cx,cx

mov cl,Len

inputElLoop:

std

lodsb

call checkSym

cmp ah,1

je errInputEl

cmp ah,2

je nextSym

sub al,'0'

mul bl

test ah,ah

jnz errInputEl

add mas[di],al

jo errInputEl

js errInputEl

mov al,bl

mov bl,10

mul bl

test ah,ah

jz ElNextCheck

cmp ah,3

jne errInputEl

ElNextCheck:

mov bl,al

jmp nextSym

errInputEl:

call ErrorInput

jmp inputElMain

nextSym:

loop inputElLoop

cmp minus,0

je exitInputEl

neg mas[di]

exitInputEl:

pop cx

ret

endp

checkSym proc

cmp al,'-'

je minusSym

cmp al,'9'

ja errCheckSym

cmp al,'0'

jb errCheckSym

jmp exitCheckGood

minusSym:

cmp si,offset Len

je exitWithMinus

errCheckSym:

mov ah,1

jmp exitCheckSym

exitWithMinus:

mov ah,2

mov minus,1

cmp Len,1

je errCheckSym

jmp exitCheckSym

exitCheckGood:

xor ah,ah

exitCheckSym:

ret

endp

ErrorInput proc

mov dx,offset ErrInpMsg

mov ah,9

int 21h

ret

endp

InputMsg proc

mov ax,di

add al,'0'

mov Count,al

mov ah,9

mov dx,offset InpMsg

int 21h

ret

endp

DoEl proc

mov ah,min

cmp mas[di],ah

jnl notNewMin

mov ah,mas[di]

mov min,ah

notNewMin:

cmp mas[di],-5

jl notSum

cmp mas[di],15

jg notSum

mov ah,mas[di]

add sum,ah

notSum:

ret

endp

Do proc

xor di,di

mov cx,7

DoLoop:

call DoEl

inc di

loop DoLoop

ret

endp

output proc

mov di,offset Otvet+11

mov minus,0

mov bl,10

mov al,sum

imul min

test ax,ax

jns notMinusOut

mov minus,1

neg ax

notMinusOut:

div bl

xchg ah,al

add al,'0'

std

stosb

sub al,'0'

xchg ah,al

xor ah,ah

test al,al

jz CheckForMinus

jmp notMinusOut

CheckForMinus:

cmp minus,0

je endOutput

mov al,'-'

std

stosb

endOutput:

mov ah,9

mov dx,offset Otvet

int 21h

ret

endp

end start

Задание 2. Проверка различных клавиш в буфере клавиатуры

Контроллеру клавиатуры соответствуют порты с номерами от 60h до 6Fh, хотя для всех стандартных операций достаточно портов 60h и 61h.

64h для чтения: регистр состояния клавиатуры, возвращает следующий байт:

бит 7: ошибка четности при передаче данных с клавиатуры

бит 6: тайм-аут при приеме

бит 5: тайм-аут при передаче

бит 4: клавиатура закрыта ключом

бит 3: данные, записанные в регистр ввода, - команда

бит 2: самотестирование закончено

бит 1: в буфере ввода есть данные (для контроллера клавиатуры)

бит 0: в буфере вывода есть данные (для компьютера)

При записи в этот порт он играет роль дополнительного регистра управления клавиатурой, но его команды сильно различаются для разных плат и разных BIOS, и мы не будем его подробно рассматривать.

61h для чтения и записи - регистр управления клавиатурой. Если в старший бит этого порта записать значение 1, клавиатура будет заблокирована, если 0 - разблокирована. Другие биты этого порта менять нельзя, так как они управляют другими устройствами (в частности динамиком). Чтобы изменить состояние клавиатуры, надо считать байт из порта, изменить бит 7 и снова записать в порт 61h этот байт.

60h для чтения - порт данных клавиатуры. При чтении из него можно получить скан-код последней нажатой клавиши (см. приложение 1) - именно так лучше всего реализовывать резидентные программы, перехватывающие прерывание IRQ1, так как по этому коду можно определять момент нажатия и отпускания любой клавиши, включая такие клавиши, как Shift/Ctrl/Alt или даже Pause (скан-код отпускания клавиши равен скан-коду нажатия плюс 80h):

int09h_handler:

in al,60h ; прочитать скан-код клавиши,

cmp al,hot_key ; если это наша "горячая"

; клавиша,

jne not_our_key ; перейти к нашему

; обработчику

[...] ; наши действия здесь

not_our_key:

jmp old_int09h ; вызов старого обработчика

Мы пока не можем завершить обработчик просто командой IRET, потому что, во-первых, обработчик аппаратного прерывания клавиатуры должен установить бит 7 порта 61h, а затем вернуть его в исходное состояние, например так:

in al,61h

push ax

or al,80h

out 61h,al

pop ax

out 61h,al

А во-вторых, он должен сообщить контроллеру прерываний, что обработка аппаратного прерывания закончилась командами

mov al,20h

out 20h,al

60h для записи - регистр управления клавиатурой. Байт, записанный в этот порт (если бит 1 в порту 64h равен 0), интерпретируется как команда. Некоторые команды состоят из более чем одного байта - тогда следует дождаться обнуления зтого бита еще раз перед тем, как посылать следующий байт. Перечислим наиболее стандартные команды.

Команда EDh 0?h - изменить состояние светодиодов клавиатуры. Второй байт этой команды определяет новое состояние:

бит 0 - состояние Scroll Lock (1 - включена, 0 - выключена)

бит 1 - состояние Num Lock

бит 2 - состояние Caps Lock

При этом состояние переключателей, которое хранит BIOS в байтах состояния клавиатуры, не изменяется, и при первой возможности обработчик прерывания клавиатуры BIOS восстановит состояние светодиодов.

Команда EEh - эхо-запрос. Клавиатура отвечает скан-кодом EEh.

Команда F3h ??h - Установить параметры режима автоповтора:

бит 7 второго байта команды - 0

биты 6 - 5 устанавливают паузу перед началом автоповтора:

00 = 250ms, 01 = 500ms, 10 = 750ms, 11 = 1000ms

биты 4 - 0 устанавливают скорость автоповтора (символов в секунду):

00000 = 30,0 01111 = 8,0

00010 = 24,0 10010 = 6,0

00100 = 20,0 10100 = 5,0

00111 = 16,0 10111 = 4,0

01000 = 15,0 11010 = 3,0

01010 = 12,0 11111 = 2,0

01100 = 10,0

Все промежуточные значения также имеют смысл и соответствуют промежуточным скоростям, например 00001 = 26,7.

Команда F4h - включить клавиатуру.

Команда F5h - выключить клавиатуру.

Команда F6h - установить параметры по умолчанию.

Команда FEh - послать последний скан-код еще раз.

Команда FFh - выполнить самотестирование.

Клавиатура отвечает на все команды, кроме EEh и FEh, скан-кодом FAh (подтверждение), который поглощается стандартным обработчиком BIOS, так что, если мы не замещаем полностью стандартный обработчик, о его обработке можно не беспокоиться.

Как и в случае вывода на экран, DOS предоставляет набор функций для чтения данных с клавиатуры, которые используют стандартное устройство ввода STDIN, так что можно использовать в качестве источника данных файл или стандартный вывод другой программы.

Функция DOS 0Ah - Считать строку символов из STDIN в буфер

Ввод:

АН = 0Ah

DS:DX = адрес буфера

Вывод:

Буфер содержит введенную строку

Для вызова этой функции надо подготовить буфер, первый байт которого содержит максимальное число символов для ввода (1 - 254), а содержимое, если оно задано, может использоваться как подсказка для ввода. При наборе строки обрабатываются клавиши Esc, F3, F5, BS, Ctrl-C/Ctrl-Break и т.д., как при наборе команд DOS (то есть Esc начинает ввод сначала, F3 восстанавливает подсказку для ввода, F5 запоминает текущую строку как подсказку, Backspace стирает предыдущий символ). После нажатия клавиши Enter строка (включая последний символ CR (0Dh)) записывается в буфер, начиная с третьего байта. Во второй байт записывается длина реально введенной строки без учета последнего CR.

Рассмотрим пример программы, выполняющей преобразование десятичного числа в шестнадцатеричное.

; dosinl.asm

; Переводит десятичное число в шестнадцатеричное

;.model tiny

.code

.286 ; для команды shr al,4

org 100h ; начало СОМ-файла

start:

mov dx,offset message1

mov ah,9

int 21h ; вывести приглашение ко вводу message1

mov dx,offset buffer

mov ah,0Ah

int 21h ; считать строку символов в буфер

mov dx,offset crlf

mov ah,9

int 21h ; перевод строки

; перевод числа в ASCII-формате из буфера в бинарное число в АХ

xor di,di ; DI = 0 - номер байта в буфере

xor ах,ах ; АХ = 0 - текущее значение результата

mov cl,blength

xor ch,ch

xor bx,bx

mov si,cx ; SI - длина буфера

mov cl,10 ; CL = 10, множитель для MUL

asc2hex:

mov bl,byte ptr bcontents[di]

sub bl,'0' ; цифра = код цифры - код символа "0",

jb asc_error ; если код символа был меньше, чем код "0",

cmp bl,9 ; или больше, чем "9",

ja asc_error ; выйти из программы с сообщением об ошибке,

mul cx ; иначе: умножить текущий результат на 10,

add ax,bx ; добавить к нему новую цифру,

inc di ; увеличить счетчик

cmp di,si ; если счетчик+1 меньше числа символов -

jb asc2hex ; продолжить (счетчик считается от 0)

; вывод на экран строки message2

push ax ; сохранить результат преобразования

mov ah,9

mov dx,offset message2

int 21h

pop ax

; вывод на экран числа из регистра АХ

push ax

xchg ah,al ; поместить в AL старший байт

call print_al ; вывести его на экран

pop ax ; восстановить в AL младший байт

call print_al ; вывести его на экран

ret ; завершение СОМ-файла

asc_error:

mov dx,offset err_msg

mov ah,9

int 21h ; вывести сообщение об ошибке

ret ; и завершить программу

; Процедура print_al

; выводит на экран число в регистре AL

; в шестнадцатеричном формате,

; модифицирует значения регистров АХ и DX

print_al:

mov dh,al

and dh,0Fh ; DH - младшие 4 бита

shr al,4 ; AL - старшие

call print_nibble ; вывести старшую цифру

mov al,dh ; теперь AL содержит младшие 4 бита

print_nibble: ; процедура вывода 4 бит (шестнадцатеричной цифры)

cmp al,10 ; три команды, переводящие цифру в AL

sbb al,69h ; в соответствующий ASCII-код

das ; (см. описание команды DAS)

mov dl,al ; код символа в DL

mov ah,2 ; номер функции DOS в АН

int 21h ; вывод символа

ret ; этот RET работает два раза - один раз

; для возврата из процедуры print_nibble,

; вызванной для старшей цифры,

; и второй раз - для возврата из print_al

messagel db "Десятичное число: $"

message2 db "Шестнадцатеричное число: $"

err_msg db "Ошибка ввода"

crlf db 0Dh,0Ah,'$'

buffer db 6 ; максимальный размер буфера ввода

blength db ? ; размер буфера после считывания

bcontents: ; содержимое буфера располагается за

; концом СОМ-файла

end start

Функция 0Ah предоставляет удобный, но ограниченный способ ввода данных. Чаще всего используют функции посимвольного ввода, позволяющие контролировать отображение символов на экране, реакцию программы на функциональные и управляющие клавиши и т.д.

Функция DOS 01h - Считать символ из STDIN с эхом, ожиданием и проверкой на Ctrl-Break

Ввод:

АН = 01h

Вывод:

AL = ASCII-код символа или 0.

Если AL = 0, второй вызов этой функции возвратит в AL расширенный ASCII-код символа

При чтении с помощью этой функции введенный символ автоматически немедленно отображается на экране (посылается в устройство STDOUT - так что его можно перенаправить в файл). При нажатии Ctrl-C или Ctrl-Break выполняется команда INT 23h. Если нажата клавиша, не соответствующая какому-нибудь символу (стрелки, функциональные клавиши Ins, Del и т.д.), то в AL возвращается 0 и функцию надо вызвать еще один раз, чтобы получить расширенный ASCII-код.

В трех следующих вариантах этой функции код символа возвращается в AL по такому же принципу.

Функция DOS 08h - Считать символ из STDIN без эха, с ожиданием и проверкой на Ctrl-Break

Ввод:

АН = 08h

Вывод:

AL = код символа

Функция DOS 07h - Считать символ из STDIN без эха, с ожиданием и без проверки на Ctrl-Break

Ввод:

АН = 07h

Вывод:

AL = код символа

Функция DOS 06h - Считать символ из STDIN без эха, без ожидания и без проверки на Ctrl-Break

Ввод:

АН = 07h

DL = 0FFh

Вывод:

ZF = 1, если не была нажата клавиша, и AL = 00

ZF = 0, если клавиша была нажата. В этом случае AL = код символа

Кроме перечисленных функций могут потребоваться и некоторые служебные функции DOS для работы с клавиатурой.

Функция DOS 0Bh - Проверить состояние клавиатуры

Ввод:

АН = 0Bh

Вывод:

AL = 0, если не была нажата клавиша

AL = 0FFh, если была нажата клавиша

Эту функцию удобно использовать перед функциями 01, 07 и 08, чтобы не ждать нажатия клавиши. Кроме того, вызов этой функции позволяет проверить, не считывая символ с клавиатуры, была ли нажата комбинация клавиш Ctrl-Break; если это произошло, выполнится прерывание 23h.

Функция DOS 0Ch - Очистить буфер и считать символ

Ввод:

АН = 0Ch

AL = Номер функции DOS (01, 06, 07, 08, 0Ah)

Вывод:

Зависит от вызванной функции

Функция 0Ch очищает буфер клавиатуры, так что следующая функция чтения символа будет ждать ввода с клавиатуры, а не использовать нажатый ранее и еще не обработанный символ. Например, именно эта функция используется для считывания ответа на вопрос «Уверен ли пользователь в том, что он хочет отформатировать диск?».

Функции посимвольного ввода без эха можно использовать для интерактивного управления программой, как в следующем примере.

; dosin2.asm

; Изображает пентамино F, которое можно перемещать по экрану клавишами

; управления курсором и вращать клавишами X и Z. Выход из программы - Esc.

;

line_length = 3 ; число символов в строке изображения

number_of_lines = 3 ; число строк

.model tiny

.code

org 100h ; начало СОМ-файла

start:

cld ; будут использоваться команды

; строковой обработки

mov ax,0B800h ; адрес начала текстовой видеопамяти

mov es,ax ; в ES

mov ax,0003h

int 10h ; текстовый режим 03 (80x25)

mov ah,02h ; установить курсор

mov bh,0

mov dh,26 ; на строку 26, то есть за пределы экрана

mov dl,1

int 10h ; теперь курсора на экране нет

call update_screen ; вывести изображение

; основной цикл опроса клавиатуры

main_loop:

mov ah,08h ; считать символ с клавиатуры

int 21h ; без эха, с ожиданием, с проверкой на Ctrl-Break

test al,al ; если AL = 0

jz eASCII_entered ; введен символ расширенного ASCII

cmp al,1Bh ; иначе: если введен символ 1Bh (Esc),

je key_ESC ; выйти из программы,

cmp al,'Z' ; если введен символ Z,

je key_Z ; перейти на его обработчик

cmp al,'z' ; то же для z

je key_Z

cmp al,'X' ; если введен символ X,

je key_X ; перейти на его обработчик

cmp al,'х' ; то же для х

je key_X

jmp short main_loop ; считать следующую клавишу

eASCII_entered: ; был введен расширенный ASCII-символ

int 21h ; получить его код (повторный вызов функции)

cmp al,48h ; стрелка вверх

je key_UP

cmp al,50h ; стрелка вниз

je key_DOWN

cmp al,4Bh ; стрелка влево

je key_LEFT

cmp al,4Dh ; стрелка вправо

je key_RIGHT

jmp short main_loop ; считать следующую клавишу

;

; обработчики нажатий клавиш

;

key_ESC: ; Esc

ret ; завершить СОМ-программу

key_UP: ; стрелка вверх

cmp byte ptr start_row,0 ; если изображение на верхнем

; краю экрана,

jna main_loop ; считать следующую клавишу,

dec byte ptr start_row ; иначе - уменьшить номер строки,

call update_screen ; вывести новое изображение

jmp short main_loop ; и считать следующую клавишу

key_DOWN: ; стрелка вниз

cmp byte ptr start_row,25-number_of_lines ; если

; изображение на нижнем краю экрана,

jnb main_loop ; считать следующую клавишу,

inc byte ptr start_row ; иначе - увеличить номер строки,

call update_screen ; вывести новое изображение

jmp short main_loop ; и считать следующую клавишу

key_LEFT: ; стрелка влево

cmp byte ptr start_col,0 ; если изображение на левом краю

; экрана,

jna main_loop ; считать следующую клавишу,

dec byte ptr start_col ; иначе - уменьшить номер столбца,

call update_screen ; вывести новое изображение

jmp short main_loop ; и считать следующую клавишу

key_RIGHT: ; стрелка вправо

cmp byte ptr start_col,80-line_length ; если

; изображение на правом краю экрана,

jnb main_loop ; считать следующую клавишу,

inc byte ptr start_col ; иначе - увеличить номер столбца,

call update_screen ; вывести новое изображение

jmp short main_loop ; и считать следующую клавишу

key_Z: ; клавиша Z (вращение влево)

mov ax,current_screen ; считать номер текущего изображения

; (значения 0, 1, 2, 3),

dec ax ; уменьшить его на 1,

jns key_Z_ok ; если получился -1 (поменялся знак),

mov ах,3 ; АХ = 3

key_Z_ok:

mov current_screen,ax ; записать номер обратно,

call update_screen ; вывести новое изображение

jmp main_loop ; и считать следующую клавишу

key_X: ; клавиша X (вращение вправо)

mov ax,current_screen ; считать номер текущего изображения

; (значения 0, 1, 2, 3),

inc ax ; увеличить его на 1,

cmp ax,4 ; если номер стал равен 4,

jne key_X_ok

xor ах,ах ; АХ = 0

key_X_ok:

mov current_screen,ax ; записать номер обратно,

call update_screen ; вывести новое изображение

jmp main_loop ; и считать следующую клавишу

; процедура update_screen

; очищает экран и выводит текущее изображение

; модифицирует значения регистров АХ, ВХ, СХ, DX, SI, DI

update_screen:

mov cx,25*80 ; число символов на экране

mov ax,0F20h; ; символ 20h (пробел) с атрибутом 0Fh

; (белый на черном)

xor di,di ; ES:DI = начало видеопамяти

rep stosw ; очистить экран

mov bx,current_screen ; номер текущего изображения в ВХ

shl bx,1 ; умножить на 2, так как screens - массив слов

mov si,screens[bx] ; поместить в ВХ смещение начала

; текущего изображения из массива screens,

mov ax,start_row ; вычислить адрес начала

mul row_length ; изображения в видеопамяти

add ax,start_col ; (строка * 80 + столбец) * 2

shl ax,1

mov di,ax ; ES:DI - начало изображения в видеопамяти

mov ah,0Fh ; используемый атрибут - белый на черном

mov dx,number_of_lines ; число строк в изображении

сору_lines:

mov cx,line_length ; число символов в строке

copy_1: lodsb ; считать ASCII-код в AL,

stosw ; записать его в видеопамять

; (AL - ASCII, АН - атрибут),

loop copy_1 ; вывести так все символы в строке,

add di,(80-line_length)*2 ; перевести DI на начало

; следующей строки экрана,

dec dx ; если строки не закончились -

jnz copy_lines ; вывести следующую

ret ; конец процедуры update_screen

; изображение пентамино F

screen1 db " XX" ; выводимое изображение

db "XX "

db " X "

screen2 db " X " ; поворот на 90 градусов вправо

db "XXX"

db " X"

screen3 db " X " ; поворот на 180 градусов

db " XX"

db "XX "

screen4 db "X " ; поворот на 90 градусов влево

db "XXX"

db " X "

; массив, содержащий адреса всех вариантов изображения

screens dw screen1,screen2,screen3,screen4

current_screen dw 0 ; текущий вариант изображения

start_row dw 10 ; текущая верхняя строка изображения

start_col dw 37 ; текущий левый столбец

row_length db 80 ; длина строки экрана для команды MUL

end start

Список используемой литературы

Абель П. Язык Ассемблера для IBM PC и его программирование - М.: Высшая школа, 1992. - 252 с.

С.В. Зубков Ассемблер для DOS, Windows и Unix - М.: ДМК Пресс, 1999. - 630 с.

И. Юров Assembler - СПб.: Питер, 2001. - 624 с.

Бэрри Н. Компьютерные сети. Пер. с англ. - М.: БИНОМ. - 1995. - 400с.

Джамса К., Лалани С., Уикли С. Программирование в WWW для профессионалов. - Минск. - Попурри. - 1997. - 631 с.

Кент П. World Wide Web: Пер. с англ.. - М.: Компьютер. - 1996. - 311 с.

Кулаков Ю.А. Компьютерные сети. - Киев. - 1998. - 384 с.

Компьютерные сети. Принципы, технологии, протоколы / В.Г. Олифер, Н.А. Олифер. - СПб: Питер, 2001. - 672 с.

Максимов Н.В., Партыка Т.Л., Попов И.И. Технические средства информатизации: Учебник. - М.: ФОРУМ: ИНФРА-М, 2005. - 576 с.: ил. - (Профессиональное образование).

Милославская Н.Г., Толстой А.И. Интрасети: доступ в Internet. Защита: Учеб. пособие для вузов. - М.: ЮНИТИ-ДАНА, 2000 - 527 с.

Колесников. Internet: для пользователя. - К.: Издательская группа BHV, 2000. - 304 с.

Новомлинский Л. Интернет-торговля. Часть 1// Сети и системы связи. - 1998 - №8.

Новомлинский Л. Интернет-торговля. Часть 2 // Сети и системы связи. - 1998 - №9.

Пятибратов А.П. Вычислительные машины, сети и телекоммуникации/ Пятибратов А.П., Гудыно Л.П. - М.: Финансы и статистика. - 1998. - 400 с.

Сеть Internet. Применение в науке и бизнесе / Горностаев Ю.М. и др. - М.: Россия - 1994. - 136 с.

Сеть Internet./ Горностаев Ю.М. и др. - М.: Россия. - 1993. - 88 с.

Сорокин Л. Аукционы в Интернете - будущее электронной коммерции // Мир электронной коммерции. - 2000. - №1.

Информатика: Учебник. - 3-е перераб. изд. / Под ред. проф. Н.В. Макаровой. - М.: Финансы и статистика, 2000. - 768 с.: ил.

Размещено на Allbest.ru


Подобные документы

  • Ассемблер как символический аналог машинного языка. Архитектура микропроцессора: организация памяти, способы адресации операндов, правила использования регистров. Текст программы. Этапы программирования на ассемблере, алгоритмы выполнения задач.

    контрольная работа [515,1 K], добавлен 20.01.2016

  • Изучение архитектуры персонального компьютера на примере микропроцессора фирмы Intel. Регистры общего назначения. Оперативная память; форматы данных и команд. Команд пересылки с различными способами адресации операндов. Структура программы на Ассемблере.

    курс лекций [506,4 K], добавлен 03.05.2014

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

    реферат [82,6 K], добавлен 05.12.2010

  • Разработка и практическая апробация действия драйвер-фильтра клавиатуры для операционной системы Windows, переопределяющего значение любых клавиш и отключающего клавиши клавиатуры. Составление программы для установки и управления данным драйвером.

    курсовая работа [226,8 K], добавлен 18.06.2009

  • Расположение клавиш на клавиатуре. "Горячие клавиши" общего назначения. Использование цифровой клавиатуры для быстрого ввода чисел. Организация клавиш набора, функциональных, перемещения и управления. Характеристика основных символов клавиатуры.

    презентация [670,4 K], добавлен 10.08.2015

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

    курсовая работа [1,9 M], добавлен 22.05.2013

  • Выбор режимов адресации, посредством которых будет осуществлен доступ к данным. Этапы создания программы. Характеристика таблицы символов и полученного файла листинга. Анализ изменения состояния регистра IP при выполнении команд JMP, Jcc, LOOPx.

    курсовая работа [4,9 M], добавлен 25.03.2012

  • Клавиатура как современный основной элемент компьютера, ее назначение. Функции некоторых клавиш в большинстве программ. Шрифты в контексте ввода текста с клавиатуры и отображения символов. Основные виды, параметры клавиатур и принцип их действия.

    реферат [101,8 K], добавлен 20.02.2009

  • Назначение, особенности, структура и функционирование различных моделей микроконтроллеров. Средства их отладки и программирования. Способы адресации и система команд. Набор периферийных устройств. Порты ввода/вывода. Модуль формирования ШИМ-сигналов.

    курсовая работа [201,9 K], добавлен 25.12.2014

  • Анализ технического задания. Разработка программы по вычислению функции на языке ассемблер для микропроцессора Кр580ВМ80. Алгоритмы программного умножения, деления, сложения, вычитания и сдвига влево многобайтных чисел. Расчет времени работы программы.

    курсовая работа [88,2 K], добавлен 19.09.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.