Nilai apa yang akan dikembalikan fungsi min h4 h8. Nilai minimum tidak termasuk nol

¨ Menampilkan teks pada layar dengan pemrograman langsung dari buffer video.

¨ Pengembangan program aplikasi menggunakan fungsi layanan BIOS untuk bekerja dengan layar dan keyboard.

¨ Memperkenalkan penundaan untuk pengoperasian perangkat lunak.

Dalam karya No. 2, berbagai fungsi sistem DOS untuk menampilkan informasi simbolik pada layar telah dipertimbangkan. Namun, kemampuan DOS sangat terbatas: tidak memiliki fungsi untuk mengubah warna karakter yang ditampilkan dan memposisikan kursor. Selain itu, DOS tidak memiliki fasilitas rendering grafis.

Semua kemampuan sistem video komputer dapat direalisasikan dengan menggunakan fungsi video dari interupsi BIOS int 10h... Mengganggu int 10h menyediakan: perubahan mode video (teks atau grafik); keluaran informasi simbolik dan teks; mengubah font, menyesuaikan palet warna, bekerja dengan gambar grafis. Pemrograman sistem video menggunakan alat BIOS lebih rumit; namun, kemampuan hebat dan kecepatan keluaran tinggi menentukan luasnya penggunaan metode ini dalam program aplikasi.

Makalah ini membahas fungsi BIOS untuk memelihara sistem video komputer, serta fungsi untuk bekerja dengan keyboard. Mari daftar fungsi yang menjadi subjek pertimbangan di laboratorium.

Int 10h:

fungsi 00h - pengaturan mode video;

fungsi 02h - mengatur posisi kursor;

fungsi 03h - membaca posisi dan ukuran kursor;

fungsi 05h - mengatur halaman video;

fungsi 06h (07h) - inisialisasi atau jendela bergulir ke atas (bawah);

fungsi 08h - membaca karakter dan atribut pada posisi kursor;

fungsi 09h - menulis simbol dan atribut ke posisi kursor;

function 0Ah - menulis karakter ke posisi kursor dengan atribut saat ini;

function 0Eh - menulis karakter dalam mode teletype dengan atribut saat ini;

fungsi 0Fh - dapatkan mode tampilan;

function 1003h - mengalihkan penetapan bit paling signifikan dari byte atribut: flicker / brightness,

function 13h - menulis string dengan atribut tertentu dalam mode teletype.

Int 16h:

fungsi 00h (10h) - membaca karakter dari keyboard dengan menunggu;

fungsi 01h (11h) - memeriksa buffer keyboard untuk keberadaan karakter di dalamnya;

function 02h (12h) - menerima flag dari keyboard (diperpanjang).

Int 15h,fungsi 86h - penundaan.

Int 1Ah, fungsi 00h - mendapatkan waktu sistem.

8.2.2. PEMROGRAMAN BUFFER VIDEO LANGSUNG DALAM MODE TEKS

Pengontrol video modern mendukung berbagai mode teks dan grafik. Mode teks berbeda dalam resolusi (jumlah karakter yang ditampilkan secara horizontal dan vertikal) dan palet warna (mode monokrom atau 16 warna). Untuk mode grafik, fitur klasifikasi utama adalah jumlah warna yang ditampilkan secara bersamaan dan, karenanya, jumlah bit memori video yang dialokasikan ke setiap titik (piksel) gambar. Jenis mode grafik berikut dibedakan:

Monokrom (pengkodean 1-bit);

16 warna EGA / VGA (Pengkodean 4-bit);

256 warna SVGA (Pengkodean 8-bit);

- HiColor (Pengkodean 16-bit);

- Warna sebenarnya (Pengkodean 24-bit / 32-bit).

Mode grafis VGA (SVGA) sudah usang, dan mode teks terus berhasil digunakan (lihat Tabel 3.2, bagian 8.2.3).

Segala sesuatu yang ditampilkan di monitor - grafik, teks - secara bersamaan hadir di memori yang terpasang di adaptor video. Agar gambar muncul di monitor, itu harus ditulis ke memori adaptor video. Dalam mode teks, untuk sistem yang kompatibel dengan VGA, memori video dialokasikan ke ruang alamat (tidak termasuk mode video ke-7 dengan adaptor monokrom), dimulai dengan alamat logis B800h: 0000h dan diakhiri dengan alamat BF00h: 0FFFh. Area ini dibagi menjadi 8 sektor berdasarkan jumlah halaman video (4 KB per halaman). Jadi, paging ruang alamat memori video dalam mode teks adalah sebagai berikut:

B800h: 0000h - halaman 0, offset dalam kisaran 0000h - 0FFFh

B900h: 0000h - halaman 1, offset dalam kisaran 0000h - 0FFFh

- ...........

BF00h: 0000h - halaman 7, offset dalam kisaran 0000h - 0FFFh

Buffer video yang sesuai dengan halaman aktif ditampilkan di layar. Dalam mode teks, 2 byte dialokasikan untuk tampilan setiap karakter: byte dengan ASCII-kode karakter dan byte dengan atributnya. Apalagi di alamatnya B800h: 0000h adalah byte dengan kode karakter (sudut kiri atas layar), dan in B800h: 0001h - atribut simbol ini; B800h: 0002h - kode dari karakter kedua, dan in B800h: 0003h - atribut karakter kedua, dll. Secara umum, ketika membentuk gambar langsung di buffer video, melewati program DOS dan BIOS, semua kode kontrol ASCII kehilangan fungsi kontrolnya dan ditampilkan sebagai simbol yang sesuai. Struktur byte atribut ditunjukkan pada Gambar. 3.1.

Angka: 3.1. Atribut struktur byte

Ara. 3.1 berarti setiap simbol dapat mengambil salah satu dari 16 kemungkinan warna, ditentukan oleh kombinasi dari 4 bit yang paling tidak signifikan. Bit 4-6 dari byte atribut mengatur warna latar belakang di bawah simbol ini. Bit terakhir 7, bergantung pada mode adaptor video, menentukan kecerahan latar belakang di bawah simbol ini (latar belakang juga dapat mengambil 16 warna berbeda), atau kedipan simbol ( didirikanDOS secara default).

