내 정보는 here에서옵니다. 할당은 20 문자를 초과하지 않고 그 문자를 대문자로 변환 한 다음 대문자로 입력을 인쇄하는 프로그램을 요구합니다.인터럽트 21, AH = 0ah 사용 방법을 모르겠 음
int21/AH = 0ah에서 입력에 액세스하는 방법을 알 수 없습니다. 위에 링크 된 내용을 이해하지 못한다면 더 정확한 질문을 할 수 없습니다. 누군가 설명 할 수 있습니까? 또한 차이가 있다면 TASM을 사용하고 있습니다. 또한, 나는 freedos에서 이것을 테스트하고있다.
갱신 1 : 당신의 도움에 좋아
, 덕분에, 나는 인터럽트가 설정되어야하며 작동하는 방식을 이해 생각한다.
설정 : 나는 DS를 지정해야 :이 버퍼 내가 DS를 설정해야
존재 할 DX : (버퍼에 저장할 수있는 문자의 최대 수를 설정) 20 DX
내가 DS를 설정해야합니다 : DX + 1
는 사실 int21 전화/AH는 = DS로 이동합니다 0AH, (어떻게 든에서 읽을 문자의 최소 수를 설정 생각) 0 : DX를하고 사전 설정된 바이트를 해석하십시오. 이 입력을 대기하는 동안은 프로그램을 정지한다
int21/AH = DS에서 채울 0AH : DX
(n은 문자 입력의 수가 '\ r에 "포함하다) 내 입력과 + 2 + N내 질문은 지금, 어떻게해야합니까? 나는 x86 Assembly Language Reference를 다시 살펴 보았지만 아직 도움이되는 것을 찾을 수 없었다.
코드 지금까지
assume cs:code,ds:code
code segment
start:
mov ax,code ;moves code segment into reg AX
mov ds,ax ;makes ds point to code segment
mov ah,0ah
int 21h
mov ax,1234h ;breakpoint
mov ah,9
mov dx,offset message
int 21h
endNow:
;;;;;;;;;;ends program;;;;;;;;;;
mov ah,0 ;terminate program
int 21h ;program ends
message db 'Hello world!!!',13,10,'$'
code ends
end start
그러면 단일 문자로 읽는 int21/AH = 1h와 같이 작동합니다. 나는 그 인터럽트가 AL을 레지스터에 넣는다는 것을 안다. 캐릭터 버퍼가 어디에 있는지 어떻게 알 수 있을까요? –
또한 방금 깨달았습니다. 오프셋 테이블은 실제 문자 데이터가 메모리에 반환 데이터가있는 곳으로부터 2 비트 또는 바이트 (아마도 바이트) 떨어져 시작 함을 의미합니다. 생각? –
예, 실제 입력은 DS : DX + 2에서 시작합니다. 그러나이 파일은 해당 입력을 무시하고 해당 함수를 사용하여 실행을 일시 중지합니다. –