2016-11-18 2 views
1

메신저하지만이 코드를 대각선으로 알파벳 순서로 완벽하게 인쇄 할 수 없습니다.이 코드로 나를 도울 수 있습니까? program output screenshot어떻게 MASM을 사용하여 대각선으로 알파벳 문자를 인쇄 할 수 있습니까?

.model small 
.stack 
.code 

start: 


mov cx,26 
mov bh,00 
mov ah,02h 
mov dl,41h 
mov dh,02h 
again: 
int 10h 
int 21h 
inc dl 
inc dh 
loop again 

mov ah,4ch 
int 21h 
end start 
+0

클릭 코드의 출력을 볼 수있는 프로그램 출력의 스크린 샷이다. – Rhye

+0

'int 10h/ah = 02h'는'dl'을 커서 수평 위치로 사용합니다. – Michael

+0

변경해야 할 사항은 무엇입니까? – Rhye

답변

1

바이오스 기능 02H (에서는 SetCursor)과 DOS 기능 02H (WriteCharacter) 모두 매개 변수로 DL 레지스터를 사용한다는 사실에서이 코드 줄기를 가진 모든 문제. 불행하게도이 경우에는 의미가 다릅니다. 몇 가지 해결책이 있습니다. 무료 레지스터 BL을 사용하여 별도의 문자 코드를 유지하는 것이 Ped7g에 의해 제안되었습니다.

I 전혀 DOS 출력 함수를 사용하고, BIOS 기능 0EH (TeletypeCharacter)으로 디스플레이에 기록되지 않고 존재하는 간단한 방법. 이 함수는 DL을 매개 변수로 사용하지 않습니다. 오히려 AL 레지스터를 사용합니다.

.model small 
.stack 
.code 

start: 

mov al, "A" <<<First character 
mov bh, 0  <<<Display page 0 
mov cx, 25  <<<Iteration count 
mov dl, 0  <<<Start at column 0 
mov dh, 0  <<<Start at row 0 
again: 
mov ah, 02h <<<BIOS function SetCursor 
int 10h 
mov ah, 0Eh <<<BIOS function TeleType 
int 10h 
inc dl   <<<Next column 
inc dh   <<<Next row 
inc al   <<<Next character 
loop again 

mov ah, 4Ch 
int 21h 
end start 

표준 텍스트 화면에서 작업 할 때 80 열 25 행이 있습니다. 커서를 화면 밖으로 가져 가면 안됩니다! 프로그램이 수행해야하는 가장 반복 그러므로 25