อินเทอร์รัพท์ DOS Interrupt
ปรับปรุง : 2562-02-01 (ปรับ template)
อินเทอร์รัพท์ (Interrupt) หมายถึง อะไร
ทางเข้าโปรแกรมย่อยที่ BIOS หรือ DOS มีไว้บริการ เป็นการเข้าไปขัดจังหวะ
เพื่อขอกระทำการบางอย่าง เช่น ขอพิมพ์ ขออ่านข้อมูลบางอย่าง เป็นต้น
ผู้รู้บางท่านกล่าวว่า interrupt เหมือน call function ในภาษาคอมพิวเตอร์ คือ
เข้าไปเรียกโปรแกรมบางอย่างมาทำงานจนเสร็จ แล้วย้อนกลับมาทำบรรทัดต่อไป
อินเทอร์รัพท์เป็นกระบวนการในการส่งสัญญาณบอกให้ซีพียูรับรู้แล้วหยุดงานที่ทำอยู่
และหันมาตอบสนองต่ออินเทอร์รัพที่ร้องขอ เป็นวิธีที่เหมาะสมที่สุด
ในการติดต่อระหว่างอุปกรณ์และซีพียู มีลักษณะคล้ายการเรียกใช้ subroutine
Interrupt List (
http://www-2.cs.cmu.edu #A ..
#F )
The original interrupt list is from Ralph Brown, but I couldn't handle it on my computer (and I have a good one). This is why I adapted it. The interrupt page I have now has 85 files describing the interrupts, with in each file about 100 little (original) files. This has some advantages, like the saved disk space, but also disadvantages, like the longer waiting before getting a interrupt. Something positive about this is: when you once showed one page, you have 100 interrupts in your cache and when you search a lot of interrupts, you can easely scroll forward to the next interrupt.
อินเทอร์รัพท์ที่น่าสนใจ (Interested Interrupt)
อินเทอร์รัพท์หมายเลข 0H : พิมพ์ข้อความ “Divide Overflow” และหยุดการทำงาน
อินเทอร์รัพท์หมายเลข 10H บริการที่ 0 : กำหนดสกรีนโหมด (Set Screen Mode)
อินเทอร์รัพท์หมายเลข 10H บริการที่ 1 : กำหนดชนิดของเคอร์เซอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ 6 : เลื่อนแอ็กทีฟเพจขึ้น [ตัวอย่าง ]
อินเทอร์รัพท์หมายเลข 20H : เทอร์มิเนตโปรแกรม
อินเทอร์รัพท์หมายเลข 21H บริการที่ 0 : เทอร์มิเนตโปรแกรม
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2 : ส่งอักขระไปยังจอภาพ
อินเทอร์รัพท์หมายเลข 21H บริการที่ 8 : รับข้อมูลจากคอนโทรลโดยไม่แสดงบนจอภาพให้เห็น แต่เพิ่มการตรวจสอบการกด <Ctrl-C> หรือ <Ctrl-Break>
อินเทอร์รัพท์หมายเลข 21H บริการที่ 9 : พิมพ์สตริงก์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4CH : เทอร์มิเนตโปรแกรม
Sample of using : int 0h
:: สร้างโปรแกรมขนาด 4 byte ชื่อ test.com เพื่อหยุดการทำงานของโปรแกรม
C:\>debug test.com
-a
11BD:0100 mov ah,0
11BD:0102 int 21
11BD:0104
-rcx
CX 0000
:4
-w
Writing 00004 bytes
-q
C:\>test.com
C:\>
:: ตัวอย่างการใช้ interrupt ใน debug อย่างสั้น
// ex1 : รับค่าจากแป้นพิมพ์ส่งให้ errorlevel ใน DOS
mov ah,8
int 21
mov ah,4c
int 21
// ex2 : รับค่าจากแป้นพิมพ์ แล้วแสดงผล
mov ah,8
int 21
mov ah,2
mov dl,al
int 21
mov ah,4c
int 21
// ex3 : สั่ง Clear screen โดยกำหนด mode ของจอภาพ
mov ah,0
mov al,2
int 10
mov ah,0
int 21
// ex4 : กำหนด cursor ให้เป็นแถบทึบ
mov ah,1
mov ch,0
mov cl,7
int 10
mov ah,0
int 21
// ex5 : เปลี่ยน Mode การแสดงผล ด้วย int 10h
mov ah,0
mov al,12
int 10h
mov ah,4c
int 21h
// ex6 : พิมพ์อักษร AB และ ab คนละบรรทัด
mov ah,2
mov dl,41
int 21
mov ah,2
mov dl,42
int 21
mov ah,2
mov dl,0d
int 21
mov ah,2
mov dl,0a
int 21
mov ah,2
mov dl,61
int 21
mov ah,2
mov dl,62
int 21
mov ah,0
int 21
// ex7 : พิมพ์อักษร ABCDE โดยกำหนด ah = 2
mov ah,2
mov dl,41
int 21
mov dl,42
int 21
mov dl,43
int 21
mov dl,44
int 21
mov dl,45
int 21
mov ah,0
int 21
ไบออสและดอสอินเทอร์รัพท์
อินเทอร์รัพท์หมายเลข 0 :
พิมพ์ข้อความ “Divide Overflow” และหยุดการเอกซีคิวต์โปรแกรม ทำให้มีการหารด้วย 0 เกิดขึ้น
อินเทอร์รัพท์หมายเลข 1 :
การเอกซีคิวต์ทีละคำสั่ง (Single Step) อินเทอร์รัพท์นี้มีไว้สำหรับโปรแกรมประเภทดีบักเกอร์โดยเฉพาะ การเรียกใช้อินเทอร์รัพท์นี้ในระหว่าง การเอกซีคิวต์โปแกรมจะทำให้เกิดการเอกซีคิวต์ทีละคำสั่ง
อินเทอร์รัพท์หมายเลข 2 :
นอนมาส์อินเทอร์รัพท์ (Nonmaskble Interrupt,NMI)
อินเทอร์รัพท์นี้เป็นฮาร์ดแวร์อินเทอร์รัพท์ อินเทอร์รัพท์นี้ไม่ถูกควบคุมด้วยคำสั่ง
STI และ CLI อินเทอร์รัพท์นี้จึงถูกเอกซีคิวต์เสนอเมื่อมันถูกเรียกใช้
อินเทอร์รัพท์หมายเลข 3 :
จุดหยุดการเอกซีคิวต์ (Break point)
อินเทอร์รัพท์นี้เป็นอินเทอร์รัพท์หนึ่งที่มีไว้สำหรับโปรแกรมประเภทดีบักเกอร์โดย
เฉพาะหรือที่เรียกว่า ดีบักเกอร์อินเทอร์รัพท์ อินเทอร์รัพท์นี้ทำให้เราสามารถเอกซีคิวตืทุกคำสั่ง
ที่อยู่ก่อนหน้าแอสเดรสเฉพาะแอสเดรสหนึ่ง ๆ ได้ และเมื่อถึงแอสเดรสนี้แล้วให้หยุดการเอกซีคิวต์
ดีบักเองก็มีการใช้อินเทอร์รัพท์นี้ในคำสั่ง GO โดยแทรกคำสั่ง INT 3 ไว้ที่แอส
เดรสนั้นก่อนที่จะส่งความควบคุมไปยังโปรแกรมและเมื่อโปรแกรมถูกเอกซีคิวต์มาพบกับคำสั่ง
INT 3 แล้วการควบคุมก็จะถูกส่งกลับคืนมายังดีบักอีกครั้งหนึ่ง
อินเทอร์รัพท์หมายเลข 4 : โอเวอร์โฟลว์ (Overflow)
อินเทอร์รัพท์นี้คล้ายกับอินเทอร์รัพท์หมายเลข 0 ตรงที่มันจะถูกเรียกใช้เมื่อเกิดเหตุการณ์ที่ไม่ปกติขึ้น
ซึ่งในกรณีนี้ก็คือ การเกิดโอเวอร์โฟลว์ โดยปกติแล้ว
อินเทอร์รัพท์นี้ไม่ได้ทำสั่งใดๆและไบออสก็เพียงแต่รีเทิร์นการควบคุบกลับมาเท่านั้น
อินเทอร์รัพท์หมายเลข 5 : พิมพ์หน้าจอ (Print Screen)
อินเทอร์รัพท์นี้เป็นอินเทอร์รัพท์ที่ถูกเรียกใช้เมื่อมีการกดปุ่ม <Print Screen>
บนคีย์บอร์ดมีหน้าที่ในการพิมพ์ข้อมูลต่างๆที่ปรากฏ
บนหน้าจอออกทางพรินเตอร์ การใช้คำสั่ง INT5 ในโปแกรมจึงให้ผลเหมือนการกดปุ่ม
<Print Screen> บนคีย์บอร์ด ไม่ต้องผ่านค่า
อาร์กิวเมนต์ใด ๆ ไปให้กับอินเทอร์รัพท์นี้
อินเทอร์รัพท์หมายเลข 6 และ 7 : สงวนไว้ (Reserved)
อินเทอร์รัพท์หมายเลข 8 :
วันเวลา (Time Of Day) อินเทอร์รัพท์นี้เป็นอีกอินเทอร์รัพท์หนึ่งที่เป็นฮาร์ดแวร์อินเทอร์รัพท์
ถูกเรียกใช้เพื่อการอัปเดตเวลาภายในเครื่องที่เก็บไว้ในพื้นที่ของข้อมูลไบออส
ซึ่งใน 1 วินาทีเดิน 18.5 ครั้ง นอกจากนี้ยังอัปเดตวันที่ให้ถูกต้องอีกด้วย
อินเทอร์รัพท์นี้มีการเรียกใช้อินเทอร์รัพท์หมายเลข 1CH ขึ้นมาทำงานด้วย ดังนั้น
หากเราต้องการอินเตอร์เซปไทเมอร์เพื่อทำบางสิ่งบางอย่าง 18.2 ครั้งใน
1 วินาที่แล้ว จึงเป็นการดีกว่าที่จะเลือกอินเตอร์เซปอินเทอร์รัพท์หมายเลข 1CH
แทนที่จะอินเตอร์เซปอินเทอร์รัพท์นี้
อินเทอร์รัพท์หมายเลข 9 :
คีย์บอร์ด (Keyboard) อินเทอร์รัพท์นี้เป็นอีกอินเทอร์รัพท์หนึ่งที่เป็นฮาร์ดแวร์อินเทอร์รัพท์ที่ถูก
อินเตอร์เซปได้ ด้วยโปรแกรมประเภทฝังตัวในหน่วยความจำ
(terminate and stay resident program, TSR)
อินเทอร์รัพท์หมายเลข 0AH : สงวนไว้ (Reserved)
อินเทอร์รัพท์หมายเลข 0BH - 0FH :
อินเตอร์รัพท์เหล่านี้ชี้ไปยังรูทีนของไบออสที่ชื่อ D_EOI (BIOS’ end of interrupt routine)
มีหน้าที่รีเซตและรีเทิร์นอินเทอร์รัพท์แฮนเดลอร์ (interrupt handler) ที่พอร์ต 20H
อินเทอร์รัพท์หมายเลข 10H บริการที่ 0 : กำหนดสกรีนโหมด (Set Screen Mode)
อินพุต
AH = 0
AL = โหมด
โหมดใน AL
ขนาดของการแสดงผล
จำนวนสี
อะแดปเตอร์
จำนวนหน้าสูงสุด
0H
40 X 25
B&W test
CGA,EGA,VGA
8
1H
40 X 25
Color test
CGA,EGA,VGA
8
2H
80 X 25
B&W test
CGA,EGA,VGA
4(CGA) 8(EGA,VGA)
3H
80 X 25
Color test
CGA,EGA,VGA
4(CGA) 8(EGA,VGA)
4H
320 X 200
4
CGA,EGA,VGA
1
5H
320 X 200
B&W
CGA,EGA,VGA
1
6H
640 X 200
2(on or off)
CGA,EGA,VGA
1
7H
80 X 25
Monochrome
MDA,EGA,VGA
1(MDA) 8(EGA,VGA)
8H
160 X 200
16
PCjr
1
9H
320X200
16
PCjr
1
AH
640X200
1
PCjr
1
DH
320X200
16
EGA,VGA
8
EH
640X200
16
EGA,VGA
4
FH
640X350
Monochrome
EGA,VGA
2
10H
640X350
16
EGA,VGA
2
11H
640X480
2
VGA
1
12H
640X480
16
VGA
1
13H
320X200
256
VGA
1
หมายเหตุ โหมด B และ C สงวนไว้ใช้ในอนาคต
อินเทอร์รัพท์หมายเลข 10H บริการที่ 1 : กำหนดชนิดของเคอร์เซอร์
อินพุต
AH = 1
CH = เส้นเริ่มต้นของเคอร์เซอร์
CL = เส้นสุดท้ายของเคอร์เซอร์
เอาต์พุต
เคอร์เซอร์ขนาดใหม่ตามที่กำหนด
อินเทอร์รัพท์หมายเลข 10H บริการที่ 2 : กำหนดตำแหน่งของเคอร์เซอร์
อินพุต
AH = 2
DH,Dl = แถว,คอลัมน์
BH = หมายเลขหน้า
อินเทอร์รัพท์หมายเลข 10H บริการที่ 3 : หาตำแหน่งคอร์เซอร์
อินพุต
AH = 3
BH = หมายเลขหน้า
เอาต์พุต
DH,DL = แถว,คอลัมน์ของเคอร์เซอร์
CH,CL = ขนาดปัจจุบันของเคอร์เซอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ 4 : อ่านตำแหน่งของไลต์เพน
อินพุต
AH = 4
เอาต์พุต
AH = 0 --> ไม่มีการกดสวิตช์บนไลต์เพน
AL = 1 --> DH,DL = แถว,คอลัมน์ของตำแหน่งที่ไลต์เพนอยู่
CH เป็นราสเตอร์ไลน์ (แนวดิ่ง)มีค่า 0 ถึง 199
BX เป็นพิกเซลคอลัมน์ (แนวราบ) มีค่า 0 ถึง 319,639
อินเทอร์รัพท์หมายเลข 10H บริการที่ 5 : กำหนดแอ็กทีฟเพจ
อินพุต
AH = 5
AL = 0 - 7(สกรีนโหมด 0,1) และ0 - 3(สกรีนโหมด 2,3)
เอาต์พุต
แอ็กทีฟเพจเปลี่ยนไปตามที่กำหนด
อินเทอร์รัพท์หมายเลข 10H บริการที่ 6 : เลื่อนแอ็กทีฟเพจขึ้น
อินพุต
AH = 6
AL = จำนวนบรรทัดว่างที่ส่วนล่างของจอภาพ (0 --> เลื่อนทั้งหน้าจอ)
CH,CL = แถว,คอลัมน์ของจุดมุมบนซ้ายของพื้นที่ที่จะเลื่อน
DH,DL = แถว,คอลัมน์ของจุดมุมล่างขวาของพื้นที่ที่จะเลื่อน
BH = แอตตริบิวต์ของบรรทัดว่าง สำหรับกำหนดสี
เช่น MOV BH,71H โดยสีพื้นคือเลข 7 และสีตัวอักษรคือเลข 1
0=ดำ 1=น้ำเงิน 2=เขียว 3=ฟ้า 4=แดง 5=ม่วง 6=ทอง 7=เทา
เอาต์พุต
แอกทีฟเพจเลื่อนขึ้นไปตามที่กำหนด
อินเทอร์รัพท์หมายเลข 10H บริการที่ 7 : เลื่อนแอ็กทีฟเพจลง
อินพุต
AH = 7
AL = จำนวนบรรทัดว่างที่ส่วนล่างของจอภาพ (0 --> เลื่อนทั้งหน้าจอ)
CH,CL = แถว,คอลัมน์ของจุดมุมบนซ้ายของพื้นที่ที่จะเลื่อน
DH,DL = แถว,คอลัมน์ของจุดมุมล่างขวาของพื้นที่ที่จะเลื่อน
BH = แอตตริบิวต์ของบรรทัดว่าง
เอาต์พุต
แอกทีฟเพจเลื่อนลงไปตามที่กำหนด
อินเทอร์รัพท์หมายเลข 10H บริการที่ 8 : อ่านแอตตริบิวต์และรหัสแอสกีของอักขระที่อยู่ที่ตำแหน่งของเคอร์เซอร์
อินพุต
AH = 8
BH = หมายเลขหน้า
เอาต์พุต
AL = รหัสแอสกีของอักขระที่อยู่ที่ตำแหน่งของเคอร์เซอร์
AH = แอตตริบิวต์ของอักขระที่อยู่ที่ตำแหน่งของเคอร์เซอร์ (เฉพาะแอลฟานัมเบอริกส์เท่านั้น)
อินเทอร์รัพท์หมายเลข 10H บริการที่ 9 : แอตตริบิวต์และอักขระที่ตำแหน่งของเคอร์เซอร์
อินพุต
AH = 9
AL = รหัสแอสกีของอักขระที่จะเขียน
BH = หมายเลขหน้า
BL = แอตตริบิวต์ (ในเท็กโหมด)
ค่าสี (ในกราฟโหมด)
CX = จำนวนอักขระที่จะเขียน
เอาต์พุต
อักขระถูกเขียนบนจอภาพที่ตำแหน่งเคอร์เซอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ A : เขียนเฉพาะ อักขระที่ตำแหน่งเคอร์เซอร์
อินพุต
AH = 0AH
AL = รหัสแอสกีของอักขระที่จะเขียน
BH = หมายเลขหน้า
CX = จำนวนอักขระที่จะเขียน
เอาต์พุต
อักขระถูกเขียนบนจอภาพที่ตำแหน่งเคอร์เซอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ B : กำหนดพาเลตต์ของสี
อินพุต
AH = 11
BH = หมายเลขพาเลตต์ของสี
BH = 0 --> สีพื้น
BH = 1 --> หมายเลขพาเลตต์ของสีโดย
0 = เขียว/แดง/เหลือง
1 = น้ำเงินแกมเขียว/ม่วง/ขาว
อินเทอร์รัพท์หมายเลข 10H บริการที่ C : เขียนจุด
อินพุต
AH = 12
AL = ค่าสี (0 ถึง 3)
CX = หมายเลขคอลัมน์ของจุดที่จะเขียน (0 ถึง 319,639)
DX = หมายเลขแถวของจุดที่จะเขียน (0 ถึง 199)
ข้อสังเกต ถ้าบิตที่ 7 ของAL เป็น 1 ค่าสีจะถูกกระทำทางบิตแบบ XORed กับค่าสีปัจจุบันของจุดนั้น
อินเทอร์รัพท์หมายเลข 10H บริการที่ D : อ่านจุด
อินพุต
AH = 13
CX = หมายเลขคอลัมน์ของจุดที่จะเขียน (0 ถึง 319,639)
DX = หมายเลขแถวของจุดที่จะเขียน (0 ถึง 199)
เอาต์พุต
AL = ค่าสี (0 ถึง 3)
ข้อสังเกต ถ้าบิตที่ 7 ของAL เป็น 1 ค่าสีจะถูกกระทำทางบิตแบบ XORed กับค่าสีปัจจุบันของจุดนั้น
อินเทอร์รัพท์หมายเลข 10H บริการที่ E : เขียนแบบเทเลไทป์บนแอ็กทีฟเพจ
อินพุต
AL = รหัสแอสกีของอักขระที่จะเขียน
BL = โหมดปัจจุบัน(ดู INT 10H บริการที่ 0)
BH = แอก็กทีฟเพจ
อินเทอร์รัพท์หมายเลข 10H บริการที่ FH : กำหนดพาเลตต์รีจิสเตอร์
ตาราง ก.1 ตารางแสดงค่าสีของดีฟอลต์พาเลตต์ (0 ถึง 15) ใน EGV
ค่าสี สี rgbRGB
0 ดำ 000000
1 น้ำเงิน 000001
2 เขียว 000010
3 น้ำเงินแกมเขียว 000011
4 แดง 000100
5 ม่วง 000101
6 น้ำตาล 010100
7 ขาว 000111
ค่าสี สี rgbRGB
8 เทาเข้ม 111000
9 น้ำเงินอ่อน 111001
10 เขียวอ่อน 111010
11 น้ำเงินแกมเขียวอ่อน 111011
12 แดงอ่อน 111100
13 ม่วงอ่อน 111101
14 เหลือง 111110
15 ขาวเข้ม 111111
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 0 : กำหนดพาเลตต์รีจิสเตอร์ (ทีละตัว)
อินพุต
AH = 10H
AL = 0
BL = พาเลตต์รีจิสเตอร์ที่จะกำหนด (0 ถึง 15)
BH = ค่าที่จะให้แก่พาเลตต์รีจิสเตอร์ (0 ถึง 63)
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 1 : กำหนดโอเวอร์สแกน (บอร์เดอร์) รีจิสเตอร ์
อินพุต
AH = 10H
AL = 1
BH = ค่าที่กำหนด (0 ถึง 63)
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 2 : กำหนดพาเลตต์รีจิสเตอร์ (ทุกตัว)
อินพุต
AH = 10H
AL = 1
ES:BX = แอดเดรสของตารางขนาด 17 ไบต์ที่เก็บผลการเลือกค่าสี
ไบต์ที่ 0 ถึง 15 เก็บผลการเลือกค่าสีสำหรับพาเลตต์รีจิสเตอร์ตัวที่ 0 ถึง 15
ไบต์ที่ 16 เก็บค่าสีใหม่ของโอเวอร์สแกน (บอร์เดอร์)
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 7 : อ่านพาเลตต์รีจิสเตอร์ (ทีละตัว)
อินพุต
AH = 10H
AL = 7
BL = พาเลตต์รีจิสเตอร์ที่จะอ่าน
เอาต์พุต
BH = ค่าในพาเลตต์รีจิสเตอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 8 : อ่านโอเวอร์สแกน (บอร์เดอร์) รีจิสเตอร์
อินพุต
AH = 10H
AL = 8
เอาต์พุต
BH = ค่าในโอเวอร์สแกน (บอร์เดอร์) รีจิสเตอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 10H : กำหนด DAC รีจิสเตอร์
อินพุต
AH = 10H
AL = 10H
BX = รีจิสเตอร์ที่กำหนด CH = ความเข้มของสีเขียว
CL = ความเข้มของสีน้ำเงิน
DH = ความเข้มของสีแดง
อินเทอร์รัพท์หมายเลข 10H บริการที่ 10H ฟังก์ชั่นที่ 12H : กำหนด DAC รีจิสเตอร ์
อินพุต
AH = 10H
AL = 10H
BX = รีจิสเตอร์แรกที่กำหนด (0 ถึง 255)
CX = จำนวนรีจิสเตอร์ที่กำหนด (1 ถึง 256)
ES:DX = แอสเดรสของตารางความเข้มสีโดยที่ DAC รีจิสเตอร์แต่ละตัวใช้ 3 ไบต์
(ใช้ แต่ 6 บิตล่างของแต่ละไบต์) ตารางจะกำหนดในลักษณะแดง เขียว น้ำเงิน แดง เขียว น้ำเงิน....
อินเทอร์รัพท์หมายเลข 10H บริการที่10H ฟังก์ชั่นที่ 13H : เลือกโหมดของหน้าสี
อินพุต
AH = 10H
AL = 13H
BL = 0 เลือกโหมดของหน้าสี
BH = 0 เลือก 4 DAC เพจรีจิสเตอร์จาก 64 รีจิสเตอร์
BH = 1 เลือก 16 DAC เพจรีจิสเตอร์จาก 16 รีจิสเตอร์
BL = 1 เลือกแอ็กทีฟคัลเลอร์เพจ
สำหรับโหมดที่มีเพียง 4 เพจ
BH = 0 เลือกบล็อก 1 ของ 64 DAC เพจรีจิสเตอร์
BH = 1 เลือกบล็อก 2 ของ 64 DAC เพจรีจิสเตอร์
BH = 2 เลือกบล็อก 3 ของ 64 DAC เพจรีจิสเตอร์
BH = 3 เลือกบล็อก 4 ของ 64 DAC เพจรีจิสเตอร์
สำหรับโหมดที่มี 16 เพจ
BH = 0 เลือกบล็อก 1 ของ 16 DAC เพจรีจิสเตอร์
BH = 1 เลือกบล็อก 2 ของ 16 DAC เพจรีจิสเตอร์
:
:
BH = 14 เลือกบล็อก 15 ของ 16 DAC เพจรีจิสเตอร์
BH = 15 เลือกบล็อก 16 ของ 16 DAC เพจรีจิสเตอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ 11H : คาเรกเตอร์เจนเนอร์เตอร์
อินเทอร์รัพท์หมายเลข 10H บริการที่ 12H : เลือก
อินพุต
AH = 10H
BL = 30H
AL = 0 --> 200 สกรีนสแกนไลน์
= 1 --> 350 สกรีนสแกนไลน์
= 2 --> 400 สกรีนสแกนไลน์
อินเทอร์รัพท์หมายเลข 11H : ตรวจสอบอุปกรณ์ที่ต่อเข้ากับเครื่อง
อินพุต
อยู่ในบิตต่าง ๆ ของ AX
บิตที่
ความหมาย
15,14
จำนวนพรินเตอร์
13
ไม่ได้ใช้
12
=1 ถ้ามีเกมอะแคปเตอร์ต่ออยู่
11,10,9
จำนวน RS 232 การ์ดที่ติดตั้งแล้ว
8
ไม่ได้ใช้
7,6
จำนวนดิสเกตต์ไดรฟ์(ถ้าบิตที่ 0=1)
00 --> 1 ; 01 --> 2 ; 10 --> 3 ; 11 --> 4
5,4
วีดีโอโหมด
(00 ไม่ได้ใช้ 01= 40x25 Color Card 10 80x 25
Color Card , 11 = 80x25 Monochrome)
3,2
ขนาดของแรมบนแมนบอร์ด
(00 = 16K , 01 = 32K , 10 = 48K , 11 = 64K)
1
ไม่ได้ใช้
0
= 1 ถ้ามีดิสเกตต์ไดรฟ์ต่ออยู่
อินเทอร์รัพท์หมายเลข 12H : ตรวจสอบขนดของหน่วยความจำ
อินพุต
AX = จำนวนบล็อกขนาด 1 K ที่ต่อเนื่องกันในหน่วยความจำ
อินเทอร์รัพท์หมายเลข 12H บริการที่ 0 : รีเซตดิสก์
อินพุต
AH = 0
เอาต์พุต
CY = 0 --> AH = 0 , สำเร็จ
CY = 1 --> AH = รหัสความผิดพลาด (ดูบริการที่ 1)
ข้อสังเกต สำหรับฮาร์ดดิสก์ : DL = 80H --> รีเซตดิสเกตต์
DL = 81H --> รีเซตดิสเกตต์
อินเทอร์รัพท์หมายเลข 13H บริการที่ 1 : รีเซตดิสก์
อินพุต
AH = 0
เอาต์พุต
รหัสความผิดพลาดเกี่ยวกับดิสก์
ค่าใน AL
ความหมาย
00
ไม่มีข้อผิดพลาด
01
มีการส่งคำสั่งที่ไม่ถูกต้องไปยังดิสก์คอนโทรลเลอร์
02
ไม่พบแอสเดรสตามที่ระบุ
11,10,9
จำนวน RS 232 การ์ดที่ติดตั้งแล้ว
03
ดิสเกตต์ในไดรฟ์ปัจจุบันติดแถบป้องกันการบันทึกอยู่
04
ไม่พบเซกเตอร์ของดิสก์เกตต์ในไดรฟ์ปัจจุบัน
05
รีเซตล้มเหลว
07
ไดรฟ์พารามิเตอร์ไม่ถูกต้อง
09
สิ้นสุดของการ DMA ระหว่างเซกเมนต์
0B
พบแทร็กเสีย
10H
การตรวจสอบไม่ถูกต้อง
11H
ข้อมูลได้รับการแก้ไขอย่างไม่ถูกต้อง
20H
ดิสก์คอนโทรลเลอร์ทำงานล้มเหลว
40H
ไม่สามารถค้นหาคำสั่งได้
80H
ไม่มีการตอบสนองจากดิสก์เกตต์ในไดรฟ์ปัจจุบัน
0BBH
พบข้อผิดพลาดที่ไม่มีการนิยามมาก่อน
0FFH
ไม่สามารถรับรู้คำสั่งได้
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้วค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 2 : อ่านข้อมูลจากเซกเตอร์เข้ามาเก็บไว้ในหน่วยความจำ
อินพุต
AH = 2
DL = หมายเลขไดรฟ์
DH = หมายเลขของหัวอ่าน
CH = หมายเลขของแทร็กหรือไซลินเดอร์
CL = บิตที่ 7,6 เก็บ 2 บิตสูงของหมายเลขไซลินเดอร์ซึ่งมีขนาด 10 บิต
CL = บิตที่ 0 ถึง 5 เก็บหมายเลขเซกเตอร์
AL = จำนวนเซกเตอร์ที่จะอ่าน
แผ่นฟลอปปี้ 1 ถึง 8
ฮาร์ดดิสก์ 1 ถึง 80H
ES:BX = แอดเดรสของบัฟเฟอร์จะอ่านและเขียน
เอาต์พุต
CY = 0 --> AL = จำนวนเซกเตอร์ที่อ่าน
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้วค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 3 : เขียนข้อมูลลงในเซกเตอร์ของแผ่นดิสก์
อินพุต
AH = 3
DL = หมายเลขไดรฟ์
DH = หมายเลขของหัวอ่าน
CH = หมายเลขของแทร็กหรือไซลินเดอร์
CL = บิตที่ 7,6 เก็บ 2 บิตสูงของหมายเลขไซลินเดอร์ซึ่งมีขนาด 10 บิต
CL = บิตที่ 0 ถึง 5 เก็บหมายเลขเซกเตอร์
AL = จำนวนเซกเตอร์ที่จะอ่าน
แผ่นฟลอปปี้ 1 ถึง 8
ฮาร์ดดิสก์ 1 ถึง 80H
ES:BX = แอดเดรสของบัฟเฟอร์จะอ่านและเขียน
เอาต์พุต
CY = 0 --> AL = จำนวนเซกเตอร์ที่เขียน
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้ว ค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 4 : ตรวจสอบเซกเตอร
อินพุต
AH = 4
DL = หมายเลขไดรฟ์
DH = หมายเลขของหัวอ่าน
CH = หมายเลขของแทร็กหรือไซลินเดอร์
CL = บิตที่ 7,6 เก็บ 2 บิตสูงของหมายเลขไซลินเดอร์ซึ่งมีขนาด 10 บิต
CL = บิตที่ 0 ถึง 5 เก็บหมายเลขเซกเตอร์
AL = จำนวนเซกเตอร์ที่จะอ่าน
แผ่นฟลอปปี้ 1 ถึง 8
ฮาร์ดดิสก์ 1 ถึง 80H
ES:BX = แอดเดรสของบัฟเฟอร์จะอ่านและเขียน
เอาต์พุต
CY = 0 --> AL = จำนวนเซกเตอร์ที่เขียน
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้ว ค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 8 : ตรวจสอบเซกเตอร์ บริการนี้ใช้เฉพาะฮาร์ดดิสก์ของเครื่อง PS/2
อินพุต
AH = 8
DL = หมายเลขไดรฟ์
เอาต์พุต
DL = จำนวนไดรฟ์ที่ต่อเข้ากับดิสก์คอนโทรลเลอร์
DH = จำนวนหัวอ่านมากสุด
CH = จำนวนไซลินเดอร์มากสุด
CL = บิตที่ 7,6 เก็บ 2 บิตสูงของหมายเลขไซลินเดอร์ซึ่งมีขนาด 10 บิต
CL = บิตที่ 0 ถึง 5 บิตสูงของหมายเลขเซกเตอร์
BL สำหรับดิสก์เกตต์ที่ใช้กับเครื่อง PS/2 เท่านั้น
= 1 --> ไดรฟ์ความจุ 360 กิโลไบต์
= 2 --> ไดรฟ์ความจุ 1.2 เมกะไบต์
= 3 --> ไดรฟ์ความจุ 720 กิโลไบต์
= 4 --> ไดรฟ์ความจุ 1.44 เมกะไบต์
ES:BX = แอดเดรสของบัฟเฟอร์จะอ่านและเขียน
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้วค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 0AH และ 0BH : สงวนไว้
อินเทอร์รัพท์หมายเลข 13H บริการที่ 0CH : ตรวจสอบเซกเตอร์
บริการนี้ช้ได้เฉพาะกับฮาร์ดดิสก์
อินพุต
AH = 0CH
DH = หมายเลขหัวอ่าน
DL = หมายเลขของไดรฟ์ (80 ถึง 87H)
CH = หมายเลขของแทร็กหรือไซลินเดอร์
CL = บิตที่ 7,6 เก็บ 2 บิตสูงของหมายเลขไซลินเดอร์ซึ่งมีขนาด 10 บิต
CL = บิตที่ 0 ถึง 5 เก็บหมายเลขเซกเตอร์
เอาต์พุต
CY = 0 --> AL = 0 สำเร็จ
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้ว ค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 0DH : รีเซตดิสก์สลับกัน
อินเทอร์รัพท์หมายเลข 13H บริการที่ 0EH และ 0FH : สงวนไว้
อินเทอร์รัพท์หมายเลข 13H บริการที่ 10H : ตรวจสอบความพร้อมของไดรฟ์
อินเทอร์รัพท์หมายเลข 13H บริการที่ 11H : คาลิเบรตไดรฟ์ของฮาร์ดดิสก์ใหม่
บริการนี้ใช้ได้เฉพาะกับฮาร์ดดิสก์
อินพุต
AH = 11H (อ่าน)
DL = หมายเลขของไดรฟ์ (80 ถึง 87H)
เอาต์พุต
CY = 0 --> AL = 0 สำเร็จ
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง
ฮาร์ดดิสก์ สำหรับฮาร์ดดิสก์แล้วค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 12H : วินิจฉัยฮาร์ดดิสก์
บริการนี้ใช้ได้เฉพาะกับฮาร์ดดิสก์
อินพุต
AH = 12H (วินิจฉัยแรม)
AH = 13H (วินิจฉัยไดรฟ์)
AH = 14H (วินิจฉัยดิสก์คอนโทรลเลอร์)
DL = หมายเลขของไดรฟ์ (80 ถึง 87H)
เอาต์พุต
CY = 0 --> AL = 0 สำเร็จ
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้ว ค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 13H บริการที่ 19H : พักการทำงานของหัวอ่านฮาร์ดดิสก์ (Park)
บริการนี้ใช้ได้เฉพาะกับฮาร์ดดิสก์ของเครื่อง PS/2
อินพุต
DL = หมายเลขของไดรฟ์
เอาต์พุต
CY = 0 --> AL = 0 สำเร็จ
CY = 1 --> AH = รหัสบอกความผิดพลาดของดิสก์ (ดูบริการที่ 1)
ข้อสังเกต DL = หมายเลขไดรฟ์ ; ถ้าบิตที่ 7 เป็น 1 หมายถึง ฮาร์ดดิสก์
สำหรับฮาร์ดดิสก์แล้ว ค่าใน DL เป็นได้ตั้งแต่ 80H ถึง 87H
อินเทอร์รัพท์หมายเลข 14H ,AH = 0 : อินนิเชียลพอร์ต RS 232
อินพุต
AH = 0
DL = ค่าในบิตต่างๆ มีความหมายดังนี้
บิตที่ 0,1 = ขนาดของเวิร์ค โดย
01 --> 7 บิต
11 --> 8 บิต
บิตที่ 2 = จำนวนสตอปบิต โดย
0 --> 1 สตอปบิต
1 --> 2 สตอปบิต
บิตที่ 3,4 = พาริตี้ โดย
00 --> ไม่มี (none)
01 --> คี่ (odd)
11 --> คู่ (even)
บิตที่ 5,6,7 = Baud rate โดย
ค่า 000 --> 110
001 --> 150
010 --> 300
011 --> 600
100 --> 1200
101 --> 2400
110 --> 4800
111 --> 9600
อินเทอร์รัพท์หมายเลข 14H ,AH = 1 : ส่งอักขระไปยังซีเรียลพอร์ต
อินพุต
AH = 1
AL = รหัสแอสกีของอักขระที่จะส่งไป
เอาต์พุต
ถ้าบิตที่ 7 ของ AH = 1 แสดงว่า ล้มเหลว
ถ้าบิตที่ 7 ของ AH = 0 แล้วบิตที่ 0 ถึง 6 เก็บสถานะ (ดู INT 14H ,AH = 3)
อินเทอร์รัพท์หมายเลข 14H ,AH = 2 : ส่งอักขระไปยังซีเรียลพอร์ต
อินพุต
AH = 2
เอาต์พุต
AL = รหัสแอสกีของอักขระที่จะส่งไป
AH = 0 แสดงว่า สำเร็จ
= ค่าอื่น แล้ว AH เก็บรหัสของความผิดพลาด (ดู INT 14H ,AH = 3)
อินเทอร์รัพท์หมายเลข 14H ,AH = 3 : ตรวจสอบเซกเตอร์
อินพุต
AH = 3
เอาต์พุต
AH = ค่าในบิตต่าง ๆ ถ้าถูกเซตจะมีความหมายดังนี้
บิตที่ 7 --> Time out
บิตที่ 6 --> Shift register empty
บิตที่ 5 --> Holding register empty
บิตที่ 4 --> Break detected
บิตที่ 3 --> Framing error
บิตที่ 2 --> Parity error
บิตที่ 1 --> Overrun error
บิตที่ 0 --> Data ready
AL = ค่าในบิตต่าง ๆ มีความหมายดังนี้
บิตที่ 7 --> Received line signal detect
บิตที่ 6 --> Ring indicator
บิตที่ 5 --> Data set ready
บิตที่ 4 --> Clear to send
บิตที่ 3 --> Delta receive line signal detect
บิตที่ 2 --> Trailing edge ring detector
บิตที่ 1 --> Delta data set ready
บิตที่ 0 --> Delta clear to send
อินเทอร์รัพท์หมายเลข 15H : คาสเซ็ตต์อินพุตและเอาต์พุต
อินพุต
AH = 0 --> เปิดมอเตอร์ของคาสเซ็ตต์
AH = 1 --> ปิดมอเตอร์ของคาสเซ็ตต์
AH = 2 --> อ่านบล็อกของข้อมูล (ขนาด 1 หรือ 256 ไบต์)
แล้วเก็บวืที่ ES:BXโดย CX = จำนวนไบต์ที่อ่าน
AH = 3 --> อ่านบล็อกของข้อมูล (ขนาด 1 หรือ 256 ไบต์)
แล้วเก็บวืที่ ES:BXโดย CX = จำนวนไบต์ที่อ่าน
เอาต์พุต
DX = จำนวนไบต์ที่อ่านได้จริง
CY = 0 --> AL = 0 สำเร็จ
CY = 1 --> AH = รหัสบอกความผิดพลาด โดย
= 01 --> การตรวจสอบ CRC ผิดพลาด (cyclic redundance check, CRC)
= 02 --> มีข้อมูลสูญหายระหว่างทาง
= 03 --> ไม่พบข้อมูล
ในไบออสรุ่นใหม่ ๆ มีการเพิ่มหน้าทึความรับผิดชอบให้กับินเตอร์รัปต์นี้อันได้แก่
สนับสนุนการใช้จอยสติก การเปลี่ยนโหมดการทำงานของโปรดเซสเซอร์ (โหมดปกติหรือโปรเท็กซ์โหมด)
การใช้เมาส์ และพารามิเตอร์ของไบออส
อินเทอร์รัพท์หมายเลข 16H บริการที่ 0 : อ่านคีย์จากคีย์บอร์ด
อินพุต
AH = 0
เอาต์พุต
AH = รหัสสแกน
AL = รหัสแอสกี
ตัวอย่าง
MOV AH,00
INT 16
MOV AH,4C
INT 21
อินเทอร์รัพท์หมายเลข 16H บริการที่ 1 : ตรวจสอบว่าคีย์บอร์ดพร้อมที่จะถูกอ่านหรือไม่
อินพุต
AH = 2
เอาต์พุต
แฟล็กศูนย์ = 0 --> บัฟเฟอร์ว่าง
แฟล็กศูนย์ = 1 --> AH = รหัสสแกน
AL = รหัสแอสกี
อินเทอร์รัพท์หมายเลข 16H บริการที่ 2 : หาคีย์บอร์ดสถานะคีย์บอร์ด
อินพุต
AH = 2
เอาต์พุต
AL = ไบต์บอกสถานะของคีย์บอร์ด
อินเทอร์รัพท์หมายเลข 17H บริการที่ 0 : พิมพ์อักขระที่เก็บใน AL ออกพรินเตอร์
อินพุต
AH = 0
AL = อักขระที่จะพิมพ์
DX = หมายเลขพรินเตอร์ (0,1,2)
เอาต์พุต
AH = 1 --> printer time out
อินเทอร์รัพท์หมายเลข 17H บริการที่ 1 : อินนิเชียลพรินเตอร์พอร์ต
อินพุต
AH = 1
DX = หมายเลขพรินเตอร์ (0,1,2)
เอาต์พุต
AH = สถานะของพรินเตอร์
ค่าในบิตต่าง ๆ ของ AH ถ้าถูกเซตจะมีความหมายดังนี้
บิตที่ 7 --> พรินเตอร์ไม่ว่าง
บิตที่ 6 --> Ackmowledge
บิตที่ 5 --> กระดาษหมด
บิตที่ 4 --> Selected
บิตที่ 3 --> I/O error
บิตที่ 2 --> ไม่ได้ใช้
บิตที่ 1 --> ไม่ได้ใช้
บิตที่ 0 --> Time out
อินเทอร์รัพท์หมายเลข 17H บริการที่ 2 : อ่านสถานะของพรินเตอร์เข้ามาเก็บไว้ใน AH
อินพุต
AH =
DX = หมายเลขพรินเตอร์ (0,1,2)
เอาต์พุต
AH = สถานะของพรินเตอร์ (เหมือน INT 17H บริการที่ 1)
อินเทอร์รัพท์หมายเลข 18H : Resident BASIC
อินเทอร์รัพท์นี้ใช้ติดตั้ง ROM Resident BASIC ในเครื่องพีซี
อินเทอร์รัพท์หมายเลข 19H : บูตแสตรป (Bootstrap)
อินเทอร์รัพท์นี้ใช้บูตเครื่อง (ลองเรียกใช้บริการนี้ด้วยดีบัก)
อินเทอร์รัพท์หมายเลข 1AH บริการที่ 0 : อ่านเวลาของวัน
อินพุต
AH = 0
เอาต์พุต
CX = เวิร์ดสูงของ timer count
DX = เวิร์ดต่ำของ timer count
AL = 0 ถ้าไทเมอร์ยังไม่เกิน 24 ชั่วโมงนับตั้งแต่การอ่านครั้งสุดท้าย
ข้อสังเกต timer count มีค่าเพิ่มขึ้นชั่งโมงละ 65,536
อินเทอร์รัพท์หมายเลข 1AH บริการที่ 1 : กำหนดเวลาของวัน
อินพุต
AH = 0
CX = เวิร์ดสูงของ TIMER COUNT
DX = เวิร์ดต่ำของ TIMER COUNT
ข้อสังเกต TIMER COUNT มีค่าเพิ่มขึ้นชั่งโมงละ 65,536
อินเทอร์รัพท์หมายเลข 1BH : แอดเดรสของคีย์บอร์ดเบรก
อินเทอร์รัพท์หมายเลข 1CH : ไทเมอร์ติกอินเทอร์รัพท์ (Timer Tick Interrupt)
อินเทอร์รัพท์หมายเลข 1DH : ตารางวีดิโอพารามิเตอร์
อินเทอร์รัพท์หมายเลข 1EH : ดิสเกตต์พารามิเตอร์
อินเทอร์รัพท์หมายเลข 1FH : นิยามอักขระกราฟิก
อินเทอร์รัพท์หมายเลข 20H : เทอร์มิเนตโปรแกรม
โปรแกรมส่วนใหญ่จบการทำงานด้วยอินเทอร์รัพท์นี้
อินเทอร์รัพท์หมายเลข 21H
เป็นอินเทอร์รัพท์ที่เป็นที่รวมของบริการต่าง ๆ ของดอสเอาไว้ การเรียกใช้บริการ
ต่าง ๆ ในอินเทอร์รัพท์นี้ทำได้โดยการโหมดหมายเลขบริการไว้ไน AH
และรีจิสเตอร์ต่าง ๆ ตามรายละเอียดต่อไปนี้
อินเทอร์รัพท์หมายเลข 21H บริการที่ 0 : เทอร์มิเนตโปรแกรม
อินพุต
AH = 0
อินเทอร์รัพท์หมายเลข 21H บริการที่ 1 : รับข้อมูลจากคีย์บอร์ด (คีย์บอร์ดอินพุต)
อินพุต
AH = 1
เอาต์พุต
AL = รหัสแอสกีของอักขระที่กดซึ่งจะถูกแสดงบนจอภาพให้เห็นด้วย
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2 : ส่งอักขระไปยังจอภาพ
อินพุต
AH = 2
DL = รหัสแอสกีของอักขระ
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3 : รับข้อมูลจากอุปกรณ์ช่วยมาตรฐาน (Standard Auxiliary Device)
อินพุต
AH = 3
เอาต์พุต
AL = รหัสแอสกีของอักขระ
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4 : ส่งอักขระไปยังอุปกรณ์ช่วยมาตรฐาน
อินพุต
AH = 4
DL = รหัสแอสกีของอักขระ
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5 : ส่งอักขระไปยังพรินเตอร์
อินพุต
AH = 5
DL = รหัสแอสกีของอักขระ
อินเทอร์รัพท์หมายเลข 21H บริการที่ 6 : คอนโทรล I/O
อินพุต
AH = 6
DL = รหัสแอสกีของอักขระ
เอาต์พุต
DL = FF --> ส่งอักขระไปยังคอนโทรลโดยไม่แสดงบนจอภาพให้เห็น
อินเทอร์รัพท์หมายเลข 21H บริการที่ 7 : รับข้อมูลจากคอนโทรลโดยไม่แสดงบนจอภาพให้เห็น
อินพุต
AH = 7
เอาต์พุต
AL = รหัสแอสกีของอักขระที่กด
หมายเหตุ บริการนี้ไม่ตรวจสอบการกด < Ctrl > - < Break > หรือ - < C >
อินเทอร์รัพท์หมายเลข 21H บริการที่ 8 : รับข้อมูลจากคอนโทรลโดยไม่แสดงบนจอภาพให้เห็น
เหมือนบริการที่ 7 แต่เพิ่มการตรวจสอบการกด < Ctrl - C > หรือ < Ctrl - Break >
อินพุต
AH = 8
เอาต์พุต
AL = รหัสแอสกีของอักขระที่กด
อินเทอร์รัพท์หมายเลข 21H บริการที่ 9 : พิมพ์สตริงก์
อินพุต
DS:DX ชี้ไปยังสตริงก์ที่ลงท้ายด้วยเครื่องหมาย ‘$’
AH = 9
อินเทอร์รัพท์หมายเลข 21H บริการที่ A : สตริงก์อินพุต
อินพุต
AH = 0AH
[DS:DX] = ขนาดของบัฟเฟอร์
เอาต์พุต
สตริงก์ที่รับเข้ามาทางคีย์บอร์ดถูกเก็บไว้ในบัฟเฟอร์ซึ่งอยู่ที่ DS:DX
อักขระที่กดจะถูกแสดงบนจอภาพให้เห็นด้วย
หมายเหตุ บริการนี้ตรวจสอบการกด < Ctrl > - < Break > หรือ - < C >
อินเทอร์รัพท์หมายเลข 21H บริการที่ 0BH : ตรวจสอบสถานะของอินพุต
อินพุต
AH = 0BH
เอาต์พุต
AL = FF --> มีข้อมูลถูกอ่านเข้ามาแล้ว
AL = 00 --> ไม่มีข้อมูลใดถูกอ่านเข้ามา
หมายเหตุ บริการนี้ตรวจสอบการกด < Ctrl > - < Break > หรือ - < C >
อินเทอร์รัพท์หมายเลข 21H บริการที่ 0CH : เคลียร์คีย์บอร์ดบัฟเฟอร์และเรียกใช้บริการ
อินพุต
AH = 0CH
AL = หมายเลขบริการที่เกี่ยวกับคีย์บอร์ด
เอาต์พุต
แสดงผลตามบริการที่เกี่ยวกับคีย์บอร์ดนั้น ๆ
หมายเหตุ บริการนี้ตรวจสอบการกด < Ctrl > - < Break > หรือ - < C >
อินเทอร์รัพท์หมายเลข 21H บริการที่ 0DH : รีเซตดิสก์
อินพุต
AH = 0DH
อินเทอร์รัพท์หมายเลข 21H บริการที่ 0EH : รีเซตดิสก์
อินพุต
AH = 0EH
DL = หมายเลขไดรฟ์
DL = 0 --> A
DL = 1 --> B และอื่น ๆ
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 0FH : เปิดไฟล์ที่มีอยู่แล้วในดิสก์
อินพุต
DS:DX ชี้ไปยัง FCB
AH = 0FH
เอาต์พุต
AL = 0 --> สำเร็จ
AL = FF --> ล้มเหลว
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 10H : ปิดไฟล์
อินพุต
DS:DX ชี้ไปยัง FCB
AH = 10H
เอาต์พุต
AL = 0 --> สำเร็จ
AL = FF --> ล้มเหลว
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 11H : ค้นหาไฟล์ที่ตรงกันเป็นไฟล์แรก
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 11H
เอาต์พุต
AL = 0 --> สำเร็จ และ DTA เก็บ FCB ที่ตรงกันเท่านั้น
AL = FF --> ล้มเหลว
ข้อสังเกต DTA อยู่ที่ CS-0080 ในไฟล์ .com
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 12H : ค้นหาไฟล์ต่อไปที่ตรงกัน
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 12H
เอาต์พุต
AL = 0 --> สำเร็จ และ DTA เก็บ FCB ที่ตรงกันนั้น
AL = FF --> ล้มเหลว
ข้อสังเกต ใช้บริการนี้หลังจากใช้บริการที่ 11H แล้ว
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 13H : ลบไฟล์
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 13H
เอาต์พุต
AL = 0 --> สำเร็จ
AL = FF --> ล้มเหลว
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 14H : อ่านไฟล์แบบซีเควนเชียล
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 14H
เอาต์พุต
เรคอร์ดที่ของมาถูกเก็บไว้ใน DTA
AL = 0 สำเร็จ และ DTA เก็บ FCB ที่ตรงกันนั้น
AL = 1 อ่านถึงท้านไฟล์แล้ว และไม่มีข้อมูลให้อ่านอีก
AL = 2 เซกเมนต์ของ DTA มีขนาดเล็กไปสำหรับเรคอร์ดนั้นๆ
AL = 3 อ่านถึงท้ายไฟล์แล้ว และเรคอร์ดที่เหลือมีค่า 0
ข้อสังเกต แอดเดรสของเรคอร์ดค่าเพิ่งขึ้น
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 15H : เขียนไฟล์แบบซีเควนเชียล
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 15H
บล็อกและเรคอร์ดปัจจุบันกำหนดใน FCB
เอาต์พุต
หนึ่งเรคอร์ดถูกอ่านจาก DTA และถูกเขียนลงไฟล์
AL = 0 สำเร็จ
AL = 1 ดิสก์เต็ม
AL = 2 เชกเมนต์ของ DTA มีขนาดเล็กไปสำหรับเรคอร์ดนั้นๆ
ข้อสังเกต แอดเดรสของคอร์ดมีค่าเพิ่มขึ้น
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 16H : ครีเอดไฟล์
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 16H
เอาต์พุต
AL = 0 สำเร็จ
AL = FF ไดเรดทอรีเต็ม
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 17H : เปลี่ยนชื่อไฟล์
อินพุต
DS:DX ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 17H
เอาต์พุต
AL = 0 สำเร็จ และ DTA เก็บ FCB ที่ตรงกันนั้น
AL = FF ล้มเหลว
ข้อสังเกต FCB ถูกเปลี่ยนแปลงโดยชื่อไฟล์ใหม่จะเก็บไว้ห่างจากจุดสิ้นสุด
ชื่อไฟล์แรก 6 ไบต์ ซึ่งก็ต่อคือที่แอดเดรส DS:DX + 11H
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 18H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 19H : หาดิสก์ปัจจุบัน
อินพุต
AH = 19H
เอาต์พุต
AL = ดิสก์ปัจจุบัน (0 = A, 1 = B,และอื่นๆ)
อินเทอร์รัพท์หมายเลข 21 H บริการที่ 1AH : กำหนดตำแหน่ง DTA
อินพุต
DS:DX ชี้ไปที่แอดเดรสใหม่ของ DTA
AH = 1AH
ข้อสังเกต DTA = Disk Transfer Area ซึ่งเป็นพื้นที่ข้อมูลที่ถูกใช้โดยบริการของ
FCB ตามค่าดีฟอลต์แล้ว DTA มีขนาด 128 ไบต์ และเริ่มที่แอดเดรส CS:0080 ใน PSP
อินเทอร์รัพท์หมายเลข 21H บริการที่ 1BH : ข้อมูล FAT ของดีฟอลต์ไดรฟ์
อินพุต
AH = 1BH
เอาต์พุต
DS:BX ชี้ไปยัง FAT Byte
DX = จำนวนคลัสเตอร์
AL = จำนวนเซกเตอร์ใน 1 คลัสเตอร์
CX = ขนาดของเซกเตอร์ (512 ไบต์)
ข้อสังเกต หน่วยเล็กที่สุดที่ใช้ในการเก็บไฟล์ คือ คลัสเตอร์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 1CH : ข้อมูล FAT ของไดรฟ์ที่ระบุ
อินพุต
AH = 1CH
DL = หมายเลขของไดรฟ์ (0= ดีฟอลค์ไดรฟ์ 1 = A…)
เอาต์พุต
DS:BX ชี้ไปยัง FAT Byte
DX = จำนวนคลัสเตอร์
AL = จำนวนเซกเตอร์ใน 1 คลัสเตอร์
CX = ขนาดของเซกเตอร์ (512 ไบต์)
ข้อสังเกต หน่วยเล็กที่สุดที่ใช้ในการเก็บไฟล์ คือ คลัสเตอร์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 1DH ถึง 20H : ใช้งานภายใน DOS
อินเทอร์รัพท์หมายเลข 21H บริการที่ 21H : อ่านไฟล์แบบแรนคอม
อินพุต
AH = 21H
เอาต์พุต
AL = 00 --> สำเร็จ
= 01 --> อ่านถึงท้ายไฟล์แล้ว, ไม่มีข้อมูลให้อ่านอีก
= 02 --> เซกเมนต์ของ DTA มีขนาดเล็กไปสำหรับเรคคอร์ดนั้นๆ
= 03 --> อ่านถึงท้ายไฟล์ และเรคอร์ดที่เหลือแต่ค่า 0
อินเทอร์รัพท์หมายเลข 21H บริการที่ 22H : อ่านไฟล์แบบเรนดอม
อินพุต
DS:DX ชี้ไปยัง FCB ที่เปิดแล้ว
กำหนดเรนดอมเรคอร์ดฟิลด์แบบของ FCB ที่แอดเดรส DS:DX +33 และ DS:DX + 35
AH = 21H
เอาต์พุต
AL = 00 --> สำเร็จ
= 01 --> ดิสก์เต็ม
= 02 --> เซกเมนต์ของ DTA มีขนาดเล็กไปสำหรับเรคคอร์ดนั้นๆ
อินเทอร์รัพท์หมายเลข 21H บริการที่ 23H : ขนาดของไฟล์
อินพุต
DS:DH ชี้ไปยัง FCB ที่ยังไม่เปิด
AH = 23H
เอาต์พุต
AL = 00 --> สำเร็จ
= FF --> ไม่พบไฟล์ที่เข้าคู่กับ FCB
เรนดอมเรคอร์ดฟิลด์บอกขนาดของไฟล์ในหน่วยเรคอร์ด (ปัดเศษ)
อินเทอร์รัพท์หมายเลข 21H บริการที่ 24H : กำหนดเรนดอมเรคอร์ดฟิลด์
อินพุต
DS:DH ชี้ไปยัง FCB ที่ยังเปิด
AH = 24H
เอาต์พุต
แรนดอมเรคอร์ดฟิลด์จับคู่กับบล็อกและเรคอร์ดปัจจุบัน
อินเทอร์รัพท์หมายเลข 21H บริการที่ 25H : กำหนดอินเทอร์รัพท์เวกเตอร์
อินพุต
AH = 25H
AL = หมายเลขอินเทอร์รัพท์
DS:DX = แอดเดรสใหม่ของรูทีนตอบสนองการอินเทอร์รัพท์ของเลขหมายอินเทอร์รัพท์นั้น
ข้อสังเกต อินเทอร์รัพท์นี้ช่วยในหารอินเตอร์เซปอินเทอร์รัพท์เวกเตอร์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 26H : สร้าง PSP ใหม่
อินเทอร์รัพท์หมายเลข 21H บริการที่ 27H : อ่านบล็อกแบบแรนดอม
อินพุต
DS:DH ชี้ไปยัง FCB ที่ยังเปิดแล้ว
กำหนดแรนดอมเรคอร์ดฟิลด์ของ FCB ที่แอดเดรส DS:DX + 33 และ DS:DX + 35
AH = 27H
เอาต์พุต
AL = 00 --> สำเร็จ
= 01 --> อ่านถึงไฟล์ท้ายแล้ว และไม่มีข้อมูลให้อ่านอีก
= 02 --> เซกเมนต์ของ DTA มีขนากเล็กไปสำหรับเรคอร์ดนั้นๆ
= 03 --> อ่านถึงท้ายไฟล์แล้ว และเรคคอร์ดที่เหลือแต่ค่า 0
CX = จำนวนเรคอร์ดที่อ่านได้
แรนดอมเรคอร์ดฟิลด์จะทำการแอ็กเซสเรคอร์ดถัดไป
ข้อสังเกต บัฟเฟอร์ของข้อมูลที่ใช้โดยบริการของ FCB ก็คือ DTA นั่นเอง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 28H : เขียนไฟล์แบบแรนดอม
อินพุต
DS:DH ชี้ไปยัง FCB ที่ยังเปิดแล้ว
กำหนดแรนดอมเรคอร์ดฟิลด์ของ FCB ที่แอดเดรส DS:DX + 33 และ DS:DX + 35
AH = 28H
เอาต์พุต
AL = 00 --> สำเร็จ
= 01 --> ดิสก์เต็ม
= 02 --> เซกเมนต์ของ DTA มีขนากเล็กไปสำหรับเรคอร์ดนั้นๆ
แรนดอมเรคอร์ดฟิลด์จะทำการแอ็กเซสเรคอร์ดถัดไป
CX = 0 --> ขนาดของไฟล์มีค่าตามที่ระบุในแรนดอมเรคอร์ดฟิลต์
ข้อสังเกต บัฟเฟอร์ของข้อมูลที่ใช้โดยบริการของ FCB ก็คือ DTA นั่นเอง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 29H : พารส์ชื่อไฟล์ (Parse File Name)
อินพุต
DS:SI = คอมมานต์ไลน์ที่จะพารส์
ES:DI = แอดเดรสที่จะใช้เก็บ FCB
AL = บิต 0 = 1 --> ตัดตัวแยกที่มาก่อนหน้าคอมมานต์ไลน์ทิ้งไป
บิต 1 = 1 --> ID ของไดรฟ์ในปัจจุบันใน FCB สุดท้ายจะถูกเปลี่ยนก็ต่อเมื่อ
มีการระบุไดรฟ์เท่านั้น
บิต 2 = 1 --> ชื่อไฟล์ใน FCB จะถูกเปลี่ยนก็ต่อเมื่อมีการระบุชื่อไฟล์ในคอมมานด์ไลน์
บิต 3 = 1 --> ส่วนขยายชื่อไฟล์ใน FCB จะถูกเปลี่ยนก็ต่อเมื่อมีการระบุส่วนขยายชื่อไฟล์ใน
คอมมานต์ไลน์
AH = 29H
เอาต์พุต
DS:SI = อักขระแรกหลังจากชื่อไฟล์
ES:SI = FCB ที่ถูกต้อง
ข้อสังเกต ถ้าคอมมานด์ไลน์ไม่มีชื่อไฟล์ที่ถูกต้องแล้ว ES:DI + 1 จะเป็นช่องว่าง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2AH : อ่านวันทื่
อินพุต
AH = 2AH
เอาต์พุต
CX = ปี - 1980
DH = เดือน (1 = มกราคม และอื่นๆ)
DL = วันที่ในเดือนนั้น
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2BH : กำหนดวันทื่
อินพุต
CX = ปี - 1980
DH = เดือน (1 = มกราคม และอื่นๆ)
DL = วันที่ในเดือนนั้น
AH = 2BH
เอาต์พุต
AL = 0 --> สำเร็จ
= F --> วันที่ไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2CH : อ่านเวลา
อินพุต
AH = 2CH
เอาต์พุต
CH = ชั่วโมง (0 ถึง 23)
CL = นาที (0 ถึง 59)
DH = วินาที (0 ถึง 59)
DL = (t/100) ของวินาที (t มีค่าได้ตั้งแต่ 0 ถึง 99)
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2DH : กำหนดเวลา
อินพุต
AH = 2DH
CH = ชั่วโมง (0 ถึง 23)
CL = นาที (0 ถึง 59)
DH = วินาที (0 ถึง 59)
DL = (t/100) ของวินาที (t มีค่าได้ตั้งแต่ 0 ถึง 99)
เอาต์พุต
AL = 0 --> สำเร็จ
= F --> วันที่ไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2EH : กำหนดสถานะของการตรวจสอบ
อินพุต
AH = 2EH
DL = 0
AL = 1 --> กำหนดสถานะของการตรวจสอบเป็น ON
= 0 --> กำหนดสถานะของการตรวจสอบเป็น OFF
อินเทอร์รัพท์หมายเลข 21H บริการที่ 2FH : อ่านที่อยู่ของ DTA ปัจจุบัน
อินพุต
AH = 2FH
เอาต์พุต
ES:BX = แอดเดรสของ DTA ปัจจุบัน
ข้อสังเกต ปัฟเฟอร์ของข้อมูลที่ไช้โดยบริการของ FCB ก็คือ DTA นั่นเอง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 30H : อ่านหมายเลขรุ่น (เวอร์ชัน) ของดอส
อินพุต
AH = 30H
เอาต์พุต
AL = หมายเลขรุ่นหลัก (3 ในดอส3.10)
AH = หมายรุ่นรอง (10 ในดอส 3.10)
BX = 0
CX = 0
ข้อสังเกต ถ้า AL รีเทิร์นค่า 0 กลับมาแสดงว่าเราใช้ดอสรุ่นก่อนเวอร์ชัน 2
อินเทอร์รัพท์หมายเลข 21H บริการที่ 31H : จบการทำงานโดยที่โค้ดยังคงค้างอยู่ในหน่วยความจำ
อินพุต
AH = 31H
AL = รหัสออก
DX = ขนาดของหน่วยความจำในหน่วยพารากราฟ
ข้อสังเกต รหัสออกจะถูกอ่านโดยพาเรนต์โปรแกรม (parent program) ด้วยบริการที่
4DH และสามารถนำค่ารหัสออกนี้ไปตรวจสอบด้วยคำสั่ง ERRORLEVEL ในแบตช์ไฟล์ของดอสได้
อินเทอร์รัพท์หมายเลข 21H บริการที่ 32H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21H บริการที่ 33H : ตรวจสอบการกด < BREAK >
อินพุต
AH = 33H
AL = 0 --> ตรวจสอบสถาวะของการตรวจสอบการกด ^< BREAK >
= 1 --> ตรวจสอบสถาวะของการตรวจสอบการกด ^< BREAK >
(DL) = 0 --> สภาวะของการตรวจสอบเป็น OFF
= 1 --> สภาวะของการตรวจสอบเป็น ON
เอาต์พุต
DL = 0 --> สภาวะของการตรวจสอบเป็น OFF อยู่
= 1 --> สภาวะของการตรวจสอบเป็น OFF อยู่
อินเทอร์รัพท์หมายเลข 21H บริการที่ 34H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21H บริการที่ 35H : อ่านอินเทอร์รัพท์เวกเตอร์
อินพุต
AH = 35H
AL = หมายเลขอินเทอร์รัพท์
เอาต์พุต
ES:BX = อินเทอร์รัพท์เวกเตอร์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 36H : อ่านจำนวนที่ว่างในแผ่นดิสก์
อินพุต
AH = 36H
DL = หมายเลขไดรฟ์(0= ไดรฟ์ดีฟอลด์ 1=A…)
เอาต์พุต
AX = 0FFFH ' หมายเลขไดรฟ์ไม่ถูกต้อง
= จำนวนเซกเตอร์ใน 1 คลัสเตอร์
BX = จำนวนคลัสเตอร์ที่มีเหลือให้ใช้ได้
CX = ขนาดของเซกเตอร์ (512 ไบต์)
DX = จำนวนคลัสเตอร์
ข้อสังเกต หน่วยเล็กที่สุดที่ใช้ในการเก็บไฟล์คือ คลัสเตอร์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 37H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21H บริการที่ 38H : รีเทิร์นข้อมูลที่ขึ้นกับประเทศ
อินพุต
AH = 38H
DS:DX = แอดเอรสของบล็อกขนาด 32 ไบต์
AL =0
เอาต์พุต
เติมข้อมูลลงในบล็อกขนาด 32 ไบต์ โดยมีรายละเอียดตามลำดับดังนี้
2 ไบต์ เก็บรูปแบบของ DATE/TIME
1 ไบต์ เก็บรหัสแอสกีของสัญลักษณ์การเงินของประเทศนั้นๆ
1 ไบต์ เก็บค่า 0 ไว้
1 ไบต์ เก็บรหัสแอสกีของ thousands separator
1 ไบต์ เก็บค่า 0 ไว้
1 ไบต์ เก็บรหัสแอสกีของ decimal separator
1 ไบต์ เก็บค่า 0 ไว้
24 ไบต์ ใช้งานภายใน
รูปแบบของ DATE/TIME มีรายละเอียด ดังนี้
0 = USA (H:M:S,M/D/Y)
1 = EUROPE (H:M:S,D/M/Y)
2 = JAPAN (H:M:S,D:M:Y)
ข้อสังเกต ตั้งแต่คอสเวอร์ชัน3 ขึ้นไป เราสามารถกำหนดค่าเหล่านี้ได้ด้วย
อินเทอร์รัพท์หมายเลข 21H บริการที่ 39H : สร้างสับไดเรกเทอรี
อินพุต
AH = 39H
DS:DX ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นไดเรกเทอรี
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AH เก็บค่าที่บอกถึงความผิดพลาด
AH = 3 --> ไม่พบเส้นทางที่กำหนด (path not found)
= 5 --> ไม่สามารถกำหนดแอ็กแซสได้ (access denied)
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3AH : ลบสับไดเรกทอร์
อินพุต
AH = 3AH
DS:DX ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นชื่อไดเรกทอี์
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AH เก็บค่าที่บอกถึงความผิดพลาดโดย
AH = 3 --> ไม่พบเส้นทางที่กำหนด (path not found)
= 5 --> ไม่สามารถกำหนดแอ็กแซสได้ (access denied)
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3BH : ย้ายสับไดเรกทอรี
อินพุต
AH = 3BH
DS:DX ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นชื่อไดเรกทอรี
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AH เก็บค่าที่บอกถึงความผิดพลาดโดย
AH = 3 --> ไม่พบเส้นทางที่กำหนด (path not found)
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3CH : สร้างไฟล์ (ใช้ไฟล์แฮนเดิล)
อินพุต
DS:DX ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นชื่อไฟล์
CX = แอดตริบิวต์ของไฟล์
AH = 3CH
เอาต์พุต
CY = 0 --> ไฟล์แฮนเดิล
CY = 1 --> AL = 3 --> ไม่พบเส้นทางที่กำหนด (path not found)
AL = 4 --> มีการเปิดไฟล์มากเกินไปที่กำหนดไว้ในไฟล์ CONFIG.SYS
(too many files open)
AL= 5 --> ไดเรกทอรีเต็ม
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3DH : เปิดไฟล์ (ใช้ไฟล์แฮนเดิล)
อินพุต
DS:DX ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นชื่อไฟล์
AL = แอ็กเซสโค้ด
AH = 3DH
แอ็กแซสโค้ด : AL = 0 เปิดไฟล์เพื่อการอ่าน
AL = 1 เปิดไฟล์เพื่อการเขียน
AL = 2 เปิดไฟล์เพื่อการอ่านและเขียน
แอ็กเซสโค้ดตั้งแต่ดอสเวอร์ชัน 3 ขึ้นไปมีรูปแบบเป็น isssraaa โดย
i = 1 --> ไม่สามารถใช้ไฟล์ที่เปิดนี้ใน Child process ได้
(file handle is not to be inherited)
i = 0 --> สามารถใช้ไฟล์ที่เปิดนี้ใน child process ได้
(file handle will be inherited)
sss = 000 --> compatibility mode
sss = 001 --> deny all
sss = 010 --> deny write
sss = 011 --> deny read
sss = 100 --> deny none
r = สงวนไว้
aaa = 000 --> read access
aaa = 001 --> write access
aaa = 010 --> read/write access
เอาต์พุต
CY = 0 --> AX = ไฟล์แฮนดิล
CY = 1 --> AL = รหัสข้อผิดพลาด (ดูตารางข้อผิดพลาด)
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3EH : (ใช้ไฟล์แฮนดิล)
อินพุต
BX = ไฟล์แฮนดิลที่ถูกต้องของไฟล์ที่จะปิด
AH = 3EH
เอาต์พุต
CY = 1 --> AL = 6 --> ไฟล์แฮนดิลไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 3FH : อ่านจากไฟล์หรือดีไวซ์
อินพุต
DS:DX = แอดเดรสของบัฟเฟอร์ข้อมูล
CX = จำนวนไบล์แฮนเดิล
AH = 3FH
เอาต์พุต
CY = 0 --> AX = จำนวนไบต์ที่อ่านได้จริง
CY = 1 --> AL = 5 ไม่สามารถทำการแอ็กเซสได้ (access denied)
= 6 ไฟล์แฮนเดิลไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 40H : เขียนลงไฟล์หรือดีไวซ์
อินพุต
DS:DX = ,แอดเดรสของบัฟเฟอร์ข้อมูล
CX = จำนวนไบต์ที่ต้องการเขียน
BX = ไฟล์แฮนเดิล
AH = 40H
เอาต์พุต
CY = 0 --> AX = จำนวนไบต์ที่เขียนได้จริง
CY = 1 --> AL = 5 ไม่สามารถทำการแอ็กเซสได้ (ACCESS DENIED)
= 6 ไฟล์แฮนเดิลไม่ถูกต้อง
ข้อสังเกต ดิสต์เต็มไม่ถือว่าเป็นข้อผิดพลาด ดังนั้นให้ตรวจสอบจำนวน
ไบต์ที่ต้องการเขียน (ใน CX) ว่าตรงกับจำนวนไบต์ที่เขียนได้จริง
(ซึ่งรีเทิร์นมาใน AX) หรือไม่ ถ้าไม่ตรงกันก็แสดงว่าดิสก์อาจจะเต็ม
อินเทอร์รัพท์หมายเลข 21H บริการที่ 41H : ลบไฟล์
อินพุต
DS:DX = ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นชื่อไฟล์
AH = 41H
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AH เก็บค่าที่บอกถึงความผิดพลาดโดย
AH = 3 --> ไม่พบเส้นทางที่กำหนด (path not found)
= 5 --> ไม่สามารถทำการแอ็กเซสได้ (access denied)
ข้อสังเกต ไม่มีการใช้ wildcards ในชื่อไฟล์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 42H : เคลื่อนย้ายพอยน์เตอร์ที่ใช้ในการอ่านและเขียน
อินพุต
BX = ไฟล์แฮนเดิล
CX:DX = ออฟเซ็ตที่ต้องการ
AH = 42H
AL = วิธีที่ใช้ (Method)
โดย AL = 0 เคลื่ยนย้ายพอยน์เตอร์ที่ใช้ในการอ่านและเขียนไปยัง CX:DX
จากจุดเริ่มต้นของไฟล์
= 1 พอยน์เตอร์ที่ใช้ในการอ่านและเขียนมีค่าเพิ่มขึ้นอีก CX:DX ไบต์
= 2 เคลื่อนย้ายพอยน์เตอร์ที่ใช้ในการอ่านและเขียนไปที่ตำแหน่ง
ท้ายไฟล์บวกออฟ (CX:DX)
เอาต์พุต
CY = 0 --> DS:DX = ตำแหน่งใหม่ของพอยน์เตอร์ที่ใช้ในการอ่านและเขียน
CY = 1 --> AL = 1 หมายเลขฟังก์ชันไม่ถูกต้อง
= 6 ไฟล์แฮนเดิลไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 43H : เปลี่ยนไฟล์แอดตริบิวต์
อินพุต
DS:DX = ชี้ไปยังสตริงก์แบบ ASCII ที่เป็นชื่อไฟล์
AL = 1 --> เปลี่ยนไฟล์แอตตริบิวต์
CX = ไฟล์แอตตริบริวต์ใหม่ที่ต้องการ
AL = 0 --> รีเทร์นไฟล์แอตตริบิวต์มาใน CX
AH = 43H
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AL = 2 --> ไม่พบไฟล์ที่กำหนด (file not found)
= 3 --> ไม่พบเส้นทางที่กำหนด (path not found)
= 5 --> ไม่สามารถทำการแอ็กเซสได้ (access denied)
ถ้า AL = 0 --> CX รีเทิร์นไฟล์แอตตริบิวต์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 44H : I/O Cntrol
อินเทอร์รัพท์หมายเลข 21H บริการที่ 45H : สร้างไฟล์แฮนเดิลซ้ำ
อินพุต
BX = ไฟล์แฮนเดิลที่จะสร้างซ้ำ
AH = 45H
เอาต์พุต
CY = 0 --> AX = ไฟล์แฮนเดิลใหม่ที่ได้สร้างซ้ำ
CY = 1 --> AL = 4 มีการเปิดไฟล์มากกว่าที่กำหนดไว้ในไฟล์ CONFIG.SYS
(too many file open)
= 6 ไฟล์แฮลเดิลไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 46H : บังคับให้มีการสร้างไฟล์แฮนเดิลซ้ำ (Force Duplicate)
อินพุต
BX = ไฟล์แฮนเดิลที่จะสร้างซ้ำ
CX = ไฟล์แฮนเดิลตัวที่สอง
AH = 46H
เอาต์พุต
CY = ไฟล์แฮนเดิลอ้างถึงสตรีม (stream) เดียวกัน
CY = 1 --> AL = 6 ไฟล์แฮนเดิลไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 47H : อ่านไดเรกทอรีปัจจุบันของไดรฟ์ที่ระบุ
อินพุต
AH = 47H
DS:SI ชี้ไปยังบัฟเฟอร์ขนาด 64 ไบต์
DL = หมายเลขไดรฟ์
เอาต์พุต
CY = 0 --> สำเร็จ , สตริงก์แบบ ASCII ที่เป็นชื่อไดเรกทอรีอยู่ที่ DS:SI
CY = 1 --> AH = 15 หมายเลขไดรฟ์ที่ระบุไม่ถูกต้อง
ข้อสังเกต ชื่อไดรฟ์ไม่ถูกอ่านเข้ามาเก็บในสตริงก์แบบ ASCII
อินเทอร์รัพท์หมายเลข 21H บริการที่ 48H : ออลโลเคตหน่วยจำ
อินพุต
AH = 48H
BX = จำนวนพารากราฟที่ต้องการออลโลเคต
เอาต์พุต
CY = 0 --> AX = แอดเดรสของเมโมรีบล็อกที่ออลโลเคตได้
CY = 1 --> AL = 7 MCB (Memory Control Block) ถูกทำลาย
= 8 หน่วยความจำไม่พอ
BX = จำนวนมากที่สุดที่สามารถออลโลเคตได้
อินเทอร์รัพท์หมายเลข 21H บริการที่ 49H : ปลดปล่อยหน่วยความจำที่ได้จากการออลโลเคต
อินพุต
AH = 49H
ES = เซกเมนต์ของบล็อกที่จะปลดปล่อย
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AL = 7 MCB (Memory Control Block) ถูกทำลาย
9 แอดเดรสของเมโมรีบล็อกไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4AH : กำหนดบล็อก
อินพุต
ES = เซกเมนต์ของบล็อกที่จะทำการเปลี่ยนแปลง
BX = จำนวนพารากราฟที่ต้องการ
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AL = 7 MCB (Memory Control Block) ถูกทำลาย
= 8 หน่วยความจำไม่พอ
BX = จำนวนมากที่สุดสามารถออลโลเคตได้
= 9 แอดเดรสของเมโมรีบล็อกไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4BH :โหลดหรือเอกซีคิวต์โปรแกรม (EXEC)
อินพุต
AH = 4BH
DS:DX = สตริงก์แบบ ASCII ที่ประกอบด้วยชื่อไดรฟ์เส้นทาง และชื่อไฟล์
ES:BX = แอดเดรสของพารามิเตอร์บล็อก (ดูข้างล่าง)
AL = 0 --> โหลดและเอกซีคิวต์โปรแกรม
3 --> โหลดแต่ไม่เอกซีคิวต์โปรแกรมและสร้าง PSP (เป็นOverlay)
พารามิเตอร์บล็อกสำหรับ AL = 0 :
เซกเมนต์แอดเดรสของเอ็นไวรอนเมนต์ที่จะผ่าน (เวิร์ด)
แอดเดรสของคอมมานต์ไลน์ที่จะวางไว้ที่ PSP + 80H (ดับเบิลเวิร์ด)
แอดเดรสของดีฟอลด์ FCB ที่จะวางไว้ที่ PSP + 5CH (ดับเบิลเวิร์ด)
แอดเดรสของดีฟอลด์ FCB ตัวที่สองที่จะวางไว้ที่ PSP + 6CH (ดับเบิลเวิร์ด)
พารามิเตอร์บล็อกสำหรับ AL = 3 :
เซกเมนต์แอดเดรสที่จะโหลดไฟล์ไปไว้ (เวิร์ด)
รีโลเคชันแฟ็กเตอร์สำหรับอิมเมจ (เวิร์ด)
เอาต์พุต
CY = 1 --> AL
= 1 หมายเลขฟังก์ชันไม่ถูกต้อง
= 2 ไม่พบไฟล์ในแผ่นดิกส์
= 5 ไม่สามารถทำการแอ็กเซสได้ (Access denied)
= 8 หน่วยความจำไม่พอสำหรับการทำงานดังกล่าว
= 10 เอนไวรอนเมนต์ไม่ถูกต้อง
= 11 รูปแบบไม่ถูกต้อง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4CH : เทอร์มิเนตโปรแกรม
อินพุต
AH = 4CH
AL = รีเทิร์นโค้ด
ข้อสังเกต บริการนี้ใช้จบโปรแกรมได้
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4DH : อ่านรีเทิร์นโค้ดของสับโพรเซส
อินพุต
AH = 4DH
เอาต์พุต
AL = รีเทิร์นโค้ดจากสับโพรเซส
AH = 0 ถ้าสับโพรเซสจบการทำงานอย่างปกติ
1 ถ้าสับโพรเซสจบการทำงานเพราะมีการกด < BREAK >
2 ถ้าจบกมาทำงานเพราะมี critical device error
3 ถ้าจบการทำงานเพราะใช้บริการที่ 31H
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4EH : หาไฟล์แรกที่เข้าคู่ได้
อินพุต
DS:DX --> สตริงก์แบบ ASCII ที่เป็นชื่อไฟล์ที่ต้องการหา
CX = แอตตริบิวต์ที่จะเข้าคู่
AH = 4EH
เอาต์พุต
CY = 1 --> AL = 2 ไม่มีไฟล์ใดเข้าคู่
= 18 ไม่มีไฟล์ให้หาอีก
CY = 0 --> DTA เก็บค่าที่มีความหมายต่อไปนี้
21 ไบต์ สงวน
1 ไบต์ แอตตริบิวต์ที่พบ
2 ไบต์ เวลาของไฟล์
2 ไบต์ วันที่ของไฟล์
2 ไบต์ เวิร์ดต่ำของค่าขนาดไฟล์
2 ไบต์ เวิร์ดสูงของค่าขนาดไฟล์
13 ไบต์ ชื่อและส่วนขยายชื่อไฟล์ที่อยู่ในรูปสตริงก์แบบ ASCII
ข้อสังเกต บัฟเฟอร์ของข้อมูลที่ใช้โดยบริการของ FCB ก็คือ DTA นั่นเอง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 4FH : หาไฟล์ถัดไปที่เข้าคู่ได้
อินพุต
ใช้บริการที่ 4EH ก่อนบริการที่ 4FH เสมอ
AH = 4FH
เอาต์พุต
CY = 1 --> AL = 2 ไม่มีไฟล์ใดเข้าคู่
= 18 ไม่มีไฟล์ให้หาอีก
CY = 0 --> DTA เก็บค่าที่มีความหมายต่อไปนี้
21 ไบต์ สงวน
1 ไบต์ แอตตริบิวต์ที่พบ
2 ไบต์ เวลาของไฟล์
2 ไบต์ วันที่ของไฟล์
2 ไบต์ เวิร์ดต่ำของค่าขนาดไฟล์
2 ไบต์ เวิร์ดสูงของค่าขนาดไฟล์
13 ไบต์ ชื่อและส่วนขยายชื่อไฟล์ที่อยู่ในรูปสตริงก์แบบ ASCII
ข้อสังเกต บัฟเฟอร์ของข้อมูลที่ใช้โดยบริการของ FCB ก็คือ DTA นั่นเอง
อินเทอร์รัพท์หมายเลข 21H บริการที่ 50-53H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21H บริการที่ 54H : อ่านสถานะการตรวจสอบ
อินพุต
AH = 54H
เอาต์พุต
AL = 0 --> สถานะการตรวจสอบเป็น on
= 1 --> สถานะการตรวจสอบเป็น off
อินเทอร์รัพท์หมายเลข 21H บริการที่ 55H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21H บริการที่ 56H : เปลี่ยนชื่อไฟล์
อินพุต
DS:DX = ชื่อไฟล์ที่อยู่ในรูปสตริงก์แบบ ASCII ที่ต้องการเปลี่ยน
ES:DI = ชื่อไฟล์ใหม่ที่อยู่ในรูปสตริงก์แบบ ASCII
AH =56H
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AL = 3 ไม่พบเส้นทางที่กำหนด
= 5 ไม่สามารถทำการแอ็กเซสได้ (access denied)
= 17 ไม่ใช่ดีไวซ์เดียวกัน
ข้อสังเกต ไม่สามารถเปลี่ยนชื่อไฟล์แล้วมีชื่อไฟล์ใหม่นั้นอยู่ต่างไดรฟ์ได้
อินเทอร์รัพท์หมายเลข 21H บิการที่ 57H : อ่านหรือกำหนดเวลาและวันที่ของไฟล์
อินพุต เอาต์พุต
BX = ไฟล์เฮนเดิล CY = 0:
AL = 0 อ่านเวลาและวันที่ --> CX รีเทิร์นเวลา
DX รีเทิร์นวันที่
AL = 1 --> กำหนดเวลาใน CX --> กำหนดเวลาและวันที่ของไฟล์
กำหนดวันที่ใน DX
CY = 1
AL = 1 หมายเลขฟังก์ชันไม่ถูกต้อง
= 6 แฮนเดิลไม่ถูกต้อง
เวลาและวันที่ของไฟล์ถูกเก็บในลักษณะ
เวลา = (2048ชั่วโมง) + (32นาที) + (วินาที/2)
วันที่ = 512*(ปี-1980) + (32*เดือน) + วัน
อินเทอร์รัพท์หมายเลข 21H บริการที่ 58H : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 21H บริการที่ 59H : อ่านข้อผิดพลาดเพิ่มเติม (ดอส 3.00 ขึ้นไป)
อินพุต
AH = 59H
BX = 0
เอาต์พุต
AH = ข้อผิดพลาดเพิ่มเติม
BH = ประเภทของข้อผิดพลาด
BL = คำแนะนำ
1CH = Locus
ข้อสังเกต บริการนี้เกี่ยวข้องกับข้อผิดพลาดที่เพิ่มเติมขึ้นจากเดิมมาก
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5AH : สร้าง Unique File (ดอส 3.00 ขึ้นไป)
อินพุต
AH = 59H
DS:DX = แอดเดรสของชื่อเส้นทางที่อยู่ในรูปสตริงก์แบบ ASCII (ลงท้ายด้วย /)
CX = ไฟล์แอตตริบิวต์
เอาต์พุต
AX = ข้อมูลความผิดพลาด
DS:DX = ชื่อไฟล์และชื่อเส้นทางที่อยู่ในสตริงก์แบบ ASCII
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5BH : สร้างไฟล์ใหม่ (ดอส 3.00 ขึ้นไป)
อินพุต
AH = 5BH
DS:DX = แอดเดรสของชื่อเส้นทางที่อยู่ในรูปสตริงก์แบบ ASCII (ลงท้ายด้วย /)
CX = ไฟล์แอตตริบิวต์
เอาต์พุต
AX = ข้อมูลความผิดพลาด ถ้า CY = 1
= แฮนเดิล ถ้า CY = 0
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5CH : ล็อคและไม่ล็อคการแอ็กเซสไฟล์ (ดอส 3.00 ขึ้นไป)
อินพุต
AH = 5CH
AL = 0 --> ล็อคช่วงไบต์
= 1 --> ไม่ล็อคช่วงไบต์
BX = ไฟล์แฮนเดิล
CX = เริ่มช่วงไบต์ (เวิร์ดสูง)
DX = เริ่มช่วงไบต์ (เวิร์ดต่ำ)
SI = จำนวนไบต์ที่(ไม่) ล็อค (เวิร์ดสูง)
DI = จำนวนไบต์ที่มี (ไม่) ล็อค (เวิร์ดต่ำ)
เอาต์พุต
CY = 1,AX = ข้อมูลความผิดพลาด
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5E00H : อ่านชื่อของเครื่อง (ดอส 3.00 ขึ้นไป)
อินพุต
AX = 5E00H
DS:DX = บัฟเฟอร์สำหรับชื่อของคอมพิวเตอร์
เอาต์พุต
DS:DX = ชื่อของคอมพิวเตอร์ที่อยู่ในรูปสตริงก์แบบ ASCII
CH = 0 --> ชื่อนี้ไม่มีในนิยาม
CL = NETBIOS number
AX = ข้อมูลความผิดพลาด ถ้า CY = 1
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5E02H : กำหนดเซตอัปของพรินเตอร์ (ดอส 3.00 ขึ้นไป)
อินพุต
AX = 5E02H
BX = redirection list index
CX = ขนาดของสตริงก์เซตอัป
DS:DI = พอยน์เตอร์ไปยังบัฟเฟอร์ที่ใช้เก็บเซตอัปของพรินเตอร์
เอาต์พุต
AX = ข้อมูลความผิดพลาด ถ้า CY = 1
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5E03H : อ่านเซตอัปของพรินเตอร์ (ดอส 3.00 ขึ้นไป)
อินพุต
AX = 5E03H
BX = redirection list index
ES:DI = พอยน์เตอร์ไปยังบัฟเฟอร์ที่ใช้เก็บเซตอัฟของพรินเตอร์
เอาต์พุต
AX = ข้อมูลความผิดพลาด ถ้า CY = 1
CX = ขนาดของข้อมูลที่รีเทิร์น
ES:DI =ถูกเติมด้วยสตริงก์ที่เป็นเซตอัปของพรินเตอร์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5F03H : รกดีไวซ์ (Redirect Device)
อินพุต
AX = 5F03H
BL = ชนิดของดีไวซ์
= 3 --> พรินเตอร์ดีไวซ์
= 4 --> ไฟล์ดีไวซ์
cx = ค่าที่เก็บไว้สำหรับผู้เรียก
DS:SI = ชื่อดีไวช์ต้นทางที่อยู่ในรูปสตริงก์แบบASCII
ES:DI = ชื่อเส้นทางเน็ตเวิร์กปลายทางที่อยู่ในรูปสตริงก์แบบ ASCII พร้อมรหัสผ่าน
เอาต์พุต
AX = ข้อมูลผิดพลาด ถ้า CY = 1
อินเทอร์รัพท์หมายเลข 21H บริการที่ 5F04H : ยกเลิกการรก (ดอส 3.00 ขึ้นไป)
อินพุต
AX = 5F04H
DS:SI = ชื่อดีไวซ์หรือเส้นทางที่อยู่ในรูปสตริงก์แบบ ASCII
เอาต์พุต
AX = ข้อมูลความผิดพลาด ถ้า CY = 1
อินเทอร์รัพท์หมายเลข 21H บริการที่ 62H : อ่าน PSP (ดอส 3.00 ขึ้นไป)
อินพุต
AX = 62H
เอาต์พุต
BX = เซกเมนต์ของโปรแกรมที่กำลังเอกซีคิวต์
อินเทอร์รัพท์หมายเลข 21H บริการที่ 67H : กำหนดจำนวนแฮนเคิล (ดอส 3.00 ขึ้นไป)
อินพุต
AX = 67H
BX = จำนวนแฮนเคิลที่เปิดได้ (มากที่สุด 255)
เอาต์พุต
AX = ข้อมูลความผิดพลาด ถ้า CY = 1
อินเทอร์รัพท์หมายเลข 21H บริการที่ 68H : Commit File (Write Buffer) ดอส 3.00 ขึ้นไป
อินพุต
AX = 68H
เอาต์พุต
BX = ไฟล์แฮนเคิล
ข้อสังเกต บริการนี้เป็นบริการสุดท้ายของดอส 3.3 INT 21H
อินเทอร์รัพท์หมายเลข 22H : เทอร์มิเนคแอดเดรส
อินเทอร์รัพท์หมายเลข 23H : Control-Break Exit Address
อินเทอร์รัพท์หมายเลข 24H : Critical Error Hander
ค่าใน AH บ่งบอกถึงข้อผิดพลาดชนิดต่างๆ โดย
0 Diskette is write protected
1 Unknow unit
2 The requested drive is not ready
3 unknow command
4 Cyclie redundany check error int the data
5 Bad request structure length
6 Seek error
7 Media type unknow
8 Sector not found
9 The printer is out of paper
A Write fault
B Read fault
C General Failure
ถ้ามีการเอกซีคิวต์คำสั่ง IRET แล้วดอสจะเลือกกระทำตามค่าใน AL โดย
AL = 0 ข้อผิดพลาดจะถูกเพิกเฉย (ignore)
= 1 มีการทำงานนั้นซ้ำใหม่ (retry)
= 2 จบโปรแกรมด้วย INT 23H (abort)
อินเทอร์รัพท์หมายเลข 25H : อ่านดิสก์แบบแอบโซลุค
อินพุต
AL = หมายเลขไดรฟ์
CX = จำนวนเซกเตอร์ที่อ่าน
DX = ลอจิคัลเซกเตอร์แรก
DS:BX = แอดเดรสของบัฟเฟอร์
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AH = 80H Disk didn't respond
AH = 40H Seek failed
AH = 20H Controller failure
AH = 10H Bad CRC error cHeck
AH = 08 DMA overrun
AH = 04 Sector not found
AH = 03 Write protect error
AH = 02 Address mark missing
AH = 00 Error unknow
ข้อสังเกต แฟล็กจะยังคงอยู่ในสแต็กภายหลังการเรียก INT นี้ไปแล้วเนื่องจากข้อมูลถูกรีเทิร์นมาในแฟล็ก
ฉะนั้นหลังจากใช้ข้อมูลที่อยู่ในสแต็กแล้วอย่าลืมใช้คำสั่ง POPF ด้วยเสมอนอกจากนี้ INT
นี้ยังเปลี่ยนค่าในรีจีสเตอร์อื่นๆ ทุกตัวด้วย
อินเทอร์รัพท์หมายเลข 26H : เขียนดิสก์แบบแอบโซลุด
อินพุต
AL = หมายเลขไดรฟ์
CX = จำนวนแซกเตอร์ที่เขียน
DX = ลอจิคัลเซกเตอร์แรก
DS:BX = แอดเดรสของบัฟเฟอร์
เอาต์พุต
CY = 0 --> สำเร็จ
CY = 1 --> AH = 80H Disk didn't respond
AH = 40H Seek failed
AH = 20H Controller failure
AH = 10H Bad CRC error cHeck
AH = 08 DMA overrun
AH = 04 Sector not found
AH = 03 Write protect error
AH = 02 Address mark missing
AH = 00 Error unknow
ข้อสังเกต แฟล็กจะยังคงอยู่ในสแต็กภายหลังการเรียก INT นี้ไปแล้วเนื่องจากข้อมูลถูกรีเทิร์นมาในแฟล็ก
ฉะนั้นหลังจากใช้ข้อมูลที่อยู่ในสแต็กแล้วอย่าลืมใช้คำสั่ง POPF
ด้วยเสมอนอกจากนี้ INT นี้ยังเปลี่ยนค่าในรีจีสเตอร์อื่นๆ ทุกตัวด้วย
อินเทอร์รัพท์หมายเลข 27H : จบโปรแกรมโดยโค้ดยังคงค้างอยู่ในหน่วยความจำ
อินพุต
DS:DX = ชี้โดยตรงไปยังจุดสุดท้ายของโค้ดที่ค้างอยู่ในหน่วยความจำ
อินเทอร์รัพท์หมายเลข 28H-2EH : ใช้งานภายในดอส
อินเทอร์รัพท์หมายเลข 2FH : มัลติเพล็กซ์อินเทอร์รัพท์
อินเทอร์รัพท์หมายเลข 30H - 3FH : ดอสสงวนไว้
อินเทอร์รัพท์หมายเลข 40H - 5FH : สงวนไว้
อินเทอร์รัพท์หมายเลข 60H - 67H : สงวนไว้สำหรับยูสเซอร์ซอฟต์แวร์
อินเทอร์รัพท์หมายเลข 68H - 7FH : ไม่ได้ใช้งาน
อินเทอร์รัพท์หมายเลข 80H - 85H : BASIC สงวนไว้
อินเทอร์รัพท์หมายเลข 86H - F0H : ใช้โดยอินเตอร์พรีเตอร์ภาษาเบสิก
อินเทอร์รัพท์หมายเลข F1H - FFH : ไม่ได้ใช้งาน