2017-01-15 48 views
-1

我必須讀取2個目錄(dir1和dir2)並創建dir1/dir2目錄。 我的問題是:cmp al,13做什麼?當我寫mov ah,01h,int 21h時,al將是我讀的字符,並且它只有一個字符(例如'a'),所以如何可以將al與0進行比較?檢索由其ASCII字符代碼和代碼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'是回車(輸入)的ASCII碼。該循環讀取輸入直到行結束。 – Jester

回答

0

字符是一個回車

它是測試你的第二個電話返回到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是由輸入鍵生成的。 –

相關問題