2013-05-07 93 views
0

我在大会读取文件错误。微软大会

在一个相当大的程序在工作,我有一点问题在这个特定的代码

ToArray proc _FH:word ; _FH File Handler ;non-void function returns -1 if error 
LOCALS 
push AX BX CX 
MOV BX, _FH 
MOV CX, 400 
MOV DX, offset FileBuffer 
MOV AH, 3FH 
INT 21H 
JC ErrorReading 
call puts, offset Read_Success 
JMP DONE 
ErrorReading: 
call puts, offset Read_Error 
MOV DX,-1 
DONE: 
pop CX BX AX 
ret 
ToArray endp 

我有{1 2 5 6}在打开的文件中,但在呼叫INT 21H后,它仅使用80241 80241填充阵列。

为什么会发生这种情况:?

+0

你在看什么缓冲区? 80241显然不适合一个字节,那么你是否将数据视为单词(或双字)?那80241是十进制还是十六进制?执行中断后,“AX”的值是多少? – Michael 2013-05-07 17:03:44

+0

缓冲区是一个正在读取的字符整数虽然.. 从1 3 5 6我有8241 8243 8245 3382 10 所有十进制值和AX等于9h:? – geekybedouin 2013-05-07 17:15:50

回答

2

从具有1 3 5 6我有8241 8243 8245 ...

这看起来像正确的数据给我。
十六进制查看时的十进制数8241 8243 8245应为0x2031 0x2033 0x20350x20是空格字符的ASCII码,0x31'1'的ASCII码,依此类推。所以你在看字符串"1 3 5 "。只是你选择了一个很难看到的数据表示。
除非文件使用Unicode或其他多字节字符编码,否则最好将字符视为字节而非单词。

+0

啊哈我看到了..好吧,我只需要添加这些数字,我可以做到这一点,而我得到的ASCII码:? – geekybedouin 2013-05-07 17:55:49

+0

逐字节处理缓冲区,检查一个字节是否在'0'..'9'范围内 - 如果是,则减去'0'并将结果用于需要执行的任何操作。 – Michael 2013-05-07 18:02:33

+0

阿哈,,谢谢你Mate :) – geekybedouin 2013-05-07 18:05:40