Saat memuat mesin, palet standar dipasang, kode warna yang diberikan dalam tabel. 3.1. Mari kita lihat beberapa contoh. Jadi, dalam mode blinking, nilai atribut nibble paling signifikan 8 jamtidak menunjukkan latar belakang abu-abu, tetapi hitam dengan karakter berkedip-kedip, yang warnanya masih ditentukan oleh camilan rendah; nilai camilan yang tinggi 0Ch- latar belakang merah dengan simbol yang berkedip-kedip. Penetapan bit 7 dialihkan oleh subfungsi 03hfungsi 10 jam interupsi int 10h.

Tabel 3.1

Kode warna palet standar

Hijau muda

Pirus

Pirus muda

Ungu

Ungu muda

cokelat

Putih cerah

Kode karakter byte ganda ditulis ke buffer video dalam urutan yang seharusnya muncul di layar: 80 * 2 byte pertama sesuai dengan baris pertama layar, 80 * 2 byte kedua sesuai dengan baris kedua, dll. . Dalam hal ini, transisi ke baris layar berikutnya ditentukan bukan oleh kode kontrol carriage return dan feed baris, tetapi oleh penempatan kode di tempat lain dari penyangga video. Untuk mendapatkan akses ke buffer video dari program ini, alamat segmen dari buffer video harus dimasukkan ke dalam salah satu register data segmen. Setelah itu, dengan menentukan offset ini atau itu, Anda dapat merekam ke tempat (sel) mana pun dari buffer video. Hitung selisih sel dalam koordinat baris-kolom (baris,clm) kamu bisa melakukan ini:

VidAddr \u003d (baris * 160) + (clm * 2)

Dengan jumlah data keluaran yang besar, frame informasi dibentuk terlebih dahulu di buffer pengguna yang terletak di segmen data program.

Daftar 3.1.Menulis string ke buffer video 0- halaman .

; Pembersihan layar

; Setel register segmen ES ke halaman 0 dari buffer video, dan ds ke segmen data

; Mari mengirim serangkaian karakter ke buffer video, menyesuaikannya

; register si, di dan cx

cld; Lihat ke Depan

rep movsb;) *; Mengirim string karakter dengan atribut ke buffer video

; Hentikan program untuk mengamati hasilnya (jika tidak, setelah akhir program

; prompt DOS untuk perintah dapat menimpa output)

; Bidang data di segmen data program. Simbol dan atribut: 0B0h - cahaya

; pirus di atas hitam, 0E4h - merah di atas kuning

msg db ‘*’, 0B0h, ’T’, 0E4h, ’E’, 0E4, ’S’, 0E4, ’T’, 0E4, ’*’, 0B0h

Dalam fragmen program ini, kode karakter pesan yang ditampilkan diselingi dengan atributnya. Metode menghasilkan bidang data yang dimaksudkan untuk perekaman langsung ke dalam memori video menjadi tidak praktis, tetapi dapat disederhanakan secara signifikan jika karakter yang ditampilkan memiliki atribut yang sama. Jadi, jika kita ingin menjalankan output karakter teks dari segmen data dengan satu atribut 0E4h, lalu kita hanya perlu mengganti satu baris perintah yang ditandai pada potongan di atas dengan simbol "*)" , di tiga. Dalam hal ini, menentukan baris data akan mengambil bentuk yang biasa kita gunakan.

mov si, offset msg; Offset sumber

mov di, 160 * 12 + 36 * 2; Offset penerima (36 kolom baris ke-13),

mov cx, msglen; Jumlah byte yang ditransfer

cld; Lihat ke Depan

mov ah, 0E4h; Atribut karakter keluaran 0E4h - merah di atas kuning

stosw; Unggah "karakter + atribut" dari ax ke buffer video (ax → es: di)

siklus loop; Ulangi kali msglen

; Bidang data di segmen data program.

msg db '* TEST *'

Metode output teks di atas diformat dengan panjang baris video tanpa memperhitungkan karakter tanda hubung atau indentasi dari batas kiri. Memperkenalkan aturan editor teks dasar ke dalam prosedur keluaran akan sangat mempersulit program. Dalam kasus ini, disarankan untuk menggunakan fungsi BIOS untuk menampilkan pesan.

Lebih mudah untuk mengembangkan struktur program yang melihat halaman video sewenang-wenang di mana informasi sebelumnya direkam dengan pemrograman langsung dari buffer video, akan lebih mudah untuk menggunakan fungsi tersebut 05 hint 10hBIOS (hlm. 8.2.3.2).

8.2.3. REFERENSI FITUR BIOS

8.2.3.1. Interupsi int 10h. Fitur video BIOS

¨ Fungsi 00h. Mengatur mode video (tabel 3.2) dari halaman video saat ini dengan pembersihan layar (pembersihan layar cepat dilakukan oleh fungsi 06h dan 07h).

Panggilan: AH \u003d 00j,

Al \u003d mode video (kode mode diatur di 7 bit yang lebih rendah, pengaturan bit paling signifikan ke 1 menonaktifkan pembersihan layar).

Panggilan tersebut menghancurkan register KAPAK,BP,SI, danDI.

Tabel 3.2

Mode teks video dan halaman dalam standar VGAdidukung oleh
pengontrol video modern

Mode

Resolusi

Warna

Ukuran tanda

Alamat

Halaman

seminada

seminada

3 (Mono )

Secara default, DOS menggunakan mode 3 (namun, program yang dibentuk dengan baik harus memeriksa atau mengatur mode teks yang diperlukan dan kemudian mengembalikan yang sebelumnya).

¨ Fungsi 02h. Mengatur posisi kursor.

Menyetel posisi kursor di layar dalam koordinat teks, dari mana teks tersebut akan ditampilkan nanti. Nomor baris dan kolom dihitung dari sudut kiri atas. Kursor dapat diposisikan dalam mode teks dan grafis, namun dalam mode grafis, kursor tidak terlihat. BIOS mendukung hingga delapan kursor independen, satu untuk setiap halaman (lihat Tabel 3.2), terlepas dari halaman mana yang aktif. Fungsi 02 h

Panggilan: AH \u003d 02j; BH\u003d nomor halaman (0,1, ... 7), biasanya 0;

DH \u003d garis; DL\u003d kolom.

Panggilan tersebut menghancurkan register KAPAK,BP,SIdan DI.

¨ Fungsi 03h. Membaca posisi dan ukuran kursor.

