Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вывод информации о дисках в ассемблер

Юлия Воробьева Профи (562), открыт 2 часа назад
на языке ассамблер создать программу с использованием команд enter и leave для вывода на экран подключенных дисков
4 ответа
Андрей Алохин Профи (867) 2 часа назад
ничего себе запрос на асемблере ,высокоуровневым гоям не понять
GGG Просветленный (31632) 1 час назад
 model small 
.stack 100h
.data
drive db 'A:', 0Dh, 0Ah, '$'
.code
main proc
mov ax, @data
mov ds, ax
mov es, ax

enter 0, 0 ; резервируем место для фрейма стека

mov dl, 'A' ; начинаем с диска A
next_drive:
mov ah, 0Eh ; функция вывода символа в int 10h (BIOS)
int 10h ; выводим букву диска

mov ah, 19h ; функция DOS - получить текущий диск
int 21h
cmp al, dl ; проверяем, существует ли диск
jne skip ; если нет, переходим к следующему

lea dx, drive ; загружаем адрес строки с буквой диска
mov ah, 09h ; функция DOS - вывести строку
int 21h

skip:
inc dl ; переходим к следующему диску
cmp dl, 'Z' ; проверяем, достигли ли мы конца алфавита
jbe next_drive ; если нет, продолжаем

leave ; восстанавливаем фрейм стека
mov ax, 4C00h ; завершение программы
int 21h
main endp
end main
Рустам Абдрашитов Мыслитель (6341) 58 минут назад
section .data
msg db 'Подключенные диски:', 0
newline db 0x0D, 0x0A, 0
err_msg db 'Ошибка при получении информации о диске.', 0
drive_format db 'Диск %c: - Тип: %s, Размер: %d МБ', 0

section .bss
drive_info resb 32
buffer resb 64

section .text
global _start

_start:
mov eax, msg
call print_string

mov cx, 0
get_drive_info:
mov ah, 0x00
int 0x13

jc handle_error

call format_drive_info
call print_string

inc cx
jmp get_drive_info

handle_error:
mov eax, err_msg
call print_string

no_more_drives:
call print_newline
mov ax, 0x4C00
int 0x21

print_string:
mov ah, 0x09
int 0x21
ret

format_drive_info:
mov al, [drive_info + 1]

mov si, buffer

mov byte [si], 'D'
inc si

mov byte [si], ' '
inc si

add cx, 'A'

mov [si], cl

inc si

mov byte [si], ':'

inc si

mov dx, 'FAT16'
mov [si], dx

mov ax, 1024
mov bx, ax

mov si, buffer + length
mov byte [si], '1'
inc si
mov byte [si], '0'
inc si
mov byte [si], '0'
inc si
mov byte [si], ' '
inc si
mov byte [si], 'М'
inc si
mov byte [si], 'Б'

mov byte [si + 1], 0
ret

print_newline:
mov ah, 0x09
lea dx, [newline]
int 0x21
ret
Похожие вопросы