王爽《汇编语言》实验17——编写包含多个功能子程序的中断例程
来源:互联网 发布:网页小游戏源码下载 编辑:程序博客网 时间:2024/05/21 14:43
;==========================================================================
;实验17 编写包含多个功能子程序的中断例程
;安装一个新的 int 7ch 中断例程,用逻辑扇区号对软盘进行读写
;用AH寄存器传递功能号,0表示读,1表示写
;用DX寄存器传递要读写的扇区的逻辑扇区号
;用ES:BX指向存储读出数据或者写入数据的内存区
;==========================================================================
ASSUMECS:CODE
DATASEGMENT
;用于检验中断例程
DB32DUP("Welcome to masm!")
DATAENDS
CODESEGMENT
START:
;安装新的 INT 7CH 中断
PUSHCS
POPDS
MOVSI,OFFSET NEW_INT7CH_START
MOVAX,0
MOVES,AX
MOVDI,200H
MOVCX,OFFSET NEW_INT7CH_END-OFFSET NEW_INT7CH_START
CLD
REPMOVSB
;设置新的中断向量表
CLI
MOVWORDPTRES:[4*7CH],200H
MOVWORDPTRES:[4*7CH+2],0
STI
;测试新的 INT 7CH 中断
MOVAX,DATA
MOVDS,AX
;写
PUSHDS;ES:BX指向要写的单元
POPES
MOVBX,0
MOVDX,0
MOVAL,1
MOVAH,1
INT7CH
;读 ;ES:BX指向要读的单元
MOVAX,2000H ;读到2000:0处
MOVES,AX
MOVBX,0
MOVDX,0
MOVAL,1
MOVAH,0
INT7CH
MOVAX,4C00H
INT21H
;新的 INT 7CH 中断
;-----------------------------------------------------------------------------------
;功能:用逻辑扇区号对软盘进行读写
;参数: (AH)=功能号,0=读,1=写;(DX)=要读写的扇区的逻辑扇区号,(AL)=读取或写入的扇区数
; ES:BX指向存储读出数据或者写入数据的内存区
;返回:同 INT 7CH 的返回,操作成功:(AH)=0,(AL)=读入或写入的扇区数,操作失败:(AH)=错误代码
NEWINT7 PROCNEAR
NEW_INT7CH_START:
JMP NEW_INT7CH_REAL_START
TABLE DW SUB0-NEWINT7+200H,SUB1-NEWINT7+200H
NEW_INT7CH_REAL_START:
PUSHDX
PUSHCX
PUSHSI
MOVCL,AH
MOVCH,0
SHLCX,1
MOVSI,CX
CALL CONVERT
CALLWORDPTRCS:[TABLE-NEWINT7+200H+SI]
JMP NEW_INT7CH_RET
SUB0:
;不能在子程序中再来POP!!因为在调用子程序的时候会压入IP
;此时POP会导致一系列不可预知的错误
MOVDL,0
MOVAH,02
INT13H
RET
SUB1:
MOVDL,0
MOVAH,03
INT13H
RET
NEW_INT7CH_RET:
POPSI
POPCX
POPDX
IRET
CONVERT:
;-------------------------------------------------------------------------------
;功能:根据逻辑扇区号计算物理扇区号
;参数:(DX)=逻辑扇区号(0~2879)
;返回:(DH)=面号(0,1),(CH)=磁道号(1~79),(CL)=扇区号(1~18)
PUSHAX
MOVAX,DX
MOVDX,0
MOVCX,1440
DIVCX ;(AX)=面号
MOVDH,AL
PUSHDX
MOVAX,DX
MOVDX,0
MOVCX,18
DIVCX ;(AX)=磁道号
MOVCH,AL
ADDDX,1 ;(DX)=扇区号
MOVCL,DL
POPDX
POPAX
RET
;-------------------------------------------------------------------------------
NEW_INT7CH_END:
NOP
NEWINT7 ENDP
;-----------------------------------------------------------------------------------
CODEENDS
END START
- 王爽《汇编语言》实验17——编写包含多个功能子程序的中断例程
- 王爽《汇编语言》实验16——编写包含多个功能子程序的中断例程
- 汇编语言----实验16--编写包含多个功能子程序的中断例程
- ***汇编语言 实验16 编写包含多个功能子程序的中断例程
- 王爽《汇编语言》实验16:包含多个功能子程序的中断例程 解答
- 王爽 汇编 实验16 编写包含多个功能子程序的中断例程
- 汇编实验16 编写包含多个功能子程序的中断例程——浅谈直接地址表
- 编写包含多个功能子程序的中断例程
- 编写包含多个功能子程序的中断例程
- 实验十六_编写包含多个功能子程序的中断例程
- 实验16 编写包含多个功能子程序的中断例程
- [Hb-XVI] 编写包含多个功能子程序的中断例程(直接定址表)
- 王爽《汇编语言》实验13——编写、应用中断例程
- 多个功能子程序的中断例程测试程序
- 王爽《汇编语言》实验11——编写子程序
- 王爽《汇编语言》实验15——安装新的INT 9中断例程
- 汇编语言(王爽)实验十 编写子程序
- 王爽《汇编语言》实验10:编写子程序show_str
- Android变化的双重选择框
- zzulioj 1919
- zzuli 1916 (晴天 树 )
- linux 之 基础知识
- leetcode 121. Best Time to Buy and Sell Stock
- 王爽《汇编语言》实验17——编写包含多个功能子程序的中断例程
- http和socket协议应用场合总结
- A Bug which is not a std::vector bug
- poj3264 Balanced Lineup(ST表)
- leetcode 21. Merge Two Sorted Lists
- android中对于枚举的自定义实现
- Windows系统SNMP数据监测与OID
- NYOJ 663 弟弟的作业【简单题更能体现水平。。。】
- Linux入门