emu8086을 사용하여 화면에서 문자를 바운스 할 때 도움이 필요했습니다. 화면 크기는 (80x25 문자)입니다. 나는 그것을 대각선으로 움직일 수 있었지만 되돌아 오지 않는다. 대신에 그것은 boundry (즉, 24 번째 행)에 도달 한 후 x 축으로 직선으로 간다. 지금까지 내가 한 일이 여기에있다.어셈블리에서 문자를 바운스하는 방법
enter code here
Data_seg segment 'data'
char db 'A'
char2 db ' '
x1 db (1)
y1 db (1)
Data_seg ends
Code_seg segment 'code'
assume CS:Code_seg,DS:Data_seg
main PROC far
mov ax,Data_seg
mov ds,ax
mov cx,40
loop1:
;gotoxy
mov ah,02
mov dl,x1
mov dh,y1
mov bh,0
int 10H
;print a
mov al,char
mov dl,al
mov ah,02H
int 21H
;gotoxy
mov ah,02
mov dl,x1
mov dh,y1
mov bh,0
int 10H
;print " "
mov dl,char2
mov ah,02H
int 21H
inc x1
inc y1
;if(x1<2)||(x1>79)
mov al,x1
cmp al,2
jl ifPart
mov al,x1
cmp al,79
jge ifPart
;if(y1<2)||(y1>79)
y11:
mov al,y1
cmp al,2
jl ifPart2
mov al,y1
cmp al,24
jge ifPart2 ;jge for boundry(24)
jmp endif
ifPart:
dec x1
jmp y11
ifPart2:
dec y1
endif:
loop loop1
Code_seg ends
end main
캐릭터가 벡터를 움직여서 지금 튀고 있습니다. 그것이 반송 때 약간의 문제가 발생합니다. 그것은 24 행의 가장 왼쪽 열에있는 문자를 보여줍니다 그리고 반송. –
수정 됨 : "cmp al, 24"를 "cmp al, 23"으로 변경하여 문제 해결 (주석에 설명). 이 프로그램은 이제 완벽하게 작동합니다. 많은 도움을 주셔서 감사합니다. –
@MUHAMMADAHMEDVOHRA 약 24/23 .. DOS 출력 인터럽트 사용에 문제가 없으므로 마지막 줄을 사용할 때 화면을 "스크롤"하게됩니까? 그래픽 카드 내부를 재구성하지 않으면 텍스트 모드가 B800 : 0000에서 시작됩니다. 그래픽 카드 내부를 재구성하지 않으면 텍스트 모드가 시작됩니다. 훨씬 빠르며 VRAM 내용을 완벽하게 제어 할 수 있으므로 모든 256 VGA 문자를 인쇄 할 수 있습니다 가능한 모든 색상/깜박임 조합을 사용하십시오. 그리고 마지막 라인에서 스크롤하지 않아도됩니다 (VRAM 내용을 이동하거나 비디오 메모리 시작을 변경하여 코드를 수동으로 스크롤해야합니다). – Ped7g