Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293

LBA и CHS

10.11.2013, 00:51. Показов 3188. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте пишу загрузчик, встал такой вопрос, как по таблице разделов узнать работаем мы с LBA-адресами или CHS? Все, что пришло в голову это посчитать разницу между началом и концом раздела.О-о
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2013, 00:51
Ответы с готовыми решениями:

CHS -> LBA
Здравствуйте! Че то я совсем запутался:( Кто то может объяснить мне что я не так считаю? Вот смотрите функция...

Таблица MBR, расчет CHS и LBA
сектор размером 512 байт это стандарт какой-то? Добавлено через 1 час 43 минуты ну допустим, сектор равен 512 байт, а смещение...

Показать координаты 1-го основного раздела жесткого диска в CHS виде
Мне нужно показать координаты 1-го основного раздела жесткого диска в CHS виде. Код чтения сектора я с горем пополам написал и он работает:...

13
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
10.11.2013, 10:23
Даже в википедии написано, что каждый описатель раздела содержит смещение первого сектора в LBA, и также количество секторов

MBR\Структура

Не по теме:


Сообщений: 666
:D

0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
10.11.2013, 15:46  [ТС]
sh2ezo, Провтыкал этот момент. Т.е по этому адресу можно выполнить загрузку раздела?
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
10.11.2013, 15:54
Корд, наверное)
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
10.11.2013, 16:40  [ТС]
sh2ezo, Может даже пример покажете?)
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
10.11.2013, 17:34
Корд, я загрузчики с винта не писал
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
12.11.2013, 14:26
Цитата Сообщение от sh2ezo Посмотреть сообщение
я загрузчики с винта не писал
а че их писать то? точно также как и с дискеты, только там нужно с определенного раздела читать.
а чтобы показать пример надо знать в каком режиме работы процессора находитесь
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
12.11.2013, 17:25  [ТС]
Мотороллер, обычный режим работы процессора=)
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
12.11.2013, 22:47
Цитата Сообщение от Корд Посмотреть сообщение
обычный
не продолжайте.
юзайте обычные прерывания биоса.
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
12.11.2013, 23:03  [ТС]
Мотороллер, их и использую) и пытаюсь понять как по лба адресу загрузить раздел.
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
12.11.2013, 23:04
Корд, мб покажете что Вы там уже свояли дабы не играть в угадалки?
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
12.11.2013, 23:27  [ТС]
Мотороллер, Написал mbr, который проходит по всем разделам, запоминает последний активный раздел. Если пользователь не выбрал с какого раздела загрузиться, то выполняем загрузку с последнего активного. Если выбрал. Обнуляем у остальных флаги активности и загружаемся. Сейчас у меня 3 вопроса. 1 как разбить на 2 модуля ибо еле влезло в 1 раздел. И как выполнить поддержку LBA адресации...
3 пока не так важен=) Если хотите могу код написать, что бы нагляднее было
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
13.11.2013, 03:47
Цитата Сообщение от Корд Посмотреть сообщение
Если хотите могу код написать, что бы нагляднее было
Корд,
конечно, пиши. Облегчи путь желающим наступать по грабли
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
13.11.2013, 15:11  [ТС]
Mikl___, Ок)
Данный код проходит таблицу разделов, выводит на экран активные разделы. Запоминает последний активный раздел. Дальше пользователь должен выбрать раздел. Здесь реализована загрузка по 4-ому разделу, остальные аналогично сделать. Обнуления флагов в других разделов нету, т.к пока не придумал как, но добавить пару строчек комментарии в коде есть. Если пользователь в течении 7 секунд не выбрал раздел грузимся с последнего активного-это позволяет нам запоминать выбор пользователя для следующей загрузки. Не дописал я потому-что код не влез в 1 сектор, а как перенести пока тоже в раздумьях.
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
part1_offset = 0x7DBE
part2_offset = 0x7DCE
part3_offset = 0x7DDE
part4_offset = 0x7DEE
 
base_stage0 = 0x7C00
base_stage1 = 0x0600
 
offset_table = (512 - 2 - 16*4)
offset_stage1 = (stage1 - base_stage1)
 
use16
org base_stage0
 
 
cld
mov si,base_stage0
mov di,base_stage1
mov cx,512
rep movsb
 
jmp stage1
 
org base_stage1 + ($-$$)
 
stage1:
    mov sp,0x7C00
 
    mov ax,part1_offset
    call search_part
    mov ax,part2_offset
    call search_part
    mov ax,part3_offset
    call search_part
    mov ax,part4_offset
    call search_part
 
    jmp prov1
prov1:
    mov al, [fl1]
    mov [head_start],al
    mov [flagg],0
    mov ax,8300h
    lea bx, [flagg]
    mov cx, 350
    mov dx,0
    int 15h
    jmp myloop
myloop: 
    mov ah,1
    int 16h
    jz p8
    mov ah,00H
    int 16h
    cmp al,'4'
    je stop
    jmp load_boot
    mov ax,8301h
    int 15h 
    jmp load_boot
p8: 
    test [flagg],80h
    jz myloop
    jnz load_boot
