-184- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
只读取了"部分"数据,我们看一看究竟在读取哪个记录时出现了这个错误,列出FCB的内容: | |||||||||||||||||||||
-d0 24[Enter] | |||||||||||||||||||||
15F1:0000 | 03 43 4F 4E 46 49 47 20-20 53 59 53 00 00 80 00 | .CONFIG SYS.... | |||||||||||||||||||
15F1:0010 | 9B 02 00 00 38 21 4C 85-40 02 42 93 9B 61 B8 04 | ....8!L.@.B..a.. | |||||||||||||||||||
15F1:0020 | 06 00 00 00 00 | ..... | |||||||||||||||||||
注意当前记录号 | |||||||||||||||||||||
当前记录号为06H,在上一次读取数据时它应该是05H,也就是说程序在读取第六个记录时出现了问题。我们知道这个文件只有5个完整的记录,第六个记录只有1BH个字节,这样一来错误码03H就很好理解了:若一个文件所剩的数据不足一个完整记录时,读取这些数据就会返回03H错误码。换言之,这个错误码告诉我们现在已经读到文件末尾了。我们列出读取到的数据,看看是不是如我们分析的那样: | |||||||||||||||||||||
-des:80[Enter] | 带下划线的数据恰好为1BH个 | ||||||||||||||||||||
2579:0080 | 0D 0A 0D 0A 5B 43 4F 4D-4D 4F 4E 5D 0D 0A 53 57 | ....[COMMON]..SW | |||||||||||||||||||
2579:0090 | 49 54 43 48 45 53 3D 2F-46 0D 0A 00 00 00 00 00 | ITCHES=/F....... | |||||||||||||||||||
2579:00A0 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ................ | |||||||||||||||||||
2579:00B0 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ................ | |||||||||||||||||||
2579:00C0 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ................ | |||||||||||||||||||
2579:00D0 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ................ | |||||||||||||||||||
2579:00E0 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ................ | |||||||||||||||||||
2579:00F0 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ................ | |||||||||||||||||||
可以看到DTA中只有前1BH个字节是文件中的内容,其余的都是0。这就是03H错误码所说明的问题。 跟踪至此这个文件的内容已经全部读取过了,这时FCB中的"当前记录号"为06H。在这种情况下如果我们继续执行"顺序读"功能会发生什么情况呢? | |||||||||||||||||||||
-t | |||||||||||||||||||||
AX=1403 | BX=0000 | CX=0001 | DX=0000 | SP=0000 | BP=001B | SI=0000 | DI=0000 | ||||||||||||||
DS=2589 | ES=2579 | SS=2589 | CS=258C | IP=0024 | NV UP EI PL NZ NA PE NC | ||||||||||||||||
258C:0024 | B414 | MOV AH,14 | |||||||||||||||||||
-g=24 30 | |||||||||||||||||||||
AX=1401 | BX=0000 | CX=0001 | 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 PO NC | ||||||||||||||||
258C:0030 | E2F2 | LOOP 0024 | |||||||||||||||||||
DOS返回了另一个错误码01H,含义是已经读到了文件末尾。在这种情况下FCB和DTA中的数据会有什么变化呢? | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |