2016-06-27 1 views
1

어리석은 질문의 종류이지만 그럼에도 불구하고 누구나 cx와 dx 레지스터가 int 10h에서 ah = 6/7 (둘 다 동일한 변수를 사용하여 다른 방향으로 스크롤 할 수 있음)의 용도를 설명 할 수 있습니까?Int 10h, AH 6h/7h의 인수는 무엇을 의미합니까?

모든 곳

내가 봤는데 그냥이 비슷한 말한다 :

CH = 상위 행 번호, CL = 왼쪽 열 번호, DH = 낮은 행 번호, DL은 = 오른쪽 열 번호를

이것은 나에게 많은 의미가있는 것은 아니며, 누군가 나처럼 이해할 수없는 방식으로 이것을 설명 할 수 있습니까?

+1

창 (화면의 직사각형 부분)을 스크롤 할 수 있습니다. 해당 좌표로 창을 지정합니다. 그냥 가서 시도해보십시오 :) – Jester

답변

1

16 비트 레지스터 CX는 두 개의 8 비트 반으로 나눌 수 있으며, CL 및 CH라고합니다. CL은 상위 8 비트 (CH igh) 인 반면 CL은 하위 8 비트입니다 (니모닉은 CL ow입니다).
DX 레지스터도 마찬가지입니다. 하위 8 비트는 DL에 있고 상위 8 비트는 DH에 있습니다. 실제로

의 86의 주요 범용 레지스터 - EAX, EDX, ECX, 그리고 4 EBX-이 8 비트 및 16 비트 중복 별명 다음에 대한

------------------------------------ 
|    EAX    | (32 bits) 
----------------------------------- 
       |  AX  | (16 bits) 
       ------------------- 
       | AH | AL | (8 bits) 
       ------------------- 

그래서, 설명서를 int 10h 함수는 CX (CL)의 하위 8 비트가 윈도우의 가장 왼쪽 열을 포함하는 반면 CX (CH)의 상위 8 비트는 윈도우의 최상단 행을 포함한다는 것을 알려줍니다. DX (DL)의 하위 8 비트는 창의 맨 오른쪽 열을 포함하는 반면 DX (DH)의 상위 8 비트는 창의 맨 아래 행을 포함합니다.

즉, 왼쪽, 위, 오른쪽 및 아래쪽 경계로 직사각형을 설명하는 함수 값을 전달합니다. CX는 윈도우의 왼쪽 위 좌표를 지정하는 두 개의 8 비트 값을 포함하고 DX는 윈도우의 오른쪽 아래 좌표를 지정하는 두 개의 8 비트 값을 포함합니다.

(. 내가 "창은"여기, 내가 "화면의 사각형 영역을 스크롤 할"을 의미 말)

7

텍스트 모드 '팔자에 그려진 빨간색 사각형 창문이 눈을 찔러 환각 사진을 고려 :

Rectangular red window

각 흰색 - 파란색 사각형은 문자 셀을 나타냅니다. 셀은 카운터 우측 상단에 있으며 상단 하단입니다. 위쪽에있는 숫자는 아래쪽으로 읽으면 왼쪽 가장자리에서 셀 간격을 둡니다 .
왼쪽의 숫자는 위쪽에서 셀 간격을 나타냅니다.

각 셀 2 고유 (위에서 왼쪽 거리 거리)는 상기 또는 단순히 (또는 심지어 좌표)를 좌표 좌표라고한다.
X으로 왼쪽과 관련 Y로 위쪽에서 거리와 모든 뭔가-X로 폭하고 모든 뭔가-Y로 높이와 관련된에서 거리를 호출하는 관습이다.

큰 빨간색 직사각형은 입니다.
Windows의 크기와 위치는 두 가지입니다. 따라서 윈도우는 트리플 (왼쪽 위 모서리의 위치 좌표, 크기 -X, 크기 -Y)으로 식별 할 수 있습니다.
예를 들어, (30, 8)에서 시작하는 빨간색 창은 ((30,8), 22,7)으로 표시 할 수 있습니다. 너비는 22 셀, 높이는 7 셀입니다.

창을 설명하는 또 다른 방법은 왼쪽 상단 모서리와 오른쪽 하단 모서리입니다.
이 경우 빨간색 창이 ((30, 8), (51, 14))입니다.


서비스 int 10h/AH=06h는 빨간색 창까지 내부 컨텐츠를 이동하는 데 사용할 수 있습니다.
이동시킬 창은 어디에 있는지, 그리고 두 번째 표기법을 사용하므로이를 알려야합니다.

CLCH 형태와 CH에서의 CL, Y를 좌측 상단 좌표, X 유지 쌍.
DLDH는 DH의 DL에서 오른쪽 아래 좌표 유지 쌍 X, Y를 형성한다.

이 코드는 제대로 레지스터 (해당 두 버전 모두)

;Easy version    ;Normal version 
mov cl, 30    mov cx, 081eh 
mov ch, 8     mov dx, 0e34h 
mov dl, 52 
mov dh, 14 

루틴은 사소한 서비스의 다른 입력을로드하지만 BH 위해 지금 우리는 제로로 설정한다.

mov ax, 0603h  ;Scroll three lines up 
xor bh, bh 
mov cx, 081eh 
mov dx, 0e34h 
int 10h 

결과는 다음과 같습니다 :

Window scrolled

우리는 내부 내용이 창을 세 줄에 의해 스크롤 된 것을 볼 수 있습니다
는 서비스를 호출 할 수 있습니다.
창 외부의 아무 것도 건드리지 않았습니다.

또한 아래에서 "shift"된 라인은 검은 색 라인입니다.
입력이 BH인데, 여기에는 해당 선을 그리는 데 사용 된 속성 (색상과 배경색의 조합)이 포함됩니다.

예를 들어, 속성 0e0h은 밝은 노란색 을 지정하고 사용합니다.

Window scrolled up with yellow lines

mov ax, 0603h  ;Scroll three lines up 
mov bh, 0e0h  ;Yellow lines 
mov cx, 081eh 
mov dx, 0e34h 
int 10h 

마지막 AL의 값, 즉 윈도우의 높이와 동일 라인의 수가 전체 윈도우를 스크롤하는 제로 일 수있다. 서비스 int 10h/AH=07h 근거를 들어


은 동일하지만 윈도우는 아래 스크롤됩니다. 셀 단위


1 .
숫자를 표시하는 데 사용되는 셀에도 좌표가 있습니다.
실제로 창처럼 보입니다.
이 컨텍스트에서 고휘도 비트가 설정되었으므로

+2

좋은 답변입니다. 쓰려면 상당한 시간이 걸렸을 것입니다. –

+0

좋아, 지금 사용하는 방법을 이해합니다. 내 텍스트 화면을 지우려면이 프롬프트가 필요합니다. 그러나 그것을 사용할 때 커서가 사라지고 문자열을 인쇄하려고하면 화면에 나타나지 않습니다. 그것을 고치는 방법을 알고 있습니까? 나는 int로 10 ah 2 시도했지만 dh와 dl은 0으로 설정했지만 여전히 작동하지 않습니다. – Hadarsi320

+0

@ Hadarsi320 나는 당신이 무엇을 요구하고 있는지 이해하지 못한다고 생각합니다. 후속 질문이있는 경우 모든 관련 정보와 적절한 형식으로 의견을 게시하십시오 (예 : 새 질문). 그것은 응답에 도움이 될 것입니다. –

관련 문제