Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 19

Реализовать функцию на ассемблере, которая проверяет кластер с заданным номером

19.05.2013, 13:07. Показов 989. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если точнее
Реализовать функцию, которая проверяет, находится ли кластер с заданным номером в состояние «плохой».
и все это надо на ассемблере.
подскажите в каком направлении нужно идти.

В общем это задание на курсовую.

название темы привел дословно
на ассемблере потому что это условие преподователя.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.05.2013, 13:07
Ответы с готовыми решениями:

Написать функцию, которая удаляет из строки символ с заданным номером
Здравствуйте, помогите решить задачу - Написать функцию, которая удаляет из строки символ с заданным номером. Какой здесь применять...

Разработать функцию, которая удаляет из строки слово с заданным номером
Вечер добрый, помогите с программой. Условие: Разработать функцию, которая удаляет из строки слово с заданным номером. Заранее...

Односвязный список. Реализовать член-функцию «получение элемента с заданным порядковым номером»
Как реализовать подобное задание? Узел списка Комната с член-данными ширина (float), длина (double) и цвет стен (char *). Реализовать...

3
1 / 1 / 0
Регистрация: 17.05.2013
Сообщений: 12
19.05.2013, 15:22
Почитай книгу "Кулаков В. - Программирование на аппаратном уровне" там все подробно описано для систем FAT, FAT16,FAT32. Далее составляешь алгоритм и реализуешь программу на ассемблере. Все элементарно)))
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 19
19.05.2013, 17:11  [ТС]
Цитата Сообщение от @devel Посмотреть сообщение
Далее составляешь алгоритм и реализуешь программу на ассемблере. Все элементарно)))
а может у кого нибуть есть примеры
0
1 / 1 / 0
Регистрация: 17.05.2013
Сообщений: 12
20.05.2013, 14:09
В книге подробно описываются все структуры FAT, сервис 0x13. Этого более чем достаточно, чтобы написать драйвер файловой системы fat для однозадачных систем, работающих в реальном режиме. Даже приведен алгоритм чтения элемента fat. Если нужен рабочий пример, то могу дать листинг рабочей функции, извлекающей элемент fat, но я думаю тебе легче будет самому разобраться, а не по чужому коду. Вот функция:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
########################################
##       ФУНКЦИЯ ЧТЕНИЯ ЭЛЕМЕНТА ТАБЛИЦЫ FAT          ##
########################################
## Вход:                                                                      ##
##      fat_number         = 0x04(%bp)                              ##
## Выход:                                                                   ##
##      ax - значение элемента кластера                         ##
##      cf = 1 если ошибка                                             ##
#######################################
get_fat_element:                                                           ##
  pushw             %bp                                                     ##
  movw              %sp,%bp                                             ##
  subw              $0x0200,%sp                                         ##
  lds               %cs:fscb_ptr,%si                                     ##
  pushw             %ds:fscb_hdx_major_hi(%si)                  ##
  pushw             %ds:fscb_hdx_major_lo(%si)                  ##
  pushw             %ds:fscb_hdx_minor_hi(%si)                  ##
  pushw             %ds:fscb_hdx_minor_lo(%si)                  ##
  pushw             %ss                                                    ##
  lea               -0x200(%bp),%ax                                   ##
  pushw             %ax                                                   ##
  pushw             $0x0001                                              ##
  pushw             %ds:fscb_disk                                      ##
  movw              %sp,%di                                             ##
# Скоррекетировать адрес на начало FAT                      ## fat1=bpb_rsvd_sec_cnt+ partition_base
  movw              %ds:bpb_rsvd_sec_cnt(%si),%ax            ##
  addw              %ax,%ss:0x08(%di)                              ##
  adcw              $0x0000,%ss:0x0A(%di)                         ##
  adcw              $0x0000,%ss:0x0C(%di)                         ##
  adcw              $0x0000,%ss:0x0E(%di)                         ##
# Вычислить номер сектора таблицы FAT, необходимого  ##
# для загрузки нужного элемента FAT                           ##
  movw              %ss:0x04(%bp),%ax                            ##
# Проверим корректность адреса                                  ##
  cmpw              $0x0FF6,%ax                                       ##
  ja                efat_element                                          ##
# Умножыть на 3 и разделить на 2 значение кластера    ##
  movw              %ax,%bx                                           ##
  shlw              $0x01,%bx                                           ## fat_offset = ((cluster shl 1)+cluster) shr 2
  addw              %bx,%ax                                            ##
  shrw              $0x01,%ax                                           ##
# Разделить на размер сектора                                     ## fat_sector=fat_offset/512+fat1(только целая часть)
  xorw              %dx,%dx                                            ## fat_word_offset = fat%512(остаток от деления)
  divw              %ds:bpb_byts_per_sec(%si)                   ##
  addw              %ax,%ss:0x08(%di)                             ##
  adcw              $0x0000,%ss:0x0A(%di)                        ##
  adcw              $0x0000,%ss:0x0C(%di)                        ##
  adcw              $0x0000,%ss:0x0E(%di)                        ##
  lea               -0x200(%bp),%di                                   ##
  addw              %dx,%di                                            ##
  popw              %dx                                                  ##
  call              read_sectors                                         ## Загрузка сектора в буфер
  jc                efat_element                                         ##
# Прочитать слово по адресу в di                               ## Чтение элемента fat
  movw              %ss:(%di),%ax                                 ##
  btw               $0x00,%ss:0x04(%bp)                          ##
  jc                rf_nevn                                                ##
  shrw              $0x04,%ax                                         ## Если номер кластера четный, то сдвигаем на 4 бита
rf_nevn:                                                                   ##
  andw              $0x0FFF,%ax                                     ## Если номер кластера нечетный, то к результату
  clc                                                                        ## применяем конъюнкцию по маске 0x0FFF(в книге 
  jmp               ok_fat_element                                   ##опечатка по поводу четный нечетный!!!!!!)
efat_element:                                                           ##
  movw              $0xFFFF,%ax                                   ##
  stc                                                                        ##
ok_fat_element:                                                       ##
  movw              %bp,%sp                                        ##
  popw              %bp                                               ##
  ret                                                                       ##
#####################################
Внутренние структуры(которые я придумал) раскрывать не буду. Сам свои придумаешь. Суть здесь раскрыта более чем нужно. Код откомментирован.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2013, 14:09
Помогаю со студенческими работами здесь

Реализовать функцию, которая проверяет, содержит ли строка только символы 'a', 'b', 'c' или нет
Как написать регулярное выражение для решения данной задачи? Необходимо, чтобы это выражение захватывало множественное вхождение...

Описать функцию, которая элемент списка с заданным номером заменяет на данный элемент
Описать функцию, которая элемент списка с заданным номером заменяет на данный элемент. В чем ошибка? replace(,,_,_). replace(,,1,Y):-!. ...

Напишите программу, которая проверяет, является ли билет с номером N выигрышным (массив заполнить случайными числами)
Напишите программу, которая проверяет, является ли билет с номером N выигрышным (массив заполнить случайными числами от 1 до 100. В...

Реализовать функцию strstr на ассемблере, и подключить эту функцию в проект MVS2008
Нужно реализовать функцию strstr на ассемблере, и подключить эту функцию в проет MVS2008. Код функции: .386 extern _strstr:near...

Написать функцию, которая вставляет в массив элемент с заданным индексом и заданным значением
Мне нужно написать функцию, которая вставляет в массив элемент с заданным индексом и заданным значением. Лишний элемент должен пропасть. Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru