Лабораторная работа №1. «Организация вычислительных систем»

Дисциплина:

«Организация вычислительных систем»

Выполнил студент группы ИСТ-11

Гадионов А.В.

Проверил преподаватель кафедры ИСТ

Куделин А.Г.

УХТА, 2011

Задание №1

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

Исходные данные: Строка размером не более 9 символов.

Результат: Исходная строка записанная только заглавными буквами.

Для замены сточного символа на заглавный, необходимо изменить пятый бит ASCII кода символа с 1 на 0.

Листинг программы:

masm

model small

.data

max db 10

len db 0

str1 db 10 dup (' ')

eos1 db 10, 13, '$'

.stack

db 256 dup ('?')

.code

main proc

mov ax,@data

mov ds,ax

mov es, ax

mov ah, 0ah

mov dx, offset max

int 21h

mov cx, 9

m2:

mov bx, offset str1

add bx, cx

mov al, [bx]

cmp al,10

je m1

cmp al,13

je m1

and al,11011111b

mov [bx], al

dec cx

cmp cx, 0

jns m2

mov ah,09h

mov dx,offset str1

int 21h

mov ax,4c00h

int 21h

m1: dec cx

mov [bx],20h

jmp m2

main endp

end main

Протокол выполнения программы:

1. Запуск программы и ввод исходной строки

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

2. Конец работы программы, вывод результата.

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

Задание №2

Постановка задачи: Разработать программу, которая производит реверс введенной строки.

Исходные данные: Строка размером не более 9 символов.

Результат: Исходная строка записанная в обратном порядке.

Чтобы произвести реверс строки, нужно выводить по одному символу, начиная с конца строки. Посимвольный вывод осуществляется с помощью прерывания BIOS 02h int 21h.

Листинг программы:

masm

model small

.data

max db 10

len db 0

str1 db 12 dup (' ')

str2 db 12 dup (' ')

eos1 db 10, 13, '$'

.stack

db 256 dup ('?')

.code

main proc

mov ax,@data

mov ds,ax

mov es, ax

mov ah, 0ah

mov dx, offset max

int 21h

mov cx, 9

m1:

mov bx, offset str1

add bx,cx

mov al, [bx]

mov dl,al

mov ah,02h

int 21h

dec cx

cmp cx, 0

jns m1

mov ax,4c00h

int 21h

main endp

end main

Протокол выполнения программы:

1. Лабораторная работа №1. «Организация вычислительных систем» - student2.ru Запуск программы и ввод исходной строки

2. Конец работы программы, вывод результата.

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

Задание №3

Постановка задачи: Разработать программу, которая выводит количество cpunt портов

Результат: Вывод фразы о количестве портов.

С помощью прерывания int 11h нужно считать 14-15 биты, возвращенные в регистр АХ.

Листинг программы:

masm

model small

.data

s1 db 'port cpunt is:$'

s2 db '0'

s3 db '1'

s4 db '2'

s5 db '3'

eos db 10, 13, '$'

.stack

db 256 dup ('?')

.code

main proc

mov ax,@data

mov ds,ax

mov es, ax

int 11h

and ax,0c000h

mov bx,offset s2

cmp ax,00000h

je m1

inc bx

cmp ax,04000h

je m1

inc bx

cmp ax,08000h

je m1

inc bx

cmp ax,0c000h

je m1

m1:

mov ah,09h

mov dx,offset s1

int 21h

mov ah,02h

mov dl,[bx]

int 21h

mov ax,04c00h

int 21h

main endp

end main

Протокол выполнения программы:

1. Запуск программы и ввод исходной строки

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

Задание №4

Постановка задачи: Разработать программу, которая выводит количество RS-232 портов

Результат: Вывод фразы о количестве портов.

С помощью прерывания int 11h нужно считать 9-11 биты, возвращенные в регистр АХ.

Листинг программы:

masm

model small

.data

s1 db 'port COM (RS-232) is:$'

s2 db '0'

s3 db '1'

s4 db '2'

s5 db '3'

s6 db '4'

s7 db '5'

s8 db '6'

s9 db '7'

eos db 10, 13, '$'

.stack

db 256 dup ('?')

.code

main proc

mov ax,@data

mov ds,ax

mov es, ax

int 11h

and ax,0e00h

mov bx,offset s2

cmp ax,0000h

je m1

inc bx

cmp ax,0200h

je m1

inc bx

cmp ax,0400h

je m1

inc bx

cmp ax,0600h

je m1

inc bx

cmp ax,0800h

je m1

inc bx

cmp ax,0a00h

je m1

inc bx

cmp ax,0c00h

je m1

inc bx

cmp ax,0e00h

je m1

m1:

mov ah,09h

mov dx,offset s1

int 21h

mov ah,02h

mov dl,[bx]

int 21h

mov ax,04c00h

int 21h

main endp

end main


Лабораторная работа №1. «Организация вычислительных систем» - student2.ru Протокол выполнения программы:

