T_LASTDRIV db 0dh,0ah,'Lastdrive $'
data ends
stk segment stack
db 256 dup(0)
stk ends
code segment para public 'code'
outtitle macro Title ;вывод на печать строки, оканчивающейся символом $
push ax
push dx
mov ah,9
lea dx,Title
int 21h
pop dx
pop ax
endm
outstring macro String,ilength
push ax
push cx
push dx
push bx
mov ah,40h
mov bx,1
mov cx,ilength
mov dx,offset String
int 21h
pop bx
pop dx
pop cx
pop ax
endm
asciiz_input proc ; ввод строки ASCIIZ c клавиатуры
; входной параметр- адрес строки
push bp
mov bp,sp
push si
push bx
push dx
push ax
mov bx,[bp+4]
mov byte ptr [bx],0FEh
mov ah,0Ah
mov dx,bx
int 21h
inc bx
xor ax,ax
mov al,[bx]
inc bx
mov [bp+4],bx
add bx,ax
mov [bx],byte ptr 00h
pop ax
pop dx
pop bx
pop si
pop bp
ret
asciiz_input endp
asciiz_print proc ; печать строки, оканчивающейся нулём или символом $
assume cs:code,ds:data,ss:stk,es:data
push bp
mov bp,sp
push ax
push cx
push dx
push di
xor cx,cx
mov di,[bp+4]
circ: cmp byte ptr [di],00h
je print
cmp byte ptr [di],'$'
je print
inc cx
inc di
jmp circ
print:
cmp cx,00h
je exit_p
mov ah,40h
mov bx,1
mov dx,[bp+4]
int 21h
exit_p: pop di
pop dx
pop cx
pop ax
pop bp
ret
asciiz_print endp
outnumber macro Title,Source,Buffer,ilength
local circle ; печать числа Source, хранящегося в памяти, в 16-ричном виде
local continue1 ; длина исходного числа ilength байт
local continue2 ; Buffer - буферный массив длиной не менее ilength*2
push ax ; Title - заголовок
push cx
push dx
push bx
push si
push di
mov ah,9
mov dx,offset Title
int 21h
mov cx,ilength
mov bx, offset Source
mov si,ilength
sub si,1
mov di, offset Buffer
circle :
mov al,[bx][si]
mov dl,al
shr al,4
add al,30h
cmp al,39h
jle continue1
add al,7h
continue1:
mov [di],al
inc di
mov al,dl
and al,0fh
add al,30h
cmp al,39h
jle continue2
add al,7h
continue2:
mov [di],al
inc di
dec si
loop circle
mov byte ptr [di],26h
mov ah,40h
mov bx,1
mov cx,ilength*2
mov dx,offset Buffer
int 21h
pop di
pop si
pop bx
pop dx
pop cx
pop ax
endm
hconvert proc ; преобразование строки байт в символьный формат: 16-форму с завершающим нулевым символом
; параметры в стеке:
; длина исходного массива, байт
; исполнительный адрес источника
; исполнительный адрес приёмника
push bp
mov bp,sp
push ax
push bx
push cx
push dx
push si
push di
mov cx,[bp+8] ; длина исходного массива(в байтах)
mov bx,[bp+6] ;исполнительный адрес источника
mov di,[bp+4] ;приёмник(назначение)
xor si,si
lp :
mov al,[bx][si]
mov dl,al
shr al,4
add al,30h
cmp al,39h
jle continue1
add al,7h
continue1:
mov [di],al
inc di
mov al,dl
and al,0fh
add al,30h
cmp al,39h
jle continue2
add al,7h
continue2:
mov [di],al
inc di
inc si
loop lp
mov byte ptr [di],00h
pop di
pop si
pop dx
pop cx
pop bx
pop ax
pop bp
ret
hconvert endp
main proc
assume cs:code,ds:data,ss:stk,es:data
mov ax,data
mov ds,ax
circle:
outtitle M_CVT
outtitle M_MCB
outtitle M_QUIT
mov ah,00h
int 16h
cmp ah,01h
jne L1
jmp exit
L1: cmp ah,02h ; CVT
je cvt
jmp L2
cvt:
mov ah,52h
int 21h
mov ax,es
mov TMP_WORD,ax
outnumber T_CVT_ADDRESS,TMP_WORD,BUFFER,2
mov ax,bx
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx-2]
mov MCB_SEG,ax
outnumber T_MCB_SEG,MCB_SEG,BUFFER,2
mov ax,ES:[bx+2]
mov TMP_WORD,ax
outnumber T_DEV_CB,TMP_WORD,BUFFER,2
mov ax,ES:[bx]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+6]
mov TMP_WORD,ax
outnumber T_FILE_TAB,TMP_WORD,BUFFER,2
mov ax,ES:[bx+4]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+10]
mov TMP_WORD,ax
outnumber T_CLOCK_DR,TMP_WORD,BUFFER,2
mov ax,ES:[bx+8]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+14]
mov TMP_WORD,ax
outnumber T_CON_DR,TMP_WORD,BUFFER,2
mov ax,ES:[bx+12]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+16]
mov TMP_WORD,ax
outnumber T_MAX_BTBL,TMP_WORD,BUFFER,2
mov ax,ES:[bx+20]
mov TMP_WORD,ax
outnumber T_DISK_BUF,TMP_WORD,BUFFER,2
mov ax,ES:[bx+18]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+24]
mov TMP_WORD,ax
outnumber T_DRV_INFO,TMP_WORD,BUFFER,2
mov ax,ES:[bx+22]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+28]
mov TMP_WORD,ax
outnumber T_FCB_TABL,TMP_WORD,BUFFER,2
mov ax,ES:[bx+26]
mov TMP_WORD,ax
outnumber SEP,TMP_WORD,BUFFER,2
mov ax,ES:[bx+30]
mov TMP_WORD,ax
outnumber T_FCB_SIZE,TMP_WORD,BUFFER,2
mov al,ES:[bx+32]
mov TMP_BYTE,al
outnumber T_NUM_BDEV,TMP_BYTE,BUFFER,1
mov al,ES:[bx+33]
mov TMP_BYTE,al
outnumber T_LASTDRIV,TMP_BYTE,BUFFER,1
jmp circle
L2: cmp ah,03h ;
je MCB
jmp circle
MCB: mov es,MCB_SEG
MCB_circle:
xor bx,bx
mov al,ES:[bx]
mov TMP_BYTE,al
outtitle NL
outstring TMP_BYTE,1
outtitle SPC ; владелец
mov ax,ES:[bx+1]
mov TMP_WORD,ax
outnumber SPC,TMP_WORD,BUFFER,2
mov bx,8
lea si,FILENAME
mov cx,8
copy:
mov al,es:[bx]
mov [si],al
inc bx
inc si
loop copy
xor bx,bx
outtitle SPC ; длина блока в параграфах
mov ax,ES:[bx+3]
mov TMP_WORD,ax
outnumber SPC,TMP_WORD,BUFFER,2
outtitle SPC
outstring FILENAME,8
mov bx,es
add ax,bx
inc ax
mov es,ax
mov al,TMP_BYTE
cmp al,'Z'
je break
jmp MCB_circle
break: jmp circle
exit:
mov ax,4c00h
int 21h
main endp
code ends
end main
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.