18.06.2019, 13:11 [+3 UTC]
в нашей команде: 3 711 чел. | участники онлайн: 12 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.06.2019, 08:32

Последний вопрос:
17.06.2019, 15:06
Всего: 149828

Последний ответ:
18.06.2019, 12:04
Всего: 258619

Последняя рассылка:
17.06.2019, 20:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
18.01.2012, 16:34 »
Даровко Антон Владимирович
Я посмотрел Ваш ответ и оценил его на отлично. [вопрос № 185202, ответ № 269623]
12.02.2019, 19:13 »
dar777
Это самое лучшее решение! [вопрос № 194692, ответ № 277457]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 275
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 240
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 100

Перейти к консультации №:
 

Консультация онлайн # 195835
Раздел: • Assembler
Автор вопроса: ndrozdov9 (Посетитель)
Отправлена: 12.06.2019, 17:37
Поступило ответов: 0

Уважаемые эксперты! Дали задание на ргр:
Создать метку тома дискеты, значение которой вводится с клавиатуры (ввод с клавиатуры средствами DOS, а также вывод на экран в текстовом режиме)
Не понимаю что это такое, подскажите, пожалуйста

Состояние: Консультация активна (до закрытия: 4 сут. 04 час. 25 мин.)

Oтветов пока не поступило.

Мини-форум консультации № 195835

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

= общий = | 12.06.2019, 17:41 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
ndrozdov9:

Здравствуйте! Вы еще работаете с дискетами? smile smile
У тома дискеты, как и у любого диска есть имя (метка). Вот и требуется присвоить новое имя дискете... Вот и все... smile
Пробуйте, пишите сюда, поможет, подправим... smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

ndrozdov9
Посетитель

ID: 403126

# 2

= общий = | 12.06.2019, 17:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:



Есть некоторые наброски, но это неправильный вариант решения вопроса

;---в сегменте данных
VOL_STRING   DB    'The volume label is $'
NO_LABEL     DB    'There is no volume label $'
DIR_AREA     DB    3584 DUP(?)
 
;---читаем 7 секторов каталога
         MOV  AX,SEG DIR_AREA         ;сегмент буфера
         MOV  ES,AX                   ;
         MOV  BX,OFFSET DIR_AREA      ;смещение буфера
         MOV  DL,0                    ;номер накопителя
         MOV  DH,0                    ;номер головки
         MOV  CH,0                    ;номер дорожки
         MOV  CL,6                    ;стартовый сектор
 
         MOV  AL,7                    ;число секторов каталога
         MOV  AH,2                    ;номер функции чтения
         INT  13H                     ;читаем каталог в память
;---ищем метку тома, сравнивая байт атрибутов с 8
         MOV  CX,112                  ;число элементов
         ADD  BX,11                   ;смещение для атрибутов
TRY_AGAIN:   MOV  AL,[BX]             ;берем 1-й элемент
         CMP  AL,8                    ;это метка тома?
         JE   GOT_IT                  ;если да, то уход
         ADD  BX,32                   ;иначе на след. элемент
         LOOP TRY_AGAIN               ;
;---выводим сообщение об отсутствии метки тома
         MOV  AH,9                    ;функция вывода строки
         LEA  DX,NO_LABEL             ;указываем на строку
         INT  21H                     ;выводим ее
         JMP  SHORT CONTINUE          ;на конец
;---выводим строку, дающую метку тома
GOT_IT:  MOV  AH,9                    ;функция вывода строки
         LEA  DX,VOL_STRING           ;указываем на строку
         INT  21H                     ;выводим ее
         SUB  BX,11                   ;указатель на метку
         MOV  CX,11                   ;пишем 11 символов
         MOV  AH,2                    ;функция вывода символов
NEXT_CHAR:   MOV  DL,[BX]             ;символ в DL
         INT  21H                     ;выводим символ
         INC  BX                      ;переходим к следующему
         LOOP NEXT_CHAR               ;

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 3

= общий = | 13.06.2019, 20:20 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
ndrozdov9:

Читать при помощи 13h - плохая идея smile
Идея должна быть такая:
Volume label - метка тома, это обычный файл с атрибутом 8h.
Метку тома легко найти простым поиском файлов, по маске '*.*' с атрибутом 8h, функцией FindFirst, сервиса int 21h.
Если файл найден, то это и есть метка тома, только придется вручную вырезать из имени точку (если она есть).
Если не найден, то метка отсутствует (NO_NAME).
Установить метку, по идее, можно функцией 16h, сервиса int 21h - Create truncate file using FCB.
Последнее никогда не пробовал... smile
Дерзайте smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

ndrozdov9
Посетитель

ID: 403126

# 4

= общий = | сегодня, 10:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

, извините, а вот такой вариант:

text segment 'code'
 
cr=10       
lf=13       
 
assume CS:text, DS:text
org 100h
 
