2013-05-07 80 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