我想打印当前的工作目录及其内容。该程序将在x86,16位Intel语法,DOS程序集中使用中断完成。我将使用的汇编程序将是Turbo汇编程序。到目前为止,这是我的代码(不多):
ASSUME cs:code, ds:data
data segment
buffer db 64 dup (0) ; buffer for the current directory name
data ends
code segment
start:
mov ax, data ;
mov ds, ax ; move data segment into ds, es registers
mov es, ax ;
mov dl, 0 ; default drive
mov si, offset buffer ; put current directory in buffer
mov ah, 47h ; GET CURRENT DIRECTORY
int 21h
; appending '$' to buffer end
; search until 0 found
mov cx, 64 ; search over all buffer
cld ; starting from the beginning
end_string:
lodsb ; get current byte in al register
cmp al, 0 ; compare it with 0
jne continue ; if not equal jump to continue label
mov al, 36 ; if equal copy 36('$' - ASCII) in al
mov di, si ; set destination index to source index
sub di, 1 ; decrement di
stosb ; store in es:di the value contained in al
mov cx, 1 ; stop looping by setting cx to 1
continue:
loop end_string
; print string obtained
mov dx, offset buffer ; ds:dx - string start
mov ah, 09h ; WRITE STRING TO STANDARD OUTPUT
int 21h
mov ax, 4c00h ; end program with exit code 0
int 21h
code ends
end start
我设法让它运行并显示当前的工作目录。但现在我不知道如何获取他的子目录和目录中包含的文件。所以我的问题是:我如何得到它们?
答案 0 :(得分:1)
使用DOS服务FindFirst
(0x4e
)和FindNext
(0x4f
)获取给定目录中的条目列表。然后,您可以根据返回的属性区分子目录和文件。
答案 1 :(得分:1)
但在致电“FindNext”之前,请先获取DTA DTA - 磁盘传输区:http://stanislavs.org/helppc/dta.html
RBIL-> inter61b.zip-> INTERRUP.F
--------D-212F-------------------------------
INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
AH = 2Fh
Return: ES:BX -> current DTA
Note: under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
SeeAlso: AH=1Ah
德克