Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2009, 12:21   #1
DJEDY
 
Регистрация: 07.04.2009
Сообщений: 6
По умолчанию Показать координаты 1-го основного раздела жесткого диска в CHS виде

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

dseg segment
buffer db 512 dup(0) ;буфер для размещения данных
text1 db 'yes$'
text2 db 'error!$'
dseg ends
code segment
assume cs:code,ds: dseg,es: dseg
a1: mov ax,dseg
mov ds,ax
mov es,ax
mov ah,2 ;номер функции
mov cx,1 ;номер цилиндра 0, сектора 1
mov dh,0 ;номер головки 0
mov dl,80h ;номер диска
lea bx,buffer ;в bx адрес буфера данных
mov al,1 ;количество считываемых секторов
int 13h ;вызов сервиса
jc err ;при ошибке чтения сообщение 'error!'
lea dx,text1
a2: mov ah,9 ;вывод строки на экран
int 21h
mov ah,4ch ;завершение исполнения
int 21h
err:lea dx,text2
jmp a2
code ends
end a1

Вызывает затруднение вытащить 3 байта отвечающие за координаты ж.д. и перевод их в CHS вид програмно. Подскажите если не трудно))
DJEDY вне форума Ответить с цитированием
Старый 21.11.2009, 17:51   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

CHS to LBA wiki
Код:
use16
ReadBlock:
;## IN  : EAX = LBA - more than innaf for Floppy disks
;## IN  : EBP = LogAdress
;## OUT : FLAGS->CF  0=Success 1=Error
  push ax dx cx bp
  call log2real
  xor edx,edx
  mov ecx,0x24
  div ecx
  mov [cylinder],al
  mov [temp],edx 
  mov eax,edx
  xor edx,edx
  mov ecx,18
  div ecx
  mov [head],al
  mov [sector],dl
  
  mov ax,0x201
  mov ch,[cylinder]
  mov cl,[sector]
  mov dh,[head]
  mov dl,0
  int 0x13
  pop bp cx dx ax
  ret
temp dd 0
cylinder db 0
head db 0
sector db 0
Log2Real что бы было понятней:
Код:
log2real:
  push eax ecx edx
  xor edx,edx
  mov eax,ebp
  mov ecx,16
  div ecx
  mov es,ax
  mov bx,dx
  pop edx ecx eax
  ret
Код мой. Корявость можно списать на то что я не очень хороший программист и стремился только к тому что б он был наиболее понятным
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объем жесткого диска buka_14 Помощь студентам 1 16.04.2009 20:03
Проверка жесткого диска из консоли Квэнди Софт 4 16.01.2009 15:30
Обследование жесткого диска! Rembo Компьютерное железо 6 11.08.2008 09:14
симптомы смерти жесткого диска! ronich Помощь студентам 2 09.01.2008 11:29