2017-01-15 7 views
-1

2 개의 디렉토리 (dir1 및 dir2)를 읽고 dir1/dir2 디렉토리를 만들어야합니다. 제 질문은 : cmp al,13은 무엇을합니까? 내가 mov ah,01h,int 21h이라고 쓸 때, 알은 내가 읽은 문자가 될 것이고, 그것은 오직 한 문자 (예를 들어 'a') 일 뿐이다. 그래서 어떻게 알을 0과 비교할 수 있는가? 자신의 아스키 문자 코드 및 코드 (13)에 의해 표시되는 검색어셈블리의 디렉토리

assume cs:code,ds:data 

data segment 
mesaj1 db 10,13,'First dir $',10,13 
mesaj2 db 10,13,'Second dir $',10,13 
dir1 db 30 dup(?) 
dir2 db 30 dup(?) 
pnf db 10,13,'Path not found.$',10,13 
acd db 10,13,'Acces denied, or pathname already exists.$',10,13 
gata db 10,13,'The directory was created.$',10,13 
data ends 

code segment 
start: 
mov ax,data 
mov ds,ax 

;read the first direcory 
mov ah,09h 
mov dx,offset mesaj1 
int 21h 

mov si,0 
mov ah,01h 
int 21h 
bucla1: 
mov dir1[si],al 
inc si 
int 21h 
cmp al,13     ;HERE 
je sf1 
mov dir1[si],al 
jmp bucla1 
sf1: 
mov dir1[si],0 

;read the second directory 
mov ah,09h 
mov dx,offset mesaj2 
int 21h 

mov si,0 
mov ah,01h 
int 21h 
bucla2: 
mov dir2[si],al 
inc si 
int 21h 
cmp al,13      ;HERE 
je sf2 
mov dir2[si],al 
jmp bucla2 
sf2: 
mov dir2[si],0 

mov ah,3Bh 
mov dx,offset dir1 
int 21h 
jc eroare 

mov ah,39h 
mov dx,offset dir2 
int 21h 
jc er 
mov ah,09h 
mov dx,offset gata 
int 21h 

eroare: 
cmp ax,3 
je pathnotfound 
jmp sf 

pathnotfound: 
mov ah,09h 
mov dx,offset pnf 
int 21h 
jmp sf 

er: 
cmp ax,3 
je pathnotfound 
cmp ax,5 
je accesdenied 

accesdenied: 
mov ah,09h 
mov dx,offset acd 
int 21h 

sf: 
mov ax,4C00h 
int 21h 
code ends 
end start 
+0

'13'은 캐리지 리턴 (입력)에 대한 아스키 코드입니다. 이 루프는 줄 끝까지 입력을 읽습니다. – Jester

답변

0

문자 21H를 int로 두 번째 호출에 의해 반환되는 문자가 캐리지 리턴 있는지 여부를 테스트하는 캐리지 리턴

입니다. 그럴 경우 루프를 벗어나면 루프를 계속 진행하고 후속 문자를 처리합니다.

mov ah,01h  ; 01h = Read character 
int 21h   ; Call (do read) 
bucla1: 
mov dir1[si],al ; Store result 
inc si   ; Increase si 
int 21h   ; Call again (do read) 
cmp al,13  ; Is carriage return? 
je sf1   ; Yes, jump out of loop 
mov dir1[si],al ; Store result 
jmp bucla1  ; Loop 
sf1: 
mov dir1[si],0 : Null terminate result 

참조 : https://en.wikipedia.org/wiki/ASCII

+1

CR이 Enter 키에 의해 생성된다는 점은 주목할 가치가 있습니다. –