Mengembalikan koordinat saat ini dari status kursor pada halaman yang dipilih. Hal ini memungkinkan pemindahan sementara untuk bekerja di tempat lain di layar, dan kemudian kembali ke tempat lama. Fungsi 03 hBIOS dapat digunakan bersama dengan fungsi DOS untuk mengatur keluaran layar.

Panggilan: AH \u003d 03h, BH \u003d nomor halaman (0,1, ... 7), biasanya 0.

Kembali: DH, DL \u003d baris dan kolom dari posisi kursor saat ini,

CH, CL\u003d baris pertama dan terakhir dari ekspansi kursor.

Panggilan tersebut menghancurkan register AX, BP, SI, dan DI.

¨ Fungsi 05h. Menginstal halaman video.

Mengatur halaman video aktif (teks dan grafik).

Panggilan: AH \u003d 05j, AL \u003d nomor halaman (0, ..., 7).

Panggilan tersebut menghancurkan register KAPAK,BP,SIdan DI.

Sebuah program yang menginstal halaman yang berbeda dari yang sekarang wajib mengembalikan yang asli di akhir pekerjaan.

¨ Fungsi 06h (07h). Memulai atau menggulir jendela ke atas (bawah).

Menginisialisasi jendela dengan koordinat yang ditentukan, spasi ASCIIdengan atribut yang diberikan (AL \u003d 0), atau menggulir konten jendela ke atas (bawah) sejumlah baris yang ditentukan ( AL\u003d jumlah baris). Saat menggulir, garis yang muncul di bagian bawah (atas) diisi dengan spasi ASCII dengan atribut yang diberikan. Fungsi ini nyaman digunakan untuk pembersihan cepat layar atau jendela persegi panjang.

Panggilan: AH \u003d 06h (07h);

AL \u003d 0 - pembersihan, AL \u003d N (N\u003e 0) - gulir terus N garis;

BH \u003d atribut simbol di jendela;

CH, CL \u003d koordinat baris dan kolom (Y, X)sudut kiri atas;

DH, DL \u003d koordinat baris dan kolom (Y, X) pojok kanan bawah.

Panggilan tersebut menghancurkan register KAPAK,BP,SI,dan DI.

¨ Fungsi 08h. Membaca karakter dan atribut pada posisi kursor saat ini pada halaman yang dipilih.

Panggilan: AH \u003d 08j, BH \u003d nomor halaman (0, ..., 7), biasanya 0.

Kembali: AH \u003d atribut karakter, AL \u003d ASCII-kode karakter.

Panggilan tersebut menghancurkan register BP,SI dan DI.

¨ Fungsi 09h... Menulis karakter dengan atribut yang ditentukan ke layar pada posisi kursor. Bekerja dalam mode grafik dan teks. Dalam mode grafis, karakter tidak boleh melanjutkan ke baris berikutnya. Semua kode di AL diperlakukan sebagai kode karakter dan tidak mengontrol posisi kursor. Setelah karakter ditampilkan, kursor digeser ke posisi berikutnya dengan fungsi 02h. Faktor pengulangan memungkinkan Anda mengeluarkan string dengan karakter yang identik. Dalam mode teks, karakter ditampilkan dengan ditentukan dalam BL atribut. Grafis - konten BL hanya mempengaruhi warna simbol, bukan latar belakang di bawahnya. Gambar grafik di bawah keakraban ditimpa.

Panggilan: AH \u003d 09h, AL \u003d ASCII- kode karakter,

BL\u003d atribut simbol (mode teks) atau hanya warna simbol (mode grafis),

BH \u003dnomor halaman (0,1, ... 7), CX\u003d tingkat pengulangan.

Panggilan tersebut menghancurkan register KAPAK,BP,SI dan DI.

¨ Fungsi 0Ah. Menulis karakter dengan atribut saat ini ke layar pada posisi kursor. Fungsi ini bekerja dalam mode grafik dan teks. Simbol mengambil atribut yang sebelumnya disetel untuk posisi ini. Semua kode ASCII di AL diperlakukan sebagai kode karakter dan tidak mengontrol posisi kursor (seperti dalam fungsi 09h). Setelah karakter ditampilkan, kursor berpindah ke posisi berikutnyafungsi 02h.

Panggilan: AH \u003d 0Ah, AL \u003d ASCII- kode karakter,

BH \u003d nomor halaman (0,1, ... 7), CX \u003d tingkat pengulangan.

Panggilan tersebut menghancurkan register KAPAK,BP,SI dan DI.

¨ Fungsi 0Eh. Menulis karakter dengan atribut saat ini dalam mode TTY.

Menulis karakter ASCII pada posisi kursor (diatur oleh 02h) di halaman aktif dan memindahkan kursor ke posisi berikutnya. Kode ASCII: 07h - panggilan (BEL), 08h - mundur (BS), 0Dh - Kereta kembali (CR), 0Ah - terjemahan baris (LF), diperlakukan sebagai manajer dan tindakan terkait dilakukan. Kode kontrol lainnya diperlakukan sebagai karakter dan ditampilkan di layar. Kursor secara otomatis dipindahkan ke baris berikutnya setelah baris sebelumnya selesai, serta menggulir layar ke atas sebanyak 1 baris setelah mengisi baris paling bawah.

Panggilan: AH \u003d 0Eh, AL \u003d ASCII- kode karakter,

BL\u003d warna simbol (hanya untuk mode grafis),

BH \u003d nomor halaman (0,1, ... 7), defaultnya adalah halaman aktif.

¨ Fungsi 0Fh. Dapatkan mode tampilan dan nomor halaman saat ini .

Panggilan: AH \u003d 0Fh.

Kembali: AL = mode tampilan, AH\u003d lebar layar dalam format teks

BH \u003dnomor halaman aktif.

Panggilan tersebut menghancurkan register BP,SI dan DI.

Contoh. Prosedur untuk mengatur posisi kursor pada halaman saat ini.

jalan masuk : dh \u003d string (0-25), dl\u003d kolom (0 - 79)

.......... ; Pulihkan register

¨ Fungsi 10h. Subfungsi 03h... Alihkan bit flicker / brightness.

Menentukan tujuan bit paling signifikan 7 dari atribut simbol: kedipan simbol atau peningkatan kecerahan latar belakang.

Panggilan: SEBUAHX\u003d 1003j, BL\u003d penugasan dari bit ke-7 dari atribut:

