📄 dp2.asm
字号:
stack segment
tak db 256 dup(0)
stack ends ;初始化堆栈段
;*****************************************************************
data segment
enter db 0dh,0ah,'$'
newmem db ?
file db ' design numbers:', '$'
diskrec db 7680 dup(0)
buff db 10 dup (?),'$'
count db 0
count1 dw ?
count2 dw ?
count3 dw ?
err db 'disk access error!!!','$'
data ends ;初始化数据段
;*****************************************************************
code segment ;定义代码段
assume cs:code, ds:data, ss:stack
main:
mov ax, data
mov ds, ax
mov es, ax
call disload
exit:
mov ah, 4ch ;主程序返回
int 21h
ret
;************************************************* ;列磁盘目录子程序
disload proc near
mov cx, 3
retry:
push cx
mov bx, offset diskrec
mov ax, 020eh ;02 中断号14 扇区 数
mov dx, 0 ;DH磁头号,DL磁盘号
mov cx, 15 ;CH 磁道号,CL 起始扇区号
int 13h ;
pop cx
jnb readok
loop retry
error:
lea bx, err
call display1
ret
readok:
mov count ,0
next: mov al, byte ptr[bx]
cmp al, 0e5h ;与标志比较
jz empty
cmp byte ptr[bx], 0
jz empty
push bx
mov dl,3
blank1:
mov al,' ' ;显示空格
call dispchar
dec dl
jnz blank1
mov dl, 8
pname:
mov al,[bx]
call dispchar ;显示文件名
inc bx
dec dl
jnz pname
mov dl,3
blank2: mov al,' '
call dispchar
dec dl
jnz blank2
mov dl, 3
ename:
mov al,[bx]
call dispchar ;显示扩展名
inc bx
dec dl
jnz ename
mov dl, 6
blank:
mov al, ' ' ;显示空格
call dispchar
dec dl
jnz blank
plen:
add bx,11h ;显示长度
mov di,offset buff
mov cx,7
p0: mov byte ptr [di],' '
inc di
loop p0
mov di,offset buff +9
mov ax,[bx]
mov dx,[bx+2]
call chang
mov dx,offset enter
mov ah,09h
int 21h
inc count3
pop bx
empty: add bx,32
inc count
cmp count,240
je t1
jmp next
t1:
mov di,offset buff
mov cx,9
p3: mov byte ptr [di],' '
inc di
loop p3
mov dx,offset enter
mov ah,09h
int 21h
mov dx,offset file
mov ah,09h
int 21h
mov ax,count3
mov dx,0
mov di,offset buff+9
call chang
; mov ah,7h
; int 21
; cmp al,'u'
; jne t2
; sub bx,800
; jmp next
t2: ; cmp al,'d'
; jne t3
; add bx,768
t3: ; jmp next
ret
disload endp
;**********************************************
chang proc near
p1: cmp dx,0
jne p6
cmp ax,10
jb p2
p6: sub ax,10
sbb dx,0
add count1,1
adc count2,0
cmp dx,0
jne p1
cmp ax,10
jae p1
add al,30h
mov byte ptr [di],al
dec di
mov ax,count1
mov count1,0
mov dx,count2
mov count2,0
cmp dx,0
jne p1
cmp ax,10
jnb p1
p2: add al,30h
mov byte ptr [di],al
mov bx,offset buff
mov cx,10
p5: mov dl,byte ptr [bx]
cmp dl,' '
je p4
mov ah,2h
int 21h
p4: inc bx
loop p5
ret
chang endp
;****************************************
display1 proc near
mov cx, 30
disp:
mov al, [bx]
call dispchar
inc bx
loop disp
mov al, 0dh
call dispchar
mov al, 0ah
call dispchar
ret
display1 endp
;******************************************
dispchar proc near
push bx
mov ah, 14
int 10h
pop bx
ret
dispchar endp
;***************************************
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -