2012-09-07 31 views
3

我需要一些幫助。我需要用ASCII處理純文本文件,並返回每個代碼的字符數(有多少個a,多少個b等等)。它現在幾乎完美地工作。8086裝配體Int 21h和擴展ASCII字符

我現在有一個問題,如果文件上有擴展的ASCII字符,當我使用3fh服務中斷時,它不會很好地讀取它們。

例如,如果文件具有é(ascii代碼130),它將讀取一個ß(ascii代碼225)。我害怕我使用中斷錯誤,但我不知道該怎麼做,所以在這裏的一點幫助將不勝感激。調試也沒有幫助,因爲中斷沒有錯誤地執行,它只是在緩衝區中返回錯誤的值。

這是我用來讀取文件的確切代碼。我有前一箇中斷的句柄。

 xor ax,ax 
     lea dx, buffer   
     mov ah,3fh    
     mov bx,handle   
     mov cx,4096   
     int 21h    

謝謝!

編輯

我發現了問題,但不知道如何解決它。原來這個字符讀作225,它不是é,而是á。根據我找到的每個ASCII表,á的代碼應該是160 ...但是它在Unicode中是225 ...這很奇怪,因爲我特意告訴記事本將它保存爲ANSI,而不是ASCII ...

+0

您正在使用MS-DOS?哇,你從過去? –

+0

127以上的任何內容都不是ASCII .... – dda

+0

@ Michael-O是的,這是一個彙編課程。 – dhcarmona

回答

3

您在混淆代碼頁。

MS-DOS使用代碼頁437,其中E爲代碼130,但記事本在ANSI模式下使用code page 1252,其中E是碼233

ASCII僅被定義多達127個,所以沒有這樣的事作爲130或160的ASCII圖表。擴展ASCII不是標準化的,所以不同的人以不同的方式擴展它。特別是,MS-DOS和Windows使用不同的代碼頁,它們是有效不同的擴展ASCII表。

如果您打算使用MS-DOS來操作您的文件,那麼請使用代碼頁437.如果您打算使用Windows來操縱您的文件,請使用代碼頁1252(或者更好,使用Unicode。)

但是,您無法在MS-DOS和Windows中將解釋的文件解釋爲相同的方式,就像您無法編寫可以在英文和法文中解釋相同的書一樣。