сегодня приезжал кое-кто, кто мне очень дорог и сказал очень важную почти судьбоносную вещь.
я очень счастлива, хотя и не должна была бы. важный мне человек возрадил во веру в лучшее.
думаю, никому сейчас не сломить во мне это.
а еще в дополнение к сказанному прикрепляю сданную сегодня мною лабу
;программа должна прочитать содержимое текущего каталога( с помощью функции DOS )
;и вывести на экран имена файлов, используя BIOS, ну и при выводе нужно чтобы
; имена подкаталогов и .exe,.com,.bat файлов выделялись цветом
.model tiny
.code
org 100h
begin: mov ah,4eh ;найти первый файл
mov dx,offset path ;маска поиска
;mov cx,0 ;атрибут
mov out_x, 1
mov out_y, 0
file: int 21h ;запуск
jc error ;если файл нет- ошибка- выход
jmp short next_line
end_str:mov ah,4fh ;поиск следующего файла
mov dx,80h ;смещение DTA относительно начала PSP
jmp short file
finished: ret
error: mov dx,offset err_msg ;
mov ah,9 ;
int 21h ;
ret
next_line:mov out_x, 1
inc out_y
test byte ptr ds:[95h], 10h;логическое сравнение
jnz print_name
cld ;сборосить флаг направления df в 0, далее регистры di,si будут увеличиваться
mov si, 9Eh
jmp next_char
; now ds:[si] - pointer to the name(указывает на имя)
next_char:
lodsb
or al,al
jz print_name
cmp al, '.'
je check_exe
cmp si, 0ABh
jl next_char
jmp print_name
check_exe:
lodsb
or al, 20h
cmp al,'e'
je check_1
check_bat:cmp al,'b'
je check_11
check_com:cmp al,'c'
jne print_name
check_111:
lodsb
or al, 20h
cmp al,'o'
jne print_name
check_112:lodsb
or al, 20h
cmp al,'m'
je print
jmp print_name
print_name:
mov si, 9Eh
mov di, 11100000b ; ?
jmp short print_1
print: mov si, 9Eh
mov di, 00011111b ; белый на синем
print_1:
;mov dh, out_y
;mov dl, out_x
;inc out_x
lodsb ; в al кладем код символа
;mov al,41h
cmp al,0 ; сравниваем с нулем код полученного символа
je end_str ; если 0 - ищем следующий файл
mov ah,9 ;вызываем функцию вывод 1го символа с атрибутом
mov cx,1 ;выводим один символ за раз
mov bl,00011111b ; белый на синем
mov bh,0 ; номер страницы
mov bx, di
push ax
mov dh, out_y
mov dl, out_x
mov ah, 02h
int 10h ;запуск
pop ax
;mov ah, 02h
xor bh, bh
int 10h
inc out_x
inc dh ;
jmp print_1
check_1:
lodsb
or al,20h
cmp al,'x'
je check_2
check_2:
lodsb
or al,20h
cmp al,'e'
je print
jmp print_name
check_11:
lodsb
or al,20h
cmp al,'a'
jne print_name
check_12:
lodsb
or al,20h
cmp al,'t'
je print
jmp print_name
.data
path db "*.*",0
out_x db 0
out_y db 0
err_msg db "Error!"
end begin
я очень счастлива, хотя и не должна была бы. важный мне человек возрадил во веру в лучшее.
думаю, никому сейчас не сломить во мне это.
а еще в дополнение к сказанному прикрепляю сданную сегодня мною лабу
;программа должна прочитать содержимое текущего каталога( с помощью функции DOS )
;и вывести на экран имена файлов, используя BIOS, ну и при выводе нужно чтобы
; имена подкаталогов и .exe,.com,.bat файлов выделялись цветом
.model tiny
.code
org 100h
begin: mov ah,4eh ;найти первый файл
mov dx,offset path ;маска поиска
;mov cx,0 ;атрибут
mov out_x, 1
mov out_y, 0
file: int 21h ;запуск
jc error ;если файл нет- ошибка- выход
jmp short next_line
end_str:mov ah,4fh ;поиск следующего файла
mov dx,80h ;смещение DTA относительно начала PSP
jmp short file
finished: ret
error: mov dx,offset err_msg ;
mov ah,9 ;
int 21h ;
ret
next_line:mov out_x, 1
inc out_y
test byte ptr ds:[95h], 10h;логическое сравнение
jnz print_name
cld ;сборосить флаг направления df в 0, далее регистры di,si будут увеличиваться
mov si, 9Eh
jmp next_char
; now ds:[si] - pointer to the name(указывает на имя)
next_char:
lodsb
or al,al
jz print_name
cmp al, '.'
je check_exe
cmp si, 0ABh
jl next_char
jmp print_name
check_exe:
lodsb
or al, 20h
cmp al,'e'
je check_1
check_bat:cmp al,'b'
je check_11
check_com:cmp al,'c'
jne print_name
check_111:
lodsb
or al, 20h
cmp al,'o'
jne print_name
check_112:lodsb
or al, 20h
cmp al,'m'
je print
jmp print_name
print_name:
mov si, 9Eh
mov di, 11100000b ; ?
jmp short print_1
print: mov si, 9Eh
mov di, 00011111b ; белый на синем
print_1:
;mov dh, out_y
;mov dl, out_x
;inc out_x
lodsb ; в al кладем код символа
;mov al,41h
cmp al,0 ; сравниваем с нулем код полученного символа
je end_str ; если 0 - ищем следующий файл
mov ah,9 ;вызываем функцию вывод 1го символа с атрибутом
mov cx,1 ;выводим один символ за раз
mov bl,00011111b ; белый на синем
mov bh,0 ; номер страницы
mov bx, di
push ax
mov dh, out_y
mov dl, out_x
mov ah, 02h
int 10h ;запуск
pop ax
;mov ah, 02h
xor bh, bh
int 10h
inc out_x
inc dh ;
jmp print_1
check_1:
lodsb
or al,20h
cmp al,'x'
je check_2
check_2:
lodsb
or al,20h
cmp al,'e'
je print
jmp print_name
check_11:
lodsb
or al,20h
cmp al,'a'
jne print_name
check_12:
lodsb
or al,20h
cmp al,'t'
je print
jmp print_name
.data
path db "*.*",0
out_x db 0
out_y db 0
err_msg db "Error!"
end begin