2011-05-08 3 views
0

텍스트 모드 80x25에서 작업 중이며 인쇄하기 위해 0으로 끝나는 일부 문자열이있을 것으로 예상됩니다 (전에 CRLF 없음). 다음 줄로 어떻게 넘어갈 수 있습니까? 내가 실제로 필요한 것은 es : edi (0 : b8000) 오프셋을 다음 승수 160에 맞추는 것이지만 어떻게 든 그것을 영리하게하는 방법을 모른다. 이미이 작업을 수행했거나 아이디어가 있으면 나에게 알려 주시거나 나에게 힌트를주십시오. 나는 분할없이 어떤 인터럽트 나 솔루션도 원하지 않는다.새 줄을 구현하는 방법

+2

필자는 어셈블리 프로그래머가 아니지만 오프셋에 160을 더할 수 없으며 나머지를 'DIV'를 사용하여 계산하고 오프셋에서 뺍니다. –

+0

음침한 생각이 들었습니다.하지만 적어도 2 개의 레지스터가 덮어 쓰여졌 기 때문에 그다지 짧지는 않습니다. 그렇지만 비트 매싱 방법이 없다면이 방법으로 할 것입니다. – Pyjong

+0

또 다른 접근법은 간단합니다. 2000 바이트 룩업 테이블 인 offset -> next 160-multiple을 사용하십시오. –

답변

0

앤더스, 내가 같은 것을 할 거라고 말한대로 들으 스투 :

  1. 이 줄을 추가입니다

    nextlineoffset = offset + (160 - ((offset + 160) mod 160)) 
    

  2. 멀리 빼기 상쇄 여분는
오프셋

하나의 디비전을 사용하지만 곱셈의 필요성을 없애줍니다.

+0

만약 160이 128 + 32가 항상 같은 2 비트 인 사실을 사용할 수 있다면 오히려 생각하고있었습니다. 그래서 어떻게 든 마스크를 제거하고, 설정하고/지워 버리면 모든 것을 0으로 만듭니다. 그런 다음 160을 추가하십시오. – Pyjong

0

switch과 같은 구조는 어떨까요? 80x25 화면에서 160 개의 문자 청크에만 관심이있는 경우에는 13 개의 사례 만 고려해야하며 이는 CMP의 관리 가능한 (렌더링 가능) 시퀀스 및 조건부 점프 여야합니다.

+0

아이디어가 훌륭합니다. 불행히도 비디오 RAM이 160 문자 덩어리가 아니지만 색상 문자 쌍이 25 가지이므로 25 * (5 + 5 + 2) (5 cmp, 5 mov 및 2 점프 점프) 바이트 및 나는 부트 로더에서 512 바이트 공간을 얻고 stil 할 일이있어. 분할 방식은 내가 시도한 것에 대해 각 줄 바꿈에서 14 바이트와 같을 것입니다. – Pyjong

+0

나는 마지막으로 문자 인쇄를 계산하고 그것이 이미 80인지 여부를 확인하는 것이 가장 효과적이라고 생각합니다. 그 비교가 좋지는 않지만 끊임없이 9 바이트는 내가 원했던 것입니다. – Pyjong

관련 문제