1.

Задание №5

Постановка задачи: Разработать программу, которая выводит состояние Shift-клавиш

Исходные данные: Строка размером не более 9 символов.

Результат: Исходная строка записанная в обратном порядке.

Чтобы узнать состояние Shift-клавиш, необходимо использовать прерывание BIOS 02h int 16h.

Листинг программы:

masm

model small

.data

rCtrl db 'Control pressed$'

lShift db 'Left Shift pressed$'

rShift db 'Right Shift pressed$'

lAlt db 'Left Alt pressed$'

rAlt db 'Right Alt pressed$'

eos db 10,13,'$'

c1 db 0

kf dw 0

.stack

db 256 dup ('?')

.code

main proc

mov ax,@data

mov ds,ax

mov es,ax

m1:

xor ax,ax

mov ah,02h

int 16h

cmp c1,al

je m1

mov c1,al

mov kf,ax

call getEXIT

mov ax, kf

call GetLShift

mov ax, kf

call GetRShift

mov ax, kf

call getCTRL

mov ax, kf

call GetLAlt

mov ax, kf

call GetRALT

jmp m1

exit:

mov ax,4c00h

int 21h

main endp

getLShift proc

and al,02h

cmp al,0

je m2

mov dx,offset lshift

mov ah,09h

int 21h

mov dx,offset eos

int 21h

m2:

ret

getLshift endp

getRShift proc

and al,01h

cmp al,0

je m3

mov dx,offset rshift

mov ah,09h

int 21h

mov dx,offset eos

int 21h

m3:

ret

getRshift endp

getCTRL proc

and al,04h

cmp al,0

je m5

mov dx,offset rCTRL

mov ah,09h

int 21h

mov dx,offset eos

int 21h

m5:

ret

getCTRL endp

getLALT proc

and ah,02h

cmp ah,0

je m6

mov dx,offset lalt

mov ah,09h

int 21h

mov dx,offset eos

int 21h

m6:

ret

getLALT endp

getRALT proc

and al,08h

cmp al,0

je m7

and ah,02h

jne m7

mov dx,offset rALT

mov ah,09h

int 21h

mov dx,offset eos

int 21h

m7:

ret

getRALT endp

getEXIT proc

and al,02h

cmp al,0

je m8

mov al,c1

and al,04h

cmp al,0

je m8

mov al,c1

and al,08h

cmp al,0

je m8

jmp exit

m8:

ret

getEXIT endp

end main


Протокол выполнения программы:

1. Запуск программы и ввод исходной строки

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

2. Вывод после последовательных нажатий LeftShift, Control, LeftAlt.

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

3. Вывод после последовательных нажатий RightShift, Control, RightAlt.

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

4. Выход из программы – комбинация LeftShift+Control+LeftAlt.

Лабораторная работа №1. «Организация вычислительных систем» - student2.ru

Задание №6

Постановка задачи: Разработать программу, которая выводит в центре экрана световую точку и изменяет ее положение с помощью клавиш-стелок.

Исходные данные: Световая точка в центре.

Результат: Возможность менять ее положение с помощью стрелок.

Для работы с видео режимом исмользуется прерывание BIOS int 10h.

Листинг программы:

masm

model small

.data

tr db 0

c1 db 0

k1 dw 160

k2 dw 100

eos db 10,13,'$'

.stack

db 256 dup ('?')

.code

main proc

mov ax,@data

mov ds,ax

mov es,ax

mov ah,0fh

int 10h

mov tr,al

mov ah,00h

mov al,4

int 10h

mov ah,0ch

mov bh,0

mov dx,100

mov cx,160

mov al,1

int 10h

m1:

xor ax,ax

mov ah,00h

int 16h

mov c1,al

cmp al,27

je m2

call getRight

call getLeft

call getDown

call getUp

mov ah,0ch

mov bh,0

mov dx,k2

mov cx,k1

mov al,1

int 10h

jmp m1

m2:

mov ah,00h

mov al,tr

int 10h

mov ax,4c00h

int 21h

main endp

getRight proc

cmp ah,77

jne m3

mov ah,0ch

mov bh,0

mov dx,k2

mov cx,k1

mov al,4

int 10h

inc k1

m3:

ret

getRight endp

getLeft proc

cmp ah,75

jne m4

mov ah,0ch

mov bh,0

mov dx,k2

mov cx,k1

mov al,4

int 10h

dec k1

m4:

ret

getLeft endp

getDown proc

cmp ah,80

jne m5

mov ah,0ch

mov bh,0

mov dx,k2

mov cx,k1

mov al,4

int 10h

inc k2

m5:

ret

getDown endp

getUp proc

cmp ah,72

jne m6

mov ah,0ch

mov bh,0

mov dx,k2

mov cx,k1

mov al,4

int 10h

dec k2

m6:

ret

getUp endp

end main


Наши рекомендации