2016-10-07 4 views
-2

나는 tasm을 사용하는 x8086 용 어셈블리를 사용하여 약간의 게임을해야하는데, 게임을 이기기 위해 일부 블록을 이동해야하는 미로와 같은 게임입니다. 미로를 .txt 파일에서 읽어야하고 화면에로드해야합니다 (표준 25x80이어야합니다), 문제는 txt의 문자를 "감지"하는 방법에 대한 아이디어가 없다는 것입니다. 예를 들어, 벽은 "0"으로 표시되고 문자는 "&"으로 표시되므로 화살표 키를 누를 때 "&"문자를 움직일 수 있습니까? 이미 파일을로드하고 화면에 표시되지만 이동 방법을 모르겠습니다. 나는 텍스트 모드에서 int 10h와 int 16h를 사용하여 그것을해야한다, 고마워.어셈블리 문자 모드에서 문자를 어떻게 움직일 수 있습니까? (tasm x8086)

+0

파일 바이트의 배열입니다. 내용은 0-255 숫자이며 "텍스트"파일은 동일하며 텍스트 인코딩을 사용하여 해당 숫자의 의미를 지정합니다. 귀하의 경우 ASCII 인코딩으로 작업하고 있으므로 '0. #. & 0 '을 포함하는 파일의 시작은 48, 46, 35, 46, 38, 46, 48 바이트 순서입니다. 파일을 메모리에 저장하면이 바이트가 메모리에 저장되어 있고 주소를 계산할 수 있습니다 (라인의 파일 정의는 특정 [x, y]에 대한 배열로 오프셋을 계산하는 방법을 결정합니다). 예를 들어'cmp byte ptr [bx], '&''bx와 38의 값을 38로 비교하십시오. – Ped7g

답변

1

미로가 이미 80x25 텍스트 스크린에 표시되면 문자를 읽는 것이 매우 간단합니다. 그런 다음 그것을 읽을

mov dl, 40  ;Column number of the middle of the screen 
mov dh, 12  ;Row number of the middle of the screen 
mov bh, 0  ;Display page 
mov ah, 02h ;Function number 
int 10h 

: : 이제

mov bh, 0  ;Display page 
mov ah, 08h ;Function number 
int 10h 

먼저 당신이 (당신이 후하고있는 위치의 행과 열 번호를 변경) 읽고 싶은 커서를 문자 코드는 AL 레지스터에서 찾을 수 있습니다.
AH 레지스터는이 문자의 전경색과 배경색을 알려줍니다.

이 위치는 당신의 문자가 포함 된 경우, 쓰기 테스트하려면 :

cmp al, "&" 
je YES 

그냥 화면에 공간을 쓰기 화면에서 문자를 제거하려면 :

mov cx, 1  ;Repetition count 
mov al, " " ;Character code 
mov bh, 0  ;Display page 
mov ah, 0Ah ;Function number 
int 10h 
+1

저는 비디오 메모리에서 문자를 읽지 않습니다. 그것도 천천히 직접, 그리고 물마루 BIOS int'10h' 그것은 대단히 느립니다. 나는 그것이 텍스트 모드 게임에 대해서는 중요하지 않다는 것을 안다. 그러나 이것은 권장할만한 것이 아니라 "가능한 것"으로 보여 져야만한다. PC XT 시스템에서는 메모리에 오프 스크린 버퍼가 있거나 적어도 b800 : 0000 주소를 통해 VRAM에 직접 액세스하는 것이 좋습니다. 어쨌든, OP가 데이터가 컴퓨터 메모리에 저장되는 방식을 이해하지 못한다는 사실에 더욱 놀랐습니다. VRAM을 읽는 것은 이러한 기초를 뛰어 넘는 것입니다. (올바른 답변, 올바른 솔루션보다 50 배 느림) – Ped7g