2017-09-08 1 views
2

낮은 수준의 어셈블리 (16 비트)로 코딩 중이며 사용자가 프로그램과 같은 "페인트"에서 배경색을 변경할 수있게하려고합니다. 이미 모든 WASD 및 색상, 같은 작업이 공간 코드 (당신이 커서 위치 녹색 확인) :어셈블리에서 현재 커서 위치의 배경색을 변경하는 방법

mov ah, 09h 
mov bl, 00100101b 
mov cx, 1d 
int 10h 

을하지만 다시 'X'또는 'Q'코드를 변경하고자 할 때 :

mov ah, 09h 
mov bh, 0 
mov bl, 00010000b 
mov cx, 1d 
int 10h 

배경색이 파란색으로 바뀝니다. 그러나 그것은 또한 블록에 'x'또는 'q'를 넣습니다!

배경색을 파란색으로 (그리고 커서는 검은 색으로 만) 만들 수 있고 'x'또는 'q'(x 또는 q 문자 사용)를 배치하지 않을 수 있습니까?

+2

아 = 9 (BL)에 의해 지정된 속성을 사용하여 현재 위치 아에서 문자를 작성하는 것입니다, INT의 10H를 사용. 'x'또는 'q'를 쓰지 않으려면 아에 다른 값을 입력하십시오. 예를 들어 공백을 사용할 수 있습니다 (mov ah, ''). 또는 기존 문자를 읽고 새 색상을 사용하여 다시 쓰고 싶을 수도 있습니다. int 10, ah = 8은 기존 값을 읽는 데 사용할 수 있습니다. int 10을 사용하는 것은 성능에 대해 알려지지 않습니다. 더 나은 성능을 위해 많은 DOS 프로그램이 비디오 메모리에 직접 읽거나 씁니다. –

+0

고마워요 ....하지만 비디오 메모리에 직접 쓰거나 읽는 방법 (미안, 멍청한 소리가 들린다면 :) :) –

+0

누구나 어떤 시점에서 멍청한 사람입니다. 사용할 수있는 라이브러리가 있지만 일부 문서를 읽으려면 http://webpages.charter.net/danrollins/techhelp/0089.HTM –

답변

2
mov ah, 09h 
mov bh, 0 
mov bl, 00010000b 
mov cx, 1d 
int 10h 

이 조각은 AL 등록 화면에에 어떤 문자 을 작성합니다! 텍스트 비디오 화면에는 파란색 배경색과 검은 색 전경색이 표시됩니다.

배경색 만 변경하려면 먼저 화면의 내용을 읽어야합니다. 그 목적을 위해 BIOS 기능 08H를 사용

mov bh, 0   ;Display page 
mov ah, 08h 
int 10h   ;Gives character in AL (keep it!), and attribute in AH 
mov bl, 00010000b ;Blue background 
and ah, 15  ;Keep existing foreground color in low nibble 
or bl, ah  ;Combine in new attribute byte 
mov cx, 1 
mov ah, 09h 
int 10h 
관련 문제