Assembly 程序集中的目录

Assembly 程序集中的目录,assembly,x86,dos,Assembly,X86,Dos,我必须读取2个目录(dir1和dir2)并创建dir1/dir2目录。 我的问题是:cmpal,13做什么?当我写mov-ah,01h,int-21h时,in-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(?) d

我必须读取2个目录(dir1和dir2)并创建dir1/dir2目录。 我的问题是:
cmpal,13
做什么?当我写
mov-ah,01h,int-21h
时,in-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

检索到的字符由其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

参考:

13
是回车的ascii码(回车)。循环读取输入直到行尾。值得注意的是,CR是由enter键生成的。