0 - peningkatan kecerahan, 1 - flicker (dipasang secara default).

Fungsi tersebut segera memengaruhi semua karakter layar yang memiliki bit paling signifikan dari kumpulan atribut latar belakang.

¨ Fungsi 13h. Menulis string karakter dengan atribut yang ditentukan.

Menulis string ke halaman videobuffer saat ini, dimulai dari posisi yang ditentukan. Kode ASCII: 07h- panggilan, 08h- mundur, 0Ah - terjemahan baris,
0Dh - kereta kembali diperlakukan sebagai kontrol, sisanya sebagai karakter.

Panggilan: AH \u003d 13 jam, AL \u003d mode perekaman:

0 - atribut karakter dalam BL, baris hanya berisi kode karakter, setelah menulis, kursor mengambil posisi aslinya (yaitu, keluaran baris berikutnya, jika Anda tidak mengubah posisi kursor, mulai dari posisi yang ditetapkan semula);

1 - berbeda dari mode 0 dalam hal setelah menulis kursor tetap di akhir baris;

2 - baris berisi kode karakter dan atribut secara bergantian (yaitu setiap karakter dijelaskan oleh 2 byte - ASCII-code dan atribut), setelah merekam kursor mengambil posisi aslinya;

3 - berbeda dari mode 2 karena di akhir keluaran, kursor tetap berada di akhir baris.

BH\u003d nomor halaman (0,1, ... 7), BL\u003d atribut untuk mode 0 dan 1,

CX\u003d panjang string karakter (panjang hanya mencakup kode karakter, bukan byte atribut),

DX \u003d DH.DL\u003d koordinat kursor (baris, kolom) di asal tampilan baris di layar,

ES: BP\u003d alamat awal baris dalam memori.

Perhatikan kekhasan pengaturan alamat !

1. Program (tutorial) yang berjalan di lingkungan operasi DOS menggunakan mode teks 3, halaman 0 secara default.

2. Program dengan tujuan yang lebih umum harus meminta mode video saat ini dan halaman (fungsi 0Fh, int 10h) dengan aplikasi berikutnya dalam fungsi BIOS yang digunakan.

.......

Mov v_mode, al; Simpan mode

Mov current_page, bh; Simpan baris

3. Jika program menampilkan gambar pada halaman yang berbeda, maka urutan tindakan dengan setiap halaman dapat menjadi sebagai berikut (mode default dengan "0" - halaman diasumsikan):

Mengatur halaman dengan fungsi 05h;

Mengatur posisi kursor berdasarkan fungsi 02h;

Pemformatan teks BIOS atau DOS baris demi baris.

Di masa mendatang, tampilan siklik dari konten halaman dapat diatur dengan menggantinya dengan fungsi 05 h,int 10h... Saat keluar dari program, pastikan untuk mengembalikan halaman "0" yang diperlukan. Misalnya, Anda bisa melakukannya seperti ini.

..........

..........

; Analisis buffer keyboard dengan fungsi DOS 06h int 21h untuk menghentikannya dengan menekan; tombol sembarang

mov ah, 06h; Tidak ada fungsi input tunggu

mov dl, 0FFh; Masukan

out_program :; Kembalikan halaman dengan fungsi 05h, int 10h

..........

Halaman buffer video dapat diformat secara berurutan menggunakan pemrograman memori langsung. Dalam hal ini, pemilihan halaman dilakukan dengan inisialisasi yang sesuai dari register segmen ES (lihat klausul 8.2.2). Melihat konten halaman juga dapat dilakukan dengan mengalihkannya secara berurutan menggunakan fungsi 05h, int 10h.

4. Struktur program demo yang memeriksa fungsi "flicker - background brightness" (fungsi 10 jam, subfungsi 03h, int 10h).

; Pembersihan layar

..........

; Inisialisasi 2 jendela lokal, masing-masing dengan atribut dan teksnya sendiri. Saat menugaskan

; atribut warna bit paling signifikan (ke-7 menurut angka) disetel ke "1".

.........

lanjutkan :; Nyalakan berkedip

mov bl, 1; Berkedip

; Memperkenalkan penundaan selama 3 detik

.........

; Nyalakan peningkatan kecerahan

.........

; Memperkenalkan penundaan selama 3 detik

.........

; Analisis buffer keyboard dengan fungsi DOS 06h int 21h untuk menghentikannya dengan menekan

; kunci sewenang-wenang

.........

jnz out_program; zf \u003d 0, simbol sekarang, keluar

jmp lanjutkan; zf \u003d 1, tanpa simbol, lanjutkan bekerja

out_program :; Pulihkan berkedip (default)

..........

keluar: mov axe, 4C00h; Panggil fungsi keluar

.........

5. Jika program mengatur siklus output data yang tidak ada habisnya ke layar dengan fungsi BIOS (09 h, 0Ah, 0Eh, 13h), maka tidak dapat dibatalkan dengan menekan tombol Ctrl + C (yaitu keluar dari program, karena dapat dilakukan dengan menggunakan fungsi DOS yang sesuai). Untuk melakukan ini, sertakan fungsi di badan loop 0Bh interupsi Int 21h.

8.2.3.3. Interupsi int 16h

¨ Fungsi 00h (10h). Membaca karakter keyboard dengan menunggu.

Membaca karakter dan memindai kode dari buffer input melingkar. Setelah dibaca, mereka dihapus dari buffer dan dikembalikan ke register KAPAK. Jika buffer kosong, tunggu input.Setiap tombol pada keyboard sesuai dengan apa yang disebut kode pindai, yang hanya terkait dengan tombol ini. Kode ini dikirim oleh keyboard setiap kali tombol ditekan dan dilepaskan dan diproses di BIOS oleh penangan interupsi. Int 09h... Fungsi 00h memungkinkan untuk mendapatkan kode push tanpa mengganggu penangan ini. Jika tombol yang ditekan sesuai dengan ASCII-simbol, lalu:

AL - ASCII- kode karakter, AH - kode pindai kunci.

Jika tombol yang ditekan sesuai dengan diperpanjang ASCII-kode, lalu:

AL - 00h, AH -diperpanjang ASCII-kode.

Panggilan: AH \u003d 00h (83/84-kunci).

Kembali: AL \u003d ASCII-kode karakter yang ditampilkan pada tombol / 00h,

