DOS 02h funksiyasi - Tizimli dasturlash

|
Tizimli dasturlash
|
bet | 42/64 | Sana | 13.05.2024 | Hajmi | 183,36 Kb. | | #230077 |
Bog'liq Системное программирование, практикаDOS 02h funksiyasi qanday ishlashiga oddiy misol .
11-jadval - 1.1-misol
|
.model kichkina
|
; kod, ma'lumotlar va stek segmentlari birlashtirilgan xotira modeli.
|
|
.kod
|
; ma'lumotlarni o'z ichiga olgan kod segmenti.
|
|
org 100h
|
; COM faylining boshlanishi
|
|
boshlanishi:
|
; dastur kodini boshlash belgisi
|
|
mov dl,
|
; dl registriga kiring - har qanday ASCII belgilar kodini
|
|
mov ah, 2
|
; DOS funktsiyasi raqami "belgi chiqishi"
|
|
int 21 soat
|
; DOS qo'ng'irog'i
|
|
ret
|
; DOS funktsiyasi "dasturni tugatish"
|
|
oxiri boshlanadi
|
; dastur kodini tugatish belgisi
|
Ushbu dastur kursorning belgilangan joyida istalgan ASCII belgisini ko'rsatadi.
Barcha DOS ekran chiqish funksiyalari STDOUT qurilmasidan foydalanadi , standart chiqish. Bu sizga dasturning chiqishini faylga yoki boshqa dasturning standart kiritishiga yo'naltirish imkonini beradi. Misol uchun, agar siz berilgan misolni tuzsangiz (faylni yarating cod.com ) va buyruq satriga yozing
cod .com > cod .out
keyin ekranda hech narsa ko'rsatilmaydi va belgining ASCII kodini o'z ichiga olgan joriy katalogda cod .out fayli paydo bo'ladi.
DOS funktsiyasi 06h.
DOS funktsiyasi 06h - STDOUT- ga Ctrl-Break-ni tekshirmasdan belgi yozing
Kiritish:
|
AN = 06 soat
DL = ASCII belgilar kodi (FFhdan tashqari)
|
Xulosa:
|
Yo'q, hujjatlarga ko'ra, lekin aslida: AL = yozma belgining kodi (DL nusxasi)
|
Bu funksiya boshqaruv belgilarini qayta ishlamaydi ( CR, LF, HT va BS ekranga chiqqanda o‘z funksiyalarini bajaradi, lekin chiqish faylga yo‘naltirilganda saqlanib qoladi) va Ctrl-Break-ni tekshirmaydi.
1.1-misoldagi MOV AN,2 ni MOV AN,6 bilan almashtiramiz va bu misolni qayta kompilyatsiya qilamiz. Biz MS - DOS operatsion tizimida tuzilgan misolning ishini ko'rib chiqamiz .
DOS funktsiyasi 09h
DOS funktsiyasi 09h - STDOUT -ga Ctrl-Break-ni tekshirish bilan qator yozing
Kiritish:
|
AN = 09h
DS:DX = $ bilan tugaydigan qator manzili (24h)
|
Xulosa:
|
Yo'q, hujjatlarga ko'ra, lekin aslida: AL = 24h (oxirgi belgilar kodi)
|
02h funktsiyasining ishiga butunlay o'xshaydi , lekin bitta belgi emas, balki butun chiziq ko'rsatiladi (2-sonli laboratoriya ishiga qarang).
DOS 40h funktsiyasi
DOS 40h funksiyasi - fayl yoki qurilmaga yozish
Kiritish:
|
AN = 40h
IN = STDOUT uchun 1 yoki STDERR
DS uchun 2:DX = qator boshi manzili
CX = chiziq uzunligi
|
Xulosa:
|
CF = 0,
AX = yozilgan baytlar soni
|
Ushbu funktsiya faylga yozish uchun mo'ljallangan, lekin agar BX registriga 1 raqami qo'yilsa , 40h funksiyasi ma'lumotlarni STDOUT ga , BX = 2 bo'lsa - STDERR qurilmasiga chiqaradi . STDERR har doim ma'lumotlarni ekranga chiqaradi va fayllarga yo'naltirmaydi. C da qo'llaniladigan standart chiqish funktsiyalari ushbu funktsiyaga asoslanadi - aslida C funktsiyasi fputs () o'zining birinchi argumentini BX ga , qatorning manzilini (ikkinchi argument) DS:DX ga va CX da uzunlik .
DOS 40h funksiyasi qanday ishlashiga oddiy misol .
12-jadval - 1.2-misol
|
.model kichkina
|
; kod, ma'lumotlar va stek segmentlari birlashtirilgan xotira modeli.
|
|
.kod
|
; ma'lumotlarni o'z ichiga olgan kod segmenti.
|
|
org 100h
|
; COM faylining boshlanishi
|
|
boshlanishi:
|
; dastur kodini boshlash belgisi
|
|
harakat ah, 40h
|
; DOS funktsiyasi raqami
|
|
mov bx, 2
|
; STDERR qurilmasini belgilang
|
|
mov dx, ofset xabari
|
; DS:DX - manzil chiziqlar
|
|
mov cx, 25
|
; CX - ip uzunligi
|
|
int 21 soat
|
; DOS qo'ng'irog'i
|
|
ret
|
; DOS funktsiyasi "dasturni tugatish"
|
|
xabar db "Ushbu funksiya $ ni chop etishi mumkin"
|
; chiqish ma'lumotlarini o'z ichiga olgan c qator.
|
|
oxiri boshlanadi
|
; dastur kodini tugatish belgisi
|
Agar siz ushbu misolni tuzsangiz va uni buyruq bilan ishga tushirsangiz
dosout.com > dosout.out
keyin ekranda xabar paydo bo'ladi va dosout2.out fayli bo'sh bo'ladi.
INT 29H ni uzib qo‘ying
INT 29h: Ekranda belgini tezda aks ettirish
Kiritish:
|
AL = ASCII belgilar kodi
|
INT 29 h uzilish qanday ishlashiga oddiy misol .
13-jadval - 1.3-misol
|
.model kichkina
|
; kod, ma'lumotlar va stek segmentlari birlashtirilgan xotira modeli.
|
|
.kod
|
; ma'lumotlarni o'z ichiga olgan kod segmenti.
|
|
org 100h
|
; COM faylining boshlanishi
|
|
boshlanishi:
|
; dastur kodini boshlash belgisi
|
|
mov ax,
|
; ax registriga - har qanday ASCII belgilar kodini kiriting
|
|
int 29h
|
; DOS qo'ng'irog'ini uzish - belgili chaqiruv;
|
|
ret
|
; DOS funktsiyasi "dasturni tugatish"
|
|
oxiri boshlanadi
|
; dastur kodini tugatish belgisi
|
Ko'pgina hollarda, INT 29h darhol BIOS funktsiyasini "teletayp rejimida ekranda belgi chiqarish" deb ataydi, shuning uchun dasturlarni iloji boricha qisqaroq yozishda baytlarni saqlashdan boshqa afzalliklarga ega emas.
BIOS vositalari
DOS ekranining chiqish funksiyalari chiqishni faylga yoʻnaltirish imkonini beradi, lekin matnni ekranning istalgan joyiga chiqarishga ruxsat bermaydi va matn rangini oʻzgartirishga ruxsat bermaydi. DOS BIOS video funksiyalaridan dastur ekrani bilan batafsilroq ishlash uchun ishlatilishi kerak deb hisoblaydi. BIOS - ba'zi qurilmalarga, xususan, video adapterga kirishni ta'minlaydi. Barcha BIOS video xizmati funktsiyalari 10 soat uzilish orqali chaqiriladi.
Video rejimini tanlash
BIOS ekranni turli matn va grafik rejimlarga o'tkazish imkoniyatini beradi. Rejimlar bir-biridan o'lchamlari (grafik uchun) va qatorlar va ustunlar soni (matn uchun), shuningdek, mumkin bo'lgan ranglar soni bilan farqlanadi.
Standart video rejimlari
INT 10h, AN = 00 — Video rejimini sozlash
Kiritish:
|
AL = past 7 bitdagi rejim raqami
|
Xulosa:
|
Odatda yo'q, lekin ba'zi BIOS (Feniks va AMI) matn rejimlari uchun AL 30H va grafiklar uchun 20h ni qo'yadi.
|
Ishga misol .
2 -misol . 1
|
.model kichkina
|
; kod, ma'lumotlar va stek segmentlari birlashtirilgan xotira modeli.
|
|
.kod
|
; ma'lumotlarni o'z ichiga olgan kod segmenti.
|
|
org 100h
|
; COM faylining boshlanishi
|
|
boshlanishi:
|
; dastur kodini boshlash belgisi
|
|
harakat ah, 00
|
; video rejimini o'rnating
|
|
mov al,5
|
; rejim raqamini o'rnating
|
|
int 10h
|
; DOS uzilish qo'ng'irog'i - video xizmat qo'ng'irog'i;
|
|
ret
|
; DOS funktsiyasi "dasturni tugatish"
|
|
oxiri boshlanadi
|
; dastur kodini tugatish belgisi
|
Ushbu funktsiyani chaqirish ekranning tanlangan rejimga o'tishiga olib keladi. Agar AL ning eng muhim biti 1 ga o'rnatilmagan bo'lsa, ekran tozalanadi. Matn rejimi raqamlari 0, 1, 2, 3 va 7. 0 va 1 16 rangli 40x25 rejimlar (har bir satrda 40 belgidan 25 satr), 2 va 3 - 16 rangli 80x25 rejimlar, 7 - 80x25 monoxrom rejim. Yuqori aniqlikdagi (80x43, 80x60, 132x50 va boshqalar) ko'plab matn rejimlari mavjud, ammo bu funksiya orqali qo'ng'iroq qilish uchun ularning raqamlari turli video adapterlar uchun farq qiladi (masalan, Cirrus 5320 uchun 61h - 132x50 va Genoa 6400 uchun 132x29 rejimi) ). Biroq, agar video adapter VESA BIOS Extension standartini qo'llab-quvvatlasa, siz 4Fh funksiyasidan foydalanib, yuqori aniqlikdagi rejimlarga o'tishingiz mumkin.
SuperVGA video rejimi
INT 10h, AH = 4Fh, AL = 02 — SuperVGA video rejimini sozlash
Kiritish:
|
BX = past 13 bitdagi rejim raqami
|
Xulosa:
|
AL = 4Fh , agar bu funktsiya qo'llab-quvvatlansa
AN = 0, almashtirish muvaffaqiyatli bo'lsa
AN = 1, xatolik yuz bergan bo'lsa
|
VX registrining 15-biti 1 ga o'rnatilgan bo'lsa, video xotira tozalanmaydi. Ushbu funksiya yordamida chaqirilishi mumkin boʻlgan matn rejimlari: 80x60 ( 108h rejimi ), 132x25 ( 109h ), 132x43 ( 10Ah ), 132x50 ( 10Bh ), 132x60 ( 10Ch ).
DOS da ishlatiladigan standart video rejimi matn rejimi 3 dir.
Kursor o'rnini o'rnatish
INT 10h, AN = 02 - Kursor o'rnini o'rnating
Kiritish:
|
AN = 02
BN = sahifa raqami
DH = qator
DL = ustun
|
Ishga misol .
2 -misol . 2.1
|
.model kichkina
|
; kod, ma'lumotlar va stek segmentlari birlashtirilgan xotira modeli.
|
|
.kod
|
; ma'lumotlarni o'z ichiga olgan kod segmenti.
|
|
org 100h
|
; COM faylining boshlanishi
|
|
boshlanishi:
|
; dastur kodini boshlash belgisi
|
|
mov ah, 02
|
; kursor o'rnini o'rnating
|
|
mov bh,0
|
; sahifa raqamini o'rnating
|
|
mov dh,12
|
; 12-qator
|
|
mov dl, 29
|
; 29-ustun
|
|
int 10h
|
; DOS uzilishlari - kursor o'rnini 12.29 nuqtaga o'rnating
|
|
|
|
| |