2017-01-15 13 views
-1

Мне нужно прочитать 2 каталога (dir1 и dir2) и создать каталог dir1/dir2. Мой вопрос: Что делает cmp al,13? Когда я пишу mov ah,01h,int 21h, в al будет символ, который я прочитал, и это только один символ (например, 'a'), так как можно сравнить al с 0?Справочник по монтажу

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' является ASCII код возврата каретки (ввод). Эти петли считывают ввод до конца строки. – Jester

ответ

0

Символы, извлекаемые представлены их ASCII-код символа и код 13 является возврат каретки

Он тестирует характер, возвращенный вторым вызовом INT 21h, является ли возврат каретки. Если это так, вырваться из цикла, в противном случае продолжить цикл и обработать последующие символы.

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 производится клавишей ввода. –