AH\u003d kode pindai / diperpanjang ASCII-kata kunci.

Fungsi 10h (AH \u003d 10) - 00h untuk keyboard tambahan (101 / 102- kunci
ASCII-kode untuk kunci F11,F12serta untuk sejumlah kombinasi lainnya.
Sebagai tanda tombol kontrol atau kombinasinya, selain nilainya 00 h, digunakan 0Ah, 0Dh dan E0h.

¨ Fungsi 01h (11h). Memeriksa buffer keyboard untuk keberadaan karakter di dalamnya.

Menentukan apakah ada karakter yang tertunda dalam buffer melingkar; mengembalikan bendera tunggu dan simbol itu sendiri, jika ada. Namun, simbol dan kode pindai tidak diambil dari buffer dan dapat diambil kembali saat fungsi dipanggil lagi 00 h Int 16h... Fungsi ini adalah salah satu fungsi asinkron: setelah menentukan status buffer input, ia mengembalikan kontrol ke
gram.

Panggilan: AH \u003d 01j (83/84-kunci), 11 jam(101/102-kunci).

Kembali: ZF \u003d1 jika buffer kosong dan ZF\u003d 0 jika ada karakter yang tertunda di buffer. Pada kasus ini:

AL \u003d ASCII- kode karakter / 00h, AH\u003d kode pindai kunci / diperpanjang ASCII-kode.

Fungsi 11h (AH \u003d 11h) -versi fungsi yang ditingkatkan 01 h untuk keyboard tambahan (101/102 -kunci). Memungkinkan Anda untuk diperpanjang ASCII-kode untuk kunci F11,F12serta untuk sejumlah kombinasi lainnya. Sebagai tanda tombol kontrol atau kombinasinya, selain nilainya 00 h, digunakan 0Ah, 0Dh dan E0h.

¨ Fungsi 02h (12h). Dapatkan bendera keyboard.

Mengembalikan satu byte bendera keyboard yang menjelaskan keadaan tombol kontrol yang ditulis dalam byte (kata) dari area data BIOS di alamat 0000 jam: 0417h.

Panggilan: AH \u003d 02h

Kembali: AL\u003d Byte pertama dari bendera keyboard.

Bit byte memiliki arti sebagai berikut:

0: 1 - benar Bergeser ditekan

1: 1 - kiri Bergeser ditekan

2: 1 - Ctrl (ada) ditekan

3: 1 - Alt (ada) ditekan

4: 1 - mode Scroll Lock

5: 1 - mode Kunci nomor

6: 1 - mode Kunci huruf kapital

7: 1 - mode Memasukkan aktif

Fungsi 12h (AH \u003d 12h) -versi fungsi yang ditingkatkan 02 huntuk keyboard tambahan (101 / 102- kunci). Menghasilkan nilai byte yang sama dengan fungsinya 02 h, berdasarkan alamatnya 0000 jam: 0417h, dan, secara opsional, byte status keypad kedua (alamat 0000h: 0418h) dengan nilai berikut:

0: 1 - kiri Ctrl ditekan 4: 1 - ditekan Scroll Lock

1: 1 - kiri Alt ditekan 5: 1 - ditekan Kunci nomor

2: 1 - benar Ctrl ditekan 6: 1 - ditekan Kunci huruf kapital

3: 1 - benar Alt ditekan 7: 1 - ditekan SysReg

8.2.3.4. Penundaan operasi perangkat lunak

Penundaan program digunakan jika pada titik mana pun dalam program itu perlu untuk menangguhkan eksekusinya untuk sementara waktu. Berdasarkan jenis eksekusi, penundaan perangkat lunak dibagi menjadi dua jenis: penundaan yang diimplementasikan berdasarkan eksekusi loop bersarang "kosong" oleh program, dan penundaan yang diimplementasikan berdasarkan pengatur waktu sistem komputer. Kode 3.2 menunjukkan contoh implementasi jenis penundaan yang pertama.

Daftar 3.2. Penundaan software berdasarkan eksekusi loop bersarang dengan perintah Loop.

Penundaan Proc; Penundaan rutin

Mov cx, N; N - pencacah loop luar

Luar: dorong cx; Simpan isi penghitung loop luar

Mov cx, 0; Kami akan memberikan jumlah pengulangan maksimum (64K kali)

; lingkaran dalam

Inner: loop Inner; Loop dalam

Pop cx; Kembalikan konten penghitung loop luar

Loop Luar; Ulangi loop luar N kali

Dalam Listing 3.2, parameter N bertindak sebagai faktor skala untuk waktu tunda

t pantat \u003dN *t eksekusi loop dalam.

Dalam hal ini, unit waktu terkecil (yaitu "centang") adalah waktu eksekusi loop dalam, yang pada gilirannya terdiri dari waktu eksekusi 65535 kali perintah Loop... Parameter Ndipilih secara eksperimental untuk diperoleh t bagian belakang (dalam msec atau detik), dengan mempertimbangkan kecepatan komputer tertentu.

Mempertimbangkan contoh ini, kelemahan dari pendekatan ini terlihat jelas ketika Anda perlu memastikan bahwa waktu tunda dijalankan dalam program, terlepas dari jenis komputer yang digunakan.Oleh karena itu, masuk akal untuk menentukan waktu tunda perangkat lunak langsung dari pengatur waktu. Sinyal keluaran pengatur waktu dengan frekuensi 18,2 kali per detik tidak tergantung pada kinerja komputer dan berperan sebagai penghitung waktu harian. Penerapan metode ini menggunakan fungsi 00 h Interupsi BIOS Int 1Ah.

Int 1A h, fungsi 00 h. Membaca penghitung siklus timer.

Penangan interupsi BIOS dari timer sistem ( Int 8) menghitung jumlah interupsi (setiap 55ms atau 18.2 kali per detik) dalam memori kata ganda dengan alamat 0040h: 006Сh... Fungsi ini mengembalikan nilai yang terakumulasi (kode biner) dan menyetel ulang ke 0 ... Di register AL kembali 0 , jika konten penghitung belum melebihi nilai yang sesuai dengan 24 jam (ketika nilai ini tercapai, penghitung diatur ulang), jika tidak maka akan kembali AL \u003d1.

Panggilan: AH \u003d 00h.

Kembali: CX: DX - jumlah kutu waktu sistem dari tengah malam,

AL - bendera transisi dalam sehari.

Contoh nilai kembalian dalam CX: DX:

1 detik 12 h atau 18,

1 menit 04 44 h atau 1092,

1 jam 1 00 07 h atau 65543,

24 jam 18 00 B0 h atau 1.573 040.

Untuk penundaan kurang dari 14 detik, hanya register byte rendah yang dapat digunakan DX

Daftar 3.3. Dalam contoh ini, penundaan diatur ke 5 detik, yang sesuai dengan 91 hitungan pengatur waktu

..........

mov ah, 0; Fungsi siklus timer "membaca"

int 1Ah; Dapatkan nilai penghitung siklus di cx: dx

tambahkan dx, 91; Tambahkan 5 detik. ke kata yang paling tidak signifikan di dx

mov bx, dx; Kami menyimpan nilai yang diperlukan di bx dan mengeksekusi

; pemeriksaan terus menerus dari nilai penghitung waktu hari

ulangi: int 1Ah; Dapatkan nilai penghitung lagi

cmp dx, bx; Bandingkan dengan yang diinginkan

jne ulangi; Jika tidak sama, lalu ulangi lagi,

; jika tidak, penundaan akan berakhir

Jika Anda perlu memasukkan penundaan dengan akurasi tinggi, maka Anda harus menggunakan fungsi tersebut 86 jam Interupsi BIOS Int 15h. Ini memungkinkan Anda untuk menentukan waktu tunda dalam mikrodetik. Interupsi diaktifkan saat penundaan sedang berlangsung. Kontrol kembali ke program setelah waktu yang ditentukan telah berlalu.

Fungsi Int 15h 86h

Panggilan: AH \u003d 86h, CX : DX \u003d waktu tunda dalam mikrodetik.

Kembali: CF \u003d 0 - eksekusi normal, CF \u003d 1 - fungsinya tidak didukung.

Contoh: CX:DX \u003d0098h:9680h \u003d 10.000.000 μs \u003d 10 detik.

8.3. OPSI PEKERJAAN INDIVIDU

1. Inisialisasi layar dengan atribut tertentu. Hamparkan dengan jendela lokal yang lebih kecil dengan atribut warna berbeda. Di bagian tengah jendela, tampilkan teks (beberapa baris) dari memori dengan implementasi siklus gulir jendela dalam beberapa baris ke atas dan ke bawah. Mengubah jenis pengguliran diatur oleh penundaan perangkat lunak (2 ... 3 detik). Berikan jalan keluar dari program.

2. Inisialisasi dua halaman video, masing-masing dengan atribut dan teks rekamannya sendiri (beberapa karakter teks harus memiliki warna yang berbeda dari yang lain). Atur perubahan siklik halaman video dengan jangka waktu 2 ... 3 detik. Memberikan jalan keluar dari program dengan pemulihan halaman saat ini.

3. Inisialisasi 2 jendela lokal di layar. Setiap jendela dengan atribut dan teksnya sendiri dengan beberapa baris. Atur peralihan siklik dari atribut jendela pertama ke jendela kedua dan belakang. Siklus peralihan diatur oleh penundaan waktu 2 ... 3 detik. Berikan jalan keluar dari program.

4. Inisialisasi 2 jendela lokal di layar. Setiap jendela dengan atribut dan teksnya sendiri dalam beberapa baris. Atur peralihan teks secara siklik dari satu jendela ke jendela lain dengan jeda waktu 2 ... 3 detik. Berikan jalan keluar dari program.

5. Pada layar, inisialisasi window_1 dengan atribut dan teks dalam beberapa baris. Setelah waktu tunda 2 ... 3 detik, hamparkan sebagian window_2 dengan atribut dan teks lain di atasnya. Proses loop. Berikan jalan keluar dari program.

6. Pada layar, inisialisasi jendela lokal dengan atribut (dan teks), beri tahu jendela itu melayang ke arah horizontal (vertikal). Ketika batas layar tercapai, jendela mengubah penyimpangannya ke arah yang berlawanan. Langkah pergerakan jendela lokal di ruang layar harus berkali-kali lebih kecil dari ukuran layar itu sendiri.

7. Pada layar, inisialisasi jendela lokal dengan atribut (dan teks). Setelah menekan tombol perintah, jendela mulai berubah ukurannya (berdenyut), bertambah dan berkurang dengan jangka waktu tertentu. Langkah waktu untuk mengubah ukuran jendela harus jauh lebih sedikit daripada periode
riak.

8. Inisialisasi layar dan jendela lokal di dalamnya dengan atributnya. Atur mode keluaran teks ke jendela lokal dari keyboard. Menyediakan kemungkinan mengedit teks, serta menggulir jendela saat diisi.

9. Inisialisasi layar dan dua jendela lokal kecil di dalamnya. Dengan kuncinya<Tab\u003e mengatur peralihan kursor dari satu jendela ke jendela lainnya. Dipilih berdasarkan kunci<Tab\u003e jendela menjadi lebih cerah. Berikan jalan keluar dari program.

10. Inisialisasi layar dan dua jendela lokal di dalamnya. Tampilkan paruh pertama tabel di jendela kiri ASCII, dan ke kanan - babak kedua. Sediakan untuk membersihkan jendela dan keluar dari program.

11. Inisialisasi layar dan dua jendela lokal di dalamnya (masing-masing dengan atribut dan teksnya sendiri). Atur peralihan siklik dari bit "kecerahan latar / kedipan". Keluar dari program harus mengembalikan nilai bit default.

12. Inisialisasi layar dan dua jendela lokal di dalamnya. Tampilkan paruh kedua tabel di jendela kiri ASCII dengan simbol pseudo-grafis. Menggunakan navigasi kursor, gunakan tombol (¬, -, ®, ¯) untuk mengatur kemungkinan pemutaran terus menerus garis lurus di jendela kedua.

13. Kembangkan program untuk menampilkan teks di layar dengan memprogram langsung penyangga video menggunakan elemen pemformatan (lekukan dari batas kiri, teks membungkus ke baris berikutnya setelah sebuah kata melintasi batas kanan).

Jalan masuk: DS:SI - alamat ASCI-string, AH- atribut;

CX- jumlah karakter yang ditampilkan;

DH /DL - garis ( baris) / kolom ( clm);

Indent_L,Indent_R - margin padding (dalam kolom) di kiri dan kanan.

Itu diperlukan untuk mengoptimalkan perhitungan alamat buffer video ES:DI... Prosedur harus mengembalikan nilai register asli ES.

14. Menggunakan pemrograman langsung memori video, isi beberapa halaman buffer video dan kemudian lihat (tampilan) dalam mode siklik. Saat keluar dari program, pastikan pemulihan halaman saat ini.

15. Kembangkan program untuk menggambar persegi panjang menggunakan karakter grafis dalam pengkodean ASCII. Koordinat sudut kiri atas (baris, kolom) dan kanan bawah harus dimasukkan dari keyboard setelah perintah yang sesuai.

8.4. PERTANYAAN UJI

1. Penjelasan singkat tentang kemampuan yang diberikan kepada pemrogram oleh sistem input-output dasar BIOS, dibandingkan dengan fungsi layanan DOS.

2. Berapakah jumlah memori video untuk gambar satu karakter dan, karenanya, satu halaman video pada monitor dalam mode teks?

3. Beri deskripsi atribut simbol dalam buffer video.

4. Kembangkan makro untuk:

¨ membersihkan layar dengan menempatkan kursor di sudut kiri atas layar;

¨ memposisikan kursor ke titik sembarang di layar sambil mengingat koordinatnya dalam memori menggunakan variabel baris dan clm;

¨ tampilan pesan mes panjangnya leng dan atribut warna attrib dari posisi yang ditentukan oleh variabel baris dan clm.

5. Fungsi BIOS apa yang memberikan informasi lengkap kepada pengguna tentang tombol yang ditekan pada keyboard.

Artikel ini menguraikan sintaks rumus dan penggunaan fungsi MIN di Microsoft Excel.

Deskripsi

Mengembalikan nilai terkecil dalam daftar argumen.

Sintaksis

MIN (angka1; [angka2]; ...)

Argumen fungsi MIN dijelaskan di bawah ini.

    Nomor1, nomor2, ... Number1 diperlukan, nomor selanjutnya adalah opsional. Dari 1 hingga 255 angka, di antaranya Anda ingin mencari yang terkecil.

Catatan

    Argumen dapat berupa angka, atau angka yang berisi nama, larik, atau referensi.

    Nilai Boolean dan representasi tekstual dari angka yang langsung dimasukkan ke dalam daftar argumen dianggap.

    Jika argumen tidak berisi angka, fungsi MIN mengembalikan 0.

    Argumen yang berupa nilai kesalahan atau teks yang tidak dapat diubah menjadi angka menghasilkan kesalahan.

Contoh

Salin data sampel dari tabel berikut ini dan tempelkan ke sel A1 lembar kerja Excel baru. Untuk menampilkan hasil rumus, pilih dan tekan F2, lalu tekan Enter. Ubah lebar kolom sesuai kebutuhan untuk melihat semua data.

Fungsi MIN digunakan untuk menemukan angka minimum dalam rentang yang diteliti dan mengembalikan angka yang sesuai.

Fungsi MINA dirancang untuk menemukan nilai minimum dalam rentang data yang diperiksa dan mengembalikan hasil yang sesuai.

Contoh penggunaan fungsi MIN dan MINA di Excel

Tabel Excel berisi data tanggal lahir pekerja kantoran. Tentukan usia minimum karyawan.

Tabel data:

Untuk perhitungan, kami menggunakan rumus array (hasil yang benar hanya ketika menekan kombinasi Ctrl + Shift + Enter):


Satu-satunya argumen adalah ekspresi YEAR (TODAY ()) - YEAR (B3: B10), yang mengembalikan larik nilai numerik yang sama dengan perbedaan antara tahun ini dan tahun lahir setiap karyawan. Sebagai hasil perhitungan, kami mendapatkan:


Formula tersebut secara otomatis menghitung bahwa usia karyawan termuda adalah 27 tahun.



Cara menghitung jumlah nilai non-negatif minimum di Excel

Lembar bentang Excel berisi banyak kolom data numerik. Temukan jumlah nilai non-negatif minimum yang terdapat di kolom ini. Selain itu temukan nomor terkecil yang tersedia di tabel.

Tabel sumber:


Untuk menentukan angka non-negatif minimum, gunakan rumus array:

!}