main:
    ; очистка экрана : начало
    mov AX, 0600h   ; AH=06 (прокрутка)
                ; AL=00 (весь экран)                    
    mov BH, 07      ;Нормальный атрибут (черно/белый)
    mov CX, 0000h   ;Верхняя левая позиция
    mov DX, 184fh   ;Нижняя правая позиция
    int 10h	    ;Передача управления в BIOS
    ; очистка экрана : конец
 
    ; перевод размера программы в символьный вид: начало    
    lea DI, msg_size[20]            
    mov AX, word ptr _size          
    call GET_CHAR               
    ; перевод размера программы в символьный вид : конец
    ; устанавливаем позицию курсора для вывода ФИО и группы
    mov AH, 02  ;Запрос на установку курсора    
    mov BH, 00  ;Экран 0   
    mov DH, 01  ;Строка 01    
    mov DL, 00  ;Столбец 00
    int 10h 	;Передача управления в BIOS
    ; выводим ФИО и группу  
    lea DX, m1
    call PRINT
    ; устанавливаем позицию курсора для приглашения ввести новую метку  
    mov AH, 02   ;Запрос на установку курсора    
    mov BH, 00   ;Экран 0     
    mov DH, 06   ;Строка 06   
    mov DL, 00   ;Столбец 00  
    int 10h      ;Передача управления в BIOS
    ; выводим приглашение ввести новую метку
    lea DX, msg_lb
    call PRINT
    ; считываем новую метку тома дискеты с клавиатуры   
    lea DX, sLabel+1  ;Загрузка адреса сообщ.      
    mov BX, DX ;копируем смещение в рег. BX         
    mov AL, 12 ;заносим в AX          
    mov [BX], AL    ;пересылать содержимое регистра AL по адресу, лежащему в регистре DX
    mov AH, 0Ah         
    int 21h         
    ; сохраняем количество реально введённых символов
    xor CX, CX   ;делим на 10           
    mov CL, byte ptr sLabel[2]  
    add CL, 3               
    mov DI, CX              
    ; дописывам префикс к метке тома, указав диск C:
    mov [sLabel+0], byte ptr 'C'
    mov [sLabel+1], byte ptr ':'
    mov [sLabel+2], byte ptr '\'
    mov [sLabel+DI], 00         
    ; устанавливаем позицию курсора для вывода сообщения о результате
    mov AH, 02      
    mov BH, 00      
    mov DH, 08      
    mov DL, 00      
    int 10h     
    ; метка тома создаётся функцией создания файла
    mov AH, 3ch           
    mov CX, 08             
    lea DX, sLabel      
    int 21h         
    jc L_ERR            
          ; выводим сообщение об успешной смене метки тома
    lea DX, msg_ok
    call PRINT
        
L_EXIT:
    ; устанавливаем позицию курсора для вывода размера программы
    mov AH, 02  
    mov BH, 00      
    mov DH, 10      
    mov DL, 00  
    int 10h     
        
    ; выводим размер программы
    lea DX, msg_size
    call PRINT
    
    ; функция ожидания нажатия клавиши
    mov AH, 08h     
    int 21h
    ; выход из программы в DOS
    mov AX, 4C00h
    int 21h
 
L_ERR:  ; обработка ошибочной ситуации 
    lea DX, msg_err
    call PRINT
    jmp L_EXIT
 
PRINT proc  ; вывод сообщения
    push AX
    mov AH, 09h
    int 21h
    pop AX
    ret
PRINT endp
 
; функция перевода числового значения в строковой тип
GET_CHAR proc
    mov         CX,0010    ;задаем систему счисления десятичная   
СA:
    cmp         AX,0010    ;сравниваем    
    jb          CB         ;если меньше, то на метку CB
    xor         DX,DX      ;обнуляем счетчик     
    div         CX         ;делим на 10 
    or          DL,30H	   ;преобразование в аски
    mov         [DI],DL    ;записываем символ в строку        
    dec         DI	   ;уменьшаем на единицу
    jmp         СA	   ;снова переход на CA
CB:
    or          AL,30H     ;преобразование в аски        
    mov         [DI],AL    ;записываем символ в строку         
    ret
GET_CHAR endp
 
; Поля данных
    m1          db "////.123", cr,lf, \
;"Задание: создать метку тома дискеты, значение которой ",  cr,lf, \
;"         вводится с клавиатуры.",cr,lf,"$"
"Zadaniye: sozdat' metku toma diskety, znacheniye kotoroy",  cr,lf, \
"         vvoditsya s klaviatury.",cr,lf,"$"
    msg_size        db "Razmer programmy:     $"
 
    msg_lb      db "Vvedite novuyu metku: $"
    msg_ok      db "Metka diska A izmenena.",cr,lf,"$"
    msg_err     db "Oshibka! Metka ne smenena!",cr,lf,"$"
    sLabel      db 16 dup (00h)
 
    ; вычисляем размер программы
    _size = $-main
text ends
    end main

-----
Последнее редактирование 18.06.2019, 11:35 ndrozdov9 (Посетитель)

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15247 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35