汇编语言不过如此而已五.docx
《汇编语言不过如此而已五.docx》由会员分享,可在线阅读,更多相关《汇编语言不过如此而已五.docx(34页珍藏版)》请在冰点文库上搜索。
汇编语言不过如此而已五
汇编语言,不过如此而已(五)
第五章:
BIOS中断
第1节:
中断号
第2节:
显示操作(INT_NUMBER=OX10)
+功能号(存于AH)列表
+显示操作类宏
;显示模式的设置(00h)
MODE_640*400_256EQU100H
MODE_640*480_256EQU101H
MODE_800*600_16EQU102H
MODE_800*600_256EQU103H
MODE_1024*768_16EQU104H
MODE_1024*768_256EQU105H
MODE_1280*1024_16EQU106H
MODE_1280*1024_256EQU107H
setDispModemacromode
MOVAX,4F02H
MOVBX,mode
INT10H
endm
;设置光标形状(01h)
setCursorFramemacrostartRow,endRow
MOVAH,01H
MOVCH,startRow
MOVCL,endRow
INT10H
endm
;设置光标位置(02)
setCursorPositionmacrorowIdx,colIdx
MOVAH,02H
MOVDH,rowIdx
MOVDL,colIdx
INT10H
endm
;获取光标信息(03)
cursorInfostruc
startRowdb?
endRowdb?
rowIdxdb?
colIdxdb?
cursorInfoends
rifcursorInfo<0,0,0,0>
getCursorInfomacroret_cursor_info
MOVAH,03H
MOVBH,0
INT10H
MOVrif.startRow,CH
MOVrif.endRow,CL
MOVrif.rowIdx,DH
MOVrif.colIdx,DL
endm
;获取光笔信息(04h)
lightPenstruc
statedb?
pixelRowdw?
pixelColdb?
charRowdb?
charColdb?
lightPenends
rlplightPen<0,0,0,0,0>
getLightPenInfomacrorlp
MOVAH,04H
INT10H
MOVrlp.state,AH
MOVrlp.pixelRow,BX
MOVrlp.charRow,DH
MOVrlp.charCol,DL
.ifCH!
=0
MOVrlp.pixelCol,CH
.else
MOVrlp.pixelCol,CL
.endif
endm
;设置显示页(05h)
setDisplayPagemacropage
MOVAH,05H
MOVAL,page
INT10H
endm
;设置滚屏(06h-07h)
DIRECTION_UPEQU06H
DIRECTION_DOWNEQU07H
setScreenCrollmacrodir,rows,t,l,b,r
MOVAH,dir
MOVBH,rows
MOVCH,t
MOVCL,l
MOVDH,b
MOVDL,r
INT10H
endm
;读取光标位字符及属性(08h)
propCharstruc
attrdb?
chardb?
propCharends
cursorCharpropChar
>
getCursorCharmacrocursorChar
MOVAH,08H
INT10H
MOVcursorChar,AH
MOVcursorChar,AL
endm
;在光标位显示字符及属性(09h)
dispCursorCharmacrochar,attr,repeats
MOVAH,09H
MOVAL,char
MOVBL,attr
MOVCX,repeats
INT10H
endm
;在光标位按原属性显示字符(0Ah)
dispCursorCharPropmacrochar,color,repeats
MOVAH,0Ah
MOVAL,char
MOVBL,color
MOVCX,repeats
INT10H
endm
;设置背景色或调色版(0Bh)
SET_BACKGROUND_COLOREQU00H
SET_PALETE_TYPEEQU01H
setColorTypemacrotype,value
MOVAH,0Bh
.iftype=SET_BACKGRPUND_COLOR
MOVBH,00h
MOVBL,value
.elseiftype=SET_PALETE_TYPE
MOVBH,01H
MOVBL,value
.endif
INT10H
endm
;写图形像素(0Ch)
writeImagePixelmacrovalue,rowIdx,colIdx
MOVAH,0Ch
MOVAL,value
MOVCX,rowIdx
MOVDX,colIdx
INT10H
endm
;读图形像素(0Dh)
readImagePixelmacrovalue,rowIdx,colIdx
MOVAH,0Dh
MOVCX,rowIdx
MOVDX,colIdx
INT10H
MOVvalue,AL
endm
;在电传打字机模式显示单个字符(0Eh)
dispSingleCharAtTeleTypemacrochar
MOVAH,0Eh
MOVAL,char
INT10H
endm
;获取显示模式(0Fh)
getDispModemacrocharsPerRow,mode
MOVAH,0Fh
INT10H
MOVcharsPerRow,AH
MOVmode,AL
endm
;在电传打字机模式显示单个字符(13h)
dispStringAtTeleTypemacrostrAdress,rowIdx,colIdx
MOVAX,strAddress
MOVBP,AX
MOVAX,1301H
MOVBX,07H
MOVDH,rowIdx
MOVDL,colIdx
INT10H
Endm
第3节:
磁盘操作(INT_NUMBER=OX13)
+功能号(存于AH之中)
+磁盘操作相关宏
;磁盘复位(功能号:
00H)
setDiskResetmacrodrive,ret
MOVAH,00H
MOVDL,drive
INT13H
MOVret,AH
endm
;读取磁盘系统状态(功能号:
01H)
getDiskStatemacrodrive,state
MOVAH,01H
MOVDL,drive
INT13H
MOVstate,AL
endm
;读扇区(功能号:
02H)
readSectormacrosectors,cylinder,sector,disk_header,drive,buffer,ret
MOVAH,02H
MOVAL,sectors
MOVBX,buffer
MOVCH,cylinder
MOVCL,sector
MOVDH,disk_header
MOVDL,drive
INT13H
MOVret,AH
endm
;写扇区(功能号:
03H)
writeSectormacrosectors,cylinder,sector,disk_header,drive,buffer,ret
MOVAH,03H
MOVAL,sectors
MOVBX,buffer
MOVCH,cylinder
MOVCL,sector
MOVDH,disk_header
MOVDL,drive
INT13H
MOVret,AH
endm
;扇区检验(功能号:
04H)
sectorVerifymacrosectors,cylinder,sector,disk_header,drive,buffer,ret
MOVAH,03H
MOVAL,sectors
MOVBX,buffer
MOVCH,cylinder
MOVCL,sector
MOVDH,disk_header
MOVDL,drive
INT13H
MOVret,AH
endm
;格式化磁道(功能号:
05H)
formatTrackmacroinnerLeave,cylinder,diskHeader,drive,addressArea,errCode
MOVAH,05H
MOVAL,innerLeave
MOVBX,addressArea
MOVCH,cylinder
MOVDH,diskHeader
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;格式化坏磁道(功能号:
06H)
formatErrorTrackmacroinnerLeave,cylinder,diskHeader,drive,addressArea,errCode
MOVAH,06H
MOVAL,innerLeave
MOVBX,addressArea
MOVCH,cylinder
MOVDH,diskHeader
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;格式化驱动器(功能号:
07H)
formatDrivemacroinnerLeave,cylinder,drive,errCode
MOVAH,07H
MOVAL,innerLeave
MOVCH,cylinder
MOVDL,driver
INT13H
MOVerrCode,AH
endm
;读驱动参数(功能号:
08H)
driveInfostruc
errCodedb?
sizedb?
cylindersdw?
sectorsdb?
diskHeadersdb?
driversdb?
varListAddrdw?
driveInfoends
dridriveInfo<>
getDriveInfomacrodrive,dri
MOVAH,08H
MOVDL,driver
INT13H
MOVdri.errCode,AH
MOVdri.size,BL
MOVdri.diskHeaders,DH
MOVdri.drives,DL
MOVdri.varListAddr,DI
PUSHAX
;确定扇区数(CL:
0-5Bit)
MOVAL,CL
ANDAL,3FH;00111111
MOVdri.sectors
;确定柱面数(CL:
6-7bit+CH)
MOVAL,CH
MOVAH,CL
ANDAH,C0H;11000000
SHRAH,6H
MOVdri.cylinders,AX
POPAX
endm
;初始磁盘参数(功能号:
09H)
initDiskmacrodrive,errCode
MOVAH,09H
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;读长扇区(功能号:
0AH)
readLongSectormacrosectors,cylinder,sector,diskHeader,buffer,drive,errCode,sectorRead
MOVAH,0AH
MOVAL,sectors
MOVBX,buffer
MOVCH,cylinder
MOVCL,sector
MOVDH,diskHeader
MOVDL,drive
INT13H
MOVerrCode,AH
MOVsectorRead,AL
endm
;写长扇区(功能号:
0BH)
writeLongSectormacrosectors,buffer,cylinder,sector,diskHeader,drive,errCode,sectorWrite
MOVAH,0BH
MOVAL,sectors
MOVBX,buffer
MOVCH,cylinder
MOVCL,sector
MOVDH,diskHeader
MOVDL,drive
INT13H
MOVerrCode,AH
MOVsectorWrite,AL
endm
;查询(功能号:
0CH)
excuteQuerymacrocylinder,diskHeader,drive,errCode
MOVAH,0CH
PUSHAX
MOVAX,cylinder
MOVCH,AL
SHLAH,6
MOVCL,AH
POPAX
MOVDH,diskHeader
MOVDL,driver
INT13H
MOVerrCode,AH
endm
;磁盘系统复位(功能号:
0DH)
setSystemResetmacrodrive,errCode
MOVAH,0DH
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;读扇区缓存(功能号:
0EH)
readSectorBuffermacrobuffer,errCode
MOVAH,OEH
MOVBX,buffer
INT13H
MOVerrCode,AH
endm
;写扇区缓存(功能号:
0FH)
writeSectorBuffermacrobuffer,errCode
MOVAH,OFH
MOVBX,buffer
INT13H
MOVerrCode,AH
endm
;读驱动状态(功能号:
10H)
getDriveStatemacrodrive,errCode
MOVAH,10H
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;校验驱动(功能号:
11H)
driveVerifymacrodrive,errCode
MOVAH,11H
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;控制器RAM校验(功能号:
12H)
controlRAMVerifymacroerrCode
MOVAH,12H
INT13H
MOVerrCode,AH
endm
;控制器驱动校验(功能号:
13H)
controlDriveVerifymacroerrCode
MOVAH,13H
INT13H
MOVerrCode,AH
endm
;控制器内部校验(功能号:
14H)
controlInnerVerifymacroerrCode
MOVAH,14H
INT13H
MOVerrCode,AH
endm
;获取磁盘类型(功能号:
15H)
getDiskTypemacrodrive,typeCode
MOVAH,15H
MOVDL,drive
INT13H
MOVtypeCode,AH
endm
;获取磁盘变化状态(功能号:
16H)
getDiskChangeStatemacrodrive,changeCode
MOVAH,16H
MOVDL,drive
INT13H
MOVchangeCode,AH
endm
;设驱动类型(功能号:
17H)
setDriveStatemacrotypeCode,drive,errCode
MOVAH,17H
MOVAL,typeCode
MOVDL,drive
INT13H
MOVerrCode,AH
endm
;格式化媒体类型(功能号:
18H)
getFormatMediaTypemacrocylinders,sectors,drive,mediaCode
MOVAH,18H
MOVCH,cylinders
MOVCL,sectors
MOVDL,drive
INT13H
MOVmediaCode,DI
endm
;磁头保护(功能号:
19H)
diskHeaderProtectmacro
;(略)
endm
;格式化ESDI驱动(功能号:
1AH)
formatESDIDrivemacro
;(略)
Endm
第4节:
串口操作(INT_NUMBER=OX14)
+功能号(存于AH)列表
+磁盘操作相关宏
;串口初始化(00H)
comInitmarcoinitCode,comNum
MOVAH,00H
MOVAL,initCode
MOVDX,comNum
INT14H
endm
;向串口写字符(01H)
writeCommacrochar,comNum
MOVAH,01H
MOVAL,char
MOVDX,comNum
INT14H
endm
;从串口读数据(02H)
readCommacrochar,comNum
MOVAH,02H
MOVDX,comNum
INT14H
MOVchar,AL
endm
;获取串口状态(03H)
getComStatemacrocomNum,comState,modemState
MOVAH,03H
MOVDX,colNum
INT14H
MOVcomState,AH
MOVmodemState,AL
endm
第5节:
其他操作(INT_NUMBER=OX15)
(续上页)
+其他操作相关宏
;开盒式磁带机马达(00H)
openBoxTapeDrivemacroerrCode
MOVAH,00H
INT15H
MOVerrCode,AH
endm
;关盒式磙带机马达(01H)
closeBoxTapeDrivemacroerrCode
MOVAH,01H
INT15H
MOVerrCode,AH
endm
;读盒式磙带机(02H)
readBoxTapeDrivemacrobuffer,readLength,readedLength,errCode
MOVAH,02H
MOVBX,buffer
MOVCX,readLength
INT15H
MOVDX,readedLength
MOVerrCode,AH
endm
;写盒式磙带机(03H)
writeBoxTapeDrivemacrobuffer,writeLength,writedLength,errCode
MOVAH,03H
MOVBX,buffer
MOVCX,writeLength
INT15H
MOVDX,writedLength
MOVerrCode,AH
endm
;格式化ESDI驱动器定时中断(0FH)
formatESDIDriveTimerInterruptmacro
;ps/2(略)
endm
;[读|写]自检错误记录(21H)
selfCheckErrRecordmacro
;ps/2(略)
endm
;键盘截听(4FH)
keyboardListenermacro
;ps/2(略)
endm
;设备打开(80H)
openDevicemacrodevice,process,errCode
MOVAH,80H
MOVBX,device
MOVCX,process
INT15H
MOVerrCode,AH
endm
;设备关闭(81H)
closeDevicemacrodevice,process,errCode
MOVAH,81H
MOVBX,device
MOVCX,process
INT15H
MOVerrCode,AH
endm
;进程中止(82H)
processSuspendmacroprocess,errCode
MOVAH,82H
MOVBX,process
INT15H
MOVerrCode,AH
endm
;事件等待(83H)
eventWaitmacrosignal,timeOut
MOVAH,83H
MOVAL,00H
MOVBX,signal
INT15H
endm
;读游戏杆(84H)
joyStickmacro
;(略)
endm
;系统请求健(85H)
sysRequestmacroactionCode,errCode
MOVAH,85H
MOVAL,actionCode
INT15H
MOVerrCode,AH
endm
;延迟(86H)
delaymacrotimeOut,errCode
MOVAH,86H
MOVDX,timeOut
INT15H
MOVerrCode,AH
endm
;移动扩展内存块(87H)
moveBlockmacroblocks,GDT,errCode
MOVAH,87H
MOVCX,blocks
MOVSI,GDT
INT15H
MOVerrCode,AH
endm
;读取扩展内存大小(88H)
readExtMemorymacrobyteReaded
MOVAH,88H
INT15H
MOVbyteReaded,AX
endm
;进入保护模式(89H)
enterProtectModemacroIRQ0,IRQ8,GDT,errCode
MOVAH,89H
MOVBH,IRQ0
MOVBL,IRQ8
MOVSI,GDT
INT15H
MOVerrCode,AH
endm
;设备等待(90H)
de