Satu-satunya argumen adalah fungsi IF, yang memeriksa larik data untuk kemunculan bilangan positif. Jika kondisi terpenuhi, fungsi MIN mengambil array yang hanya berisi angka positif sebagai argumen. Demikian pula, kami akan menemukan nilai minimum untuk kolom yang tersisa. Hasil yang dihasilkan (Ctrl + Shift + Enter):


Temukan angka terkecil dalam tabel menggunakan rumus:

Argumen fungsi adalah nilai yang dikembalikan oleh masing-masing fungsi MIN untuk vektor data yang ditentukan. Gunakan sebagai rumus array. Hasil (Ctrl + Shift + Enter):


Temukan beberapa nilai terkecil dalam kondisi di Excel

Beberapa perusahaan sebelumnya bekerja dengan satu pemasok produk. Namun, diketahui bahwa beberapa pemasok lain menawarkan harga yang lebih baik. Spreadsheet Excel berisi kode item dan diskon yang ditawarkan oleh pemasok lain. Jika tidak ada diskon, nilai logisnya SALAH; jika angkanya positif, produk lebih mahal. Temukan diskon terbesar untuk produk yang sama hanya dengan harga berbeda dari pemasok berbeda.

Tabel sumber:

Rumus perhitungan (rumus array):

\u003d 0; "Tanpa diskon"; MINA (IF (A3: A15 \u003d D1; B3: B15; ""))) "class \u003d" formula "/\u003e