stop:
    mov al, [fl1]; загружаемся по адресу 4-ого раздела, надо сделать для каждого раздела и обнулить флаги у остальных. 
    mov [head_start],al
    mov ax,8301h
    int 15h 
    jmp load_boot
load_boot: 
 
    mov ah,2 ; чтение секторов
    mov al,1 ; количество секторов
    mov bx,base_stage0 ; адрес буфера
    mov ch,0 ; младшие 8 бит номера цилиндра, начиная с 0
    mov cl,1 ; 6 бит номера сектора, начиная с 1, (в младших битах) и старшие 2 бита номера цилиндра
    mov dh,[head_start] ; номер головки 
    mov dl,0x80 ; номер диска, нумерация начинается с 0x80
    int 0x13
 
    jmp base_stage0
;--------------------
 
; функция анализа записи таблицы разделов
; адрес записи передаётся в регистре ax
search_part:
 
    mov si,ax
    
    mov al,[si]
    mov [attr],al
    cmp al,0x80
    jne exit
    
    mov al,[si+1]
    mov [head_start],al
    mov [fl1],al
 
    mov al,[si+2]
    and al,00111111b
    mov [sec_start],al
    
    mov al,[si+3]
    mov ah,[si+2]
    shr ah,6
    mov [cyl_start],ax
    
    mov al,[si+4]
    mov [type_part],al
    
    mov al,[si+5]
    mov [head_end],al
 
    mov al,[si+6]
    and al,00111111b
    mov [sec_end],al
    
    mov al,[si+7]
    mov ah,[si+6]
    shr ah,6
    mov [cyl_end],ax
    
    mov eax,[si+8]
    mov [lba_offset],eax
    mov eax,[si+12]
    mov [lba_count],eax
    
    
    mov ax,si
    mov al,ah
    call hexb
    mov ax,si
    call hexb
    call print_blank
    
    mov al,[attr]
    call hexb
    call print_blank
    
    mov al,[head_start]
    call hexb
    call print_blank
    
    mov ax,[cyl_start]
    call hexw
    call print_blank
    
    mov al,[sec_start]
    call hexb
    call print_blank
    call print_blank
    
    mov al,[type_part]
    call hexb
    call print_blank
    call print_blank
 
    mov al,[head_start]
    call hexb
    call print_blank
 
    mov al,byte [cyl_end+1]
    call hexb
    mov al,byte [cyl_end]
    call hexb
    call print_blank
 
    mov al,[sec_end]
    call hexb
    call print_blank
    call print_blank
    
    mov eax,[lba_offset]
    call hexd
    call print_blank
    
    mov eax,[lba_count]
    call hexd
    
    call print_enter
 
    ret
 
 
exit:
    ret
 
;--------------------
 
hexb:
 
mov cl,4
jmp hex
 
hexw:
 
mov cl,12
jmp hex
 
hexd:
 
mov cl,28
jmp hex
 
; функция вывода в шестнадцатиричном виде
; в регистре eax выводимые данные
hex:
 
mov edx,eax
shr eax,cl
and al,0x0F
add al,'0'
cmp al,'9'
jbe @f
add al,'A'-('9'+1)
@@:
mov ah,0x0E
int 0x10
 
test cl,cl
je @f
 
sub cl,4
mov eax,edx
jmp hex
 
@@:
ret
 
;--------------------
 
; печатает пробел
print_blank:
 
mov ah,0x0E
mov al,' '
int 0x10
ret
 
;--------------------
 
; печатает перевод строки
print_enter:
 
mov ah,0x0E
mov al,13
int 0x10
mov al,10
int 0x10
ret
 
;--------------------
 
; функция вывода строки
; адрес строки в регистре ax
;--------------------
attr db 0
head_start db 0
cyl_start dw 0
sec_start db 0
type_part db 0
head_end db 0
cyl_end dw 0
sec_end db 0
lba_offset dd 0
lba_count dd 0
flag db 0
flagg db ?
fl1 db 0
h2 dw 0
db 0x55,0xAA
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2013, 15:11
Помогаю со студенческими работами здесь

Число секторов LBA ATA
Здравствуйте, хочу узнать число секторов LBA на жестком диске. Использую команду Identify Device. Из регистра данных считываю 60-61...

Как перевести LBA в гигабайты
Добрый день. Ситуация следующая на HDD есть немного побитых секторов, они как бы вместе не разбросаны по диску. Пробовал лечить не очень...

Минимальная пропускная способность в битах интерфейса жёсткого диска с габаритами в геометрии CHS: 8x4x10
Некоторый жёсткий диск имеет следующие габариты в геометрии CHS: 8x4x10. Для доступа к этому жёсткому диску предполагается использовать...

LBA/Large Mode значение Auto не даёт стартануть компьютеру
Всем доброго времени суток! Проблема такова, когда я хотел переустановить ОС с семёрки макс х32 на хр sp 3 х32, выявил следующее...при...

Обращение к кластеру HDD на запись/чтение/целостность по адресу LBA
Вообщем, ранее уже писал, что задали писать файловую систему, встал с проблемой записи и считывания кластера с жесткого диска по адресу...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru