280 likes | 441 Views
การติดต่อกับจอภาพและแป้นพิมพ์. BIOS Interrupt. Interrupt Type 0 - 7 Interrupt Type 8H - FH Interrupt 8 Timer Interrupt 9 Keyboard Interrupt Type 10H - 1FH Interrupt 10H Video Interrupt 11H Equipment Check Interrupt 12H Memory Size. ส่วนประกอบของการ์ดแสดงผล.
E N D
การติดต่อกับจอภาพและแป้นพิมพ์การติดต่อกับจอภาพและแป้นพิมพ์
BIOS Interrupt • Interrupt Type 0 - 7 • Interrupt Type 8H - FH • Interrupt 8 Timer • Interrupt 9 Keyboard • Interrupt Type 10H - 1FH • Interrupt 10H Video • Interrupt 11H Equipment Check • Interrupt 12H Memory Size
ส่วนประกอบของการ์ดแสดงผลส่วนประกอบของการ์ดแสดงผล • หน่วยความจำแสดงผล (Display Memory) • วงจรควบคุมการแสดงผล (Video Controller)
ความสามารถของการ์ดแสดงผลความสามารถของการ์ดแสดงผล • ความสามารถในโหมดข้อความและกราฟิก • ความละเอียดของการแสดงผล • จำนวนสีที่แสดงผลได้ในแต่ละครั้ง • จำนวนจุดในการสร้างตัวอักษรแต่ละตัว
วิดีโอมาตรฐาน • MDA (Monochrome Display Adapter) • แสดงผลได้สีเดียว • CGA (Color Graphics Adapter) • แสดงผลได้ 4 สี • EGA (Enhanced Graphics Adapter) • แสดงผลได้ 16 สี • VGA (Video Graphics Array) • แสดงผลได้ 256 สี
โหมดแสดงผล • โหมดข้อความ • โหมด 0,1,2,3,7 • โหมดกราฟิก • โหมด 4,5,D,E
การแสดงผลทางจอภาพ • ระบบจะแสดงผลได้จะต้องเอาข้อมูลที่จะแสดงผลไปใส่ใน Video RAM โดยตัวอย่างแอดเดรสหน่วยความจำจะเป็นดังนี้ • โหมด 0 แอดเดรส B800 จำนวน 2000 ไบต์ • โหมด 2 แอดเดรส B800 จำนวน 4000 ไบต์ • โหมด 13 แอดเดรส A000 จำนวน 6400 ไบต์
การแสดงผลในโหมดข้อความการแสดงผลในโหมดข้อความ • หนึ่งตัวอักขระจะใช้หน่วยความจำสองไบต์ • ไบต์แรกเป็นรหัสแอสกี • ไบต์ที่สองเป็นแอตทริบิวต์ D7 D6 D5 D4 D3 D2 D1 D0 B R G B I R G B สีตัวอักษร สีพื้น
ตัวอย่างโปรแกรม MOV AX,0B800H MOV DS,AX MOV CX,2000 MOV DI,0 FILL_BUF: MOV [DI],1441H ADD DI,2 LOOP FILL_BUF
การใช้ INT 10H • อินเทอร์รัพต์ 10H ฟังก์ชัน 0 เลือกโหมดแสดงผล อินพุต AH = 0 AL = หมายเลขโหมด เอาต์พุต ไม่มี • อินเทอร์รัพต์ 10H ฟังก์ชัน 2 กำหนดตำแหน่ง cursor อินพุต AH = 2 DH = ตำแหน่งแถวใหม่ DL = ตำแหน่งคอลัมน์ใหม่ BH = หมายเลขเพจ
การใช้ INT 10H • อินเทอร์รัพต์ 10H ฟังก์ชัน 6 เลื่อนจอภาพ อินพุต AH = 6 AL = จำนวนบรรทัดที่เลื่อน ถ้าเป็น 0 เลื่อนหนึ่งหน้า BH = ค่าแอตทริบิวต์ CH,CL = แถวและคอลัมน์มุมบนซ้าย DH,DL = แถวและคอลัมน์มุมล่างขวา เอาต์พุต ไม่มี
การใช้ INT 10H • อินเทอร์รัพต์ 10H ฟังก์ชัน 9 แสดงผลตัวอักษรพร้อมแอตทริบิวต์ที่ตำแหน่ง cursor อินพุต AH = 9 BH = เพจที่แสดงผล AL = รหัสแอสกีของตัวอักขระ CX = จำนวนครั้งที่จะแสดงผล BL = ค่าแอตทริบิวต์ เอาต์พุต ไม่มี
จงเขียนโปรแกรมให้ทำงานต่อไปนี้จงเขียนโปรแกรมให้ทำงานต่อไปนี้ • เซตจอภาพให้แสดงผลในโหมด 3 • สร้าง window สีบนจอภาพ โดยมีจุดยอดเป็น (26,8) และ (52,16) • ย้าย cursor ไปที่ (39,12) • พิมพ์ตัว A กระพริบที่ตำแหน่ง cursor
แป้นพิมพ์ • คีย์คอมพิวเตอร์แบ่งออกเป็น 3 กลุ่ม • แอสกีคีย์ • คีย์พิเศษ • ฟังก์ชันคีย์
ฟังก์ชันของ DOS สำหรับแป้นพิมพ์ • การรับอักขระตัวเดียวจากแป้นพิมพ์ MOV AH , 01 INT 21H • การรับอักขระสตริงจากแป้นพิมพ์ MOV AH , 0A MOV DX , ตำแหน่งของบัฟเฟอร์ บัฟเฟอร์มี 3 ส่วน ส่วนแรกขนาด 1 ไบต์ เก็บจำนวนตัวสูงสุด ส่วนที่สองขนาด 1 ไบต์ เก็บจำนวนข้อมูลที่ป้อน ส่วนที่สามเป็นข้อมูล
รับอักขระตัวเดียวไม่แสดงผลบนหน้าจอรับอักขระตัวเดียวไม่แสดงผลบนหน้าจอ MOV AH , 07 INT 21H • รับอักขระตัวเดียวไม่แสดงผลบนหน้าจอ (กด CRT-BREAK มีผล) MOV AH , 08 INT 21H
ตัวอย่างโปรแกรม Password PWTXT DB ‘twat’,0DH .STARTUP GETPW: LEA SI , PWTXT GETCH: MOV AH , 8 INT 21H CMP AL , [SI] JNZ GETPW INC SI CMP AL , 0DH JNZ GETCH
ฟังก์ชันของ BIOS สำหรับแป้นพิมพ์ • INT 16H ฟังก์ชัน 0 อ่านค่าตัวอักขระ อินพุต AH = 0 เอาต์พุต AL = รหัสแอสกีถ้ากดคีย์แอสกี = 0 ถ้ากดคีย์ฟังก์ชัน AH = รหัสสแกนของคีย์
ตัวอย่างรหัสสแกนคีย์ คีย์ เลขฐานสิบหก เลขฐานสิบ Ctrl 1D 29 Left Shift 2A 42 Alt 38 56 F1 - F10 3B - 44 59 - 68 Up 48 72 Down 50 80 Left 4B 75 Right 4D 77
ฟังก์ชันของ BIOS สำหรับแป้นพิมพ์ • INT 16H ฟังก์ชัน 2 อ่านค่าไบต์สถานะ อินพุต AH = 2 เอาต์พุต AL = ไบต์สถานะของคีย์บอร์ต ์ D7 D6 D5 D4 D3 D2 D1 D0 Insert Caps Lock Num Lock Scroll Lock ALT CTRL Left
EX : โปรแกรมย้าย cursor ไปมุมบนซ้ายถ้ากดคีย์ F1 MOV AH , 0 EXECUTE: INT 16H MOV AH , 2 OR AL , AL XOR BH , BH JNE EXIT INT 10H CMP AH , 3BH EXIT: JE F1 MOV DX , 184FH JMP EXECUTE F1: XOR DX , DX
โปรแกรมตรวจสอบการกดคีย์โปรแกรมตรวจสอบการกดคีย์ *
ตัวอย่างโปรแกรม Password DO_FUNCTION ;เก็บค่าต่าง ๆ ลงสแต็ก รหัสสแกนอยู่ใน AX CMP AH , 72 JE CURSOR_UP CMP AH , 75 JE CURSOR_LEFT CMP AH , 77 JE CURSOR_RIGHT CMP AH , 80 JE CURSOR_DOWN
Time Display Program • INT 21H Function 2CH Time-of-Day Input: AH = 2CH Output: CH = hours (0-23) CL = minutes(0-59) DH = seconds(0-59) DL = 1/100 seconds (0-99)
Time Display Program .DATA TIME_BUF DB ‘00:00:00$’ .CODE MAIN PROC MOV AX , @DATA MOV DS , AX LEA BX , TIME_BUF CALL GET_TIME LEA DX , TIME_BUF MOV AH , 09H INT 21H
Time Display Program GET_TIME PROC MOV AH , 2CH INT 21H ;convert hours into ASCII and store MOV AL , CH CALL CONVERT MOV [BX] , AX ;convert minutes into ASCII and store MOV AL , CL CALL CONVERT MOV [BX+3] , AX
CONVERT PROC ; input : AL = number ; output : AX = ASCII digits, AL = high digit , AH = low digit MOV AH , 0 MOV DL , 10 DIV DL OR AX , 3030H RET CONVERT ENDP
Date Function • INT 21H Function 2AH หาวันเดือนปีจากฐานเวลาของคอมพิวเตอร์ Input: AH = 2AH Output: AL = วันของสัปดาห์ (Sunday = 0 , Monday = 1 , etc) CX = ปี (1980 - 2099) DH = เดือน (01-12) DL = วันที่ (01-31)