Algoritme penghitungan:

  1. Fungsi IF menguji kondisi MINA (IF (A3: A15 \u003d D1; B3: B15; ""))\u003e \u003d 0, di mana MINA mengembalikan nilai diskon minimum untuk item yang kodenya ditentukan dalam sel D1.
  2. Fungsi MINA memperhitungkan nilai logika. Ada kemungkinan tidak ada diskon untuk produk apa pun (semua nilai SALAH), dan hasil 0 (nol) akan dikembalikan. Dalam kasus ini, string teks "Tidak ada diskon" akan dikembalikan. Peristiwa serupa akan terjadi jika semua diskon hanya angka positif.
  3. Jika kondisi tidak terpenuhi, diskon maksimum (nilai negatif terbesar) untuk kode item yang ditentukan akan dikembalikan.

Mari kita hitung diskon terbesar untuk produk lain. Akibatnya, kami mendapatkan (Ctrl + Shift + Enter):


Fitur menggunakan fungsi MIN dan MINA di Excel

Fungsi MIN memiliki sintaks berikut:

MIN (angka1; [angka2] ...)

Deskripsi argumen:

  • number1 adalah argumen wajib yang mencirikan angka pertama dari rentang di mana Anda ingin menemukan nilai minimum;
  • [angka2] ... - argumen opsional kedua dan selanjutnya yang mencirikan angka kedua dan berikutnya dari rentang yang diteliti.

Fungsi MINA memiliki sintaks berikut:

MINA (nilai1; [nilai2] ...)

Deskripsi argumen:

  • nilai1 adalah argumen wajib yang mencirikan kemunculan pertama dalam rentang di mana Anda ingin menemukan nilai minimum;
  • [nilai2] ... adalah argumen opsional kedua dan berikutnya yang mencirikan kejadian kedua dan selanjutnya dari rentang data yang sedang diperiksa.

Catatan 1:

  1. Perbedaan sintaks menekankan perbedaan semantik antara dua fungsi: MIN hanya bekerja dengan nilai numerik, MINA juga memperhitungkan tipe data logis.
  2. Jika hanya string teks yang bukan representasi tekstual dari angka yang diteruskan sebagai argumen ke fungsi MIN dan MINA, fungsi tersebut akan mengembalikan 0.
  3. Fungsi MIN, yang mengambil referensi ke rentang data sebagai argumen, tidak hanya mengabaikan logika TRUE dan FALSE, tetapi juga string teks dan sel kosong.
  4. Jika MIN atau argumen MINA adalah rumus yang mengembalikan kesalahan, fungsi ini juga akan mengembalikan kode kesalahan. Direkomendasikan untuk memeriksa data menggunakan fungsi IFERROR.
  5. Fungsi MIN dan MINA tidak memiliki fungsi logika analog, seperti yang diterapkan, misalnya, dalam fungsi COUNT (COUNTIF), oleh karena itu, verifikasi data harus dilakukan ketika MIN dan MINA dijalankan, meneruskan fungsi logika (IF, IFERROR dan orang lain) sebagai argumen.

Catatan 2:

  1. MINA mengembalikan 0 (nol) jika rentang yang direferensikan sebagai argumen berisi nilai teks atau representasi angka secara tekstual.
  2. Kedua fungsi tersebut digunakan untuk menemukan nilai minimum dalam rentang nilai yang diteruskan sebagai argumen, tetapi ada beberapa perbedaan di antara keduanya:
  • Jika salah satu argumen untuk fungsi MIN adalah nilai Boolean (TRUE atau FALSE, yang masing-masing dapat dikonversi menjadi nilai numerik 1 dan 0), nilai tersebut akan disertakan dalam perhitungan. Misalnya, function \u003d MIN (100; TRUE; FALSE; 10) akan mengembalikan 0.
  • Jika referensi ke rentang yang berisi data boolean diteruskan sebagai argumen ke fungsi MIN, fungsi MIN tidak akan diperhitungkan. Misalnya, \u003d MIN (A1: A4) akan mengembalikan 10 jika rentang sel A1: A4 berisi data berikut masing-masing: 100, TRUE, FALSE, dan 10.
  • Untuk memasukkan data logika dalam kalkulasi, gunakan fungsi MINA. Misalnya, penulisan \u003d MINA (A1: A4) akan mengembalikan nilai 0 (logika FALSE ekivalen dengan numerik 0) jika sel A1: A4 berisi data seperti pada paragraf sebelumnya.

Anda ingin label Data Pivot di tabel kiri menjadi tengah dalam pemilihan, seperti di tabel kanan. Tombol mana yang harus saya tekan?

Anda ingin label "Data Ringkasan" di tabel kanan muncul seperti di tabel kiri. Tombol mana yang harus saya tekan?

641. Nilai apa yang akan muncul di sel yang disorot jika fungsi \u003d MIN (H4: H8) dimasukkan di sana?

· 11479

Anda ingin angka di sel kanan tampak sama dengan angka di kiri. Item menu mana yang harus Anda pilih?

Anda ingin sel C19 yang disorot menjadi perbedaan sel A19 - B19. Di mana Anda mulai memasukkan rumus?

Dengan ruang

· Dari tanda minus

· Dengan tanda yang sama

Dari nama sel

644. Jika Anda meregangkan area yang dipilih dengan angka 1, 2, 3 di sudut kanan bawah sambil menahan tombol kiri mouse, hasilnya akan seperti pada pecahan:

Alat apa yang digunakan untuk mendapatkan gambaran, seperti di sel A24: A28?

Tab mana yang harus Anda buka untuk menambahkan slide ke presentasi Anda?

Untuk mengubah desain tata letak "Judul dan Objek", apakah Anda perlu pergi ke bookmark?

Tombol manakah yang harus Anda tekan untuk mengubah teks yang dipilih dalam Fragmen 1 menjadi daftar berpoin, seperti pada Fragmen 2?

Tombol manakah yang harus Anda tekan untuk mengonversi teks yang dipilih dalam Fragmen 1 ke tampilan yang sama seperti di Fragmen 2?

Tombol manakah yang harus Anda tekan untuk membuat kata "Sel" di tabel atas terlihat seperti di tabel bawah?

Bagaimana cara beralih ke mode slideshow?

Apa arti ikon yang ditunjukkan di sebelah nomor slide?

Slide disertakan dalam tampilan khusus

Slide akan dilewati saat menampilkan presentasi

· Slide menggunakan efek animasi

Slide berisi file video

Item menu mana yang harus Anda pilih untuk mendapatkan hasil seperti pada gambar di sebelah kanan?

Pintasan apa yang harus saya gunakan untuk meluncurkan browser untuk melihat halaman WEB?

Anda harus langsung mengunjungi situs web www.kremlin.ru secara langsung. Di bidang mana Anda harus memasukkan alamat yang Anda cari?

Tab mana yang harus Anda buka untuk mencetak teks dari situs?