2012-09-07 3 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 여야합니다 ...하지만 유니 코드에서는 225입니다 ... 특히 ASCII가 아닌 ANSI로 저장하도록 메모장에 말하고 있기 때문에 이상합니다.

+0

MS-DOS를 사용하고 있습니까? 와우, 너 과거인가? –

+0

127 이상은 ASCII가 아닙니다 .... – dda

+0

@ Michael-O 네, 어셈블리 코스입니다. – dhcarmona

답변

3

혼란스러운 코드 페이지입니다.

MS-DOS 전자는 ANSI 모드에서 코드 (130) 그러나 메모장입니다 코드 페이지 437을 사용 é는 233

ASCII 만 127까지 정의 된 코드를, 그래서 그런 일이 없다 code page 1252를 사용 확장 된 ASCII는 표준화되지 않았기 때문에 사람들마다 다른 방식으로 확장됩니다. 특히, MS-DOS와 Windows는 효과적으로 다른 확장 ASCII 테이블 인 다른 코드 페이지를 사용합니다.

MS-DOS를 사용하여 파일을 조작하려면 코드 페이지 437을 사용하십시오. Windows를 사용하여 파일을 조작하려면 코드 페이지 1252를 사용하십시오.

그러나 MS-DOS와 Windows에서 모두 동일한 것으로 해석되는 파일을 가져올 수 없으므로 영어와 프랑스어가 모두 같은 것으로 해석 될 수있는 책을 쓸 수없는 것과 같은 방식입니다.