![]() | 第7章 文件控制块 | -183- | |||||||||||||||||||
READ_LOOP: ERR_EXIT: EXIT: MAIN CODE |
MOV MOV MOV DIV ADD MOV MOV MOV MOV INT OR JNZ LOOP LOOP MOV INT ENDP ENDS END |
AX,[BX+10H] DX,[BX+12H] CX,[BX+0EH] CX AX,2 CX,AX BP,DX AH,14H DX,BX 21H AL,AL ERR_EXIT READ_LOOP READ_LOOP AH,4CH 21H MAIN |
;取得文件长度低字 ;取得文件长度高字 ;取得记录长度 ;计算文件包含的记录数 ;记录数加2 ;将增大的记录数作为循环计数 ;准备从文件中读入数据 ;DX指向打开了的FCB ;读入一个记录 ;正确读入了吗? ;若数据未正确读入,转ERR_EXIT ;继续读入下一个记录 ;继续读入 ;结束程序 |
||||||||||||||||||
下面是这个程序的跟踪分析结果: | |||||||||||||||||||||
C:\ASM\>DEBUG FCB6.EXE[Enter] | |||||||||||||||||||||
g=0 24[Enter] | 循环计数 数据的余数 | ||||||||||||||||||||
AX=0007 | BX=0000 | CX=0007 | DX=001B | SP=0000 | BP=001B | SI=0000 | DI=0000 | ||||||||||||||
DS=2589 | ES=2579 | SS=2589 | CS=258C | IP=0024 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
258C:0024 | B414 | MOV AH,14 | |||||||||||||||||||
笔者的CONFIG文件有667个字节,我们取记录长度为默认值128字节,这里我们可以看到程序计算出CONFIG文件包含5个记录零1BH个字节。为了能分析出错情况,我们将算出的记录数加了2并将其置入CX寄存器做为循环计数。 | |||||||||||||||||||||
g=24 30[Enter] | |||||||||||||||||||||
AX=1403 | BX=0000 | CX=0002 | DX=0000 | SP=0000 | BP=001B | SI=0000 | DI=0000 | ||||||||||||||
DS=2589 | ES=2579 | SS=2589 | CS=258C | IP=0030 | NV UP EI PL NZ NA PE NC | ||||||||||||||||
258C:0030 | E2F2 | LOOP 0024 | |||||||||||||||||||
一次执行全部循环,可以看到AL寄存器返回的第一的错误码是03H,这个错误码的含义是 | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |