З апуск программы и ввод исходной строки
Конец работы программы, вывод результата.
Задание №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
Протокол выполнения программы:
Запуск программы и ввод исходной строки
Задание №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
Протокол выполнения программы: