Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб№1(assembl).doc
Скачиваний:
3
Добавлен:
13.07.2019
Размер:
167.94 Кб
Скачать
  1. З апуск программы и ввод исходной строки

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

Задание №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. Запуск программы и ввод исходной строки

Задание №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

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

Задание №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

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