-174- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
CODE MAIN ERR_EXIT: MAIN CODE |
SEGMENT ASSUME PROC MOV MOV MOV MOV INT OR JNZ MOV INT MOV MOV INT MOV INT ENDP ENDS END |
CS:CODE FAR AX,DATA DS,AX DX,OFFSET MY_FCB AH,0FH 21H AL,AL ERR_EXIT AH,4CH 21H AH,9 DX,OFFSET ERRMSG 21H AH,4CH 21H MAIN |
;初始化DS寄存器指向数据段 ;DX寄存器指向未打开的FCB ;选择DOS API的0FH功能 ;打开文件 ;AL寄存器返回了0吗? ;没有返回0,转ERR_EXIT结束 ;结束程序 ;利用DOS API的09功能 ;输出错误信息 ;结束程序 |
||||||||||||||||||
这个程序主要用于跟踪分析用,大家可以试一试执行这个程序,不过执行之前必须保证当前的驱动器是"C:"而且CONFIG.SYS就在当前目录下,缺了这两个条件的话就只能看到程序输出"Error"了。我们现在跟踪这个程序看一看当一个文件打开后FCB会有什么变化: | |||||||||||||||||||||
C:\ASM\>DEBUG FCB1.EXE[Enter] | |||||||||||||||||||||
G=0 A[Enter] | |||||||||||||||||||||
AX=0F8A | BX=0000 | CX=004F | DX=0000 | SP=0000 | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=258A | ES=257A | SS=258A | CS=258D | IP=000A | NV UP EI PL NZ NA PO NC | ||||||||||||||||
258D:000A | CD21 | INT 21 | |||||||||||||||||||
在执行"INT 21"指令之前,我们先观察一下未打开的FCB,可以看到在未打开的FCB中除驱动器域和文件名、扩展名域外其它各项均为0: | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |