![]() |
|
![]() ![]() ![]() |
|
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
Прошу помощи...
Кто может помочь прошу откликнуться Задача такая , написать программу под doc в расширении *.com в ассемблере, которая определяет размер свободной памяти дискеты вставленной в дисковод. Прошу идей и если кто хорошо разбирается написать примерный код проги . Заранее благодарен. Это сообщение отредактировал(а) vgikys - 18.6.2010, 22:02 |
|||
|
||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
Первый вариат:
1. Берём спецификацию на Fat12 (прото Fat); 2. Читаем и понимаем из неё, что нам нужно узнать расположение file alloc tabe (как написанно в той же спецификации); 3. в этой таблице содержаться записи о каждом кластере(кластер==сектор), по 12бит на кластер, те если кластер занят то в записи о нём будет какое-то значение иначе 0, нам нужно пройти по всей таблице и посчитать сколько кластеров занято, общая формула для вычисления свободного места: FS = (Размер дискеты) - (1 + размер зарезервированых секторов+ размер fat *2+ размер корневого каталога) - количество занятых секторов; ps для наглядности Вариант два: Функция 36h прерывания 21h:ссыль > fasm
Это сообщение отредактировал(а) Logree - 30.6.2010, 18:03 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
За неимением флоппика прошу протестить прогу ...и по возможности исправить ошибки
cseg segment assume cs:cseg,ss:cseg,ds:cseg org 100h start: jmp free_space soob db "vstavte diskety i najmite lubyu klubishy ",10,13,'$' er db "error",10,13,'$' vuv db "freespace",10,13,'$' ten db 10 rez db "00000$" free_space: mov ah,9 lea dx,soob int 21h mov ah,8 int 21h mov ax,cs mov dx,ax xor bx,bx mov ah,36h xor dl,dl inc dl int 21h cmp ax,0ffffh je ext mov ah,9 lea dx,vuv int 21h mov ah,8 int 21h shl bx,9 mov ax,bx lea si,rez+4 m1:mov ah,0 div ten or ah,30h mov [si],ah dec si cmp al,0 jne m1 mov ah,9 lea dx,rez int 21h ext: mov ah,9 lea dx,er int 21h mov ah,8 int 21h mov ax,4ch int 21h cseg ends end start |
|||
|
||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
VFD
ps посмотрите как оформлен мой код и как оформлен ваш. Это сообщение отредактировал(а) Logree - 27.6.2010, 21:57 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
Нет мне просто надо офромить типа вставьте дискету и всё такое , я просто дополнил, есть ошибки ?
Logree вы не могли бы подсказать, работает или нет ? Это сообщение отредактировал(а) vgikys - 27.6.2010, 21:47 |
|||
|
||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
Даже сильно не вникая в код можно сказать что НЕ БУДЕТ, запустите и ищите ошибку, а алгоритм перевода числа в строку выкладывали тыщю раз.
-------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
Logree прошу помочь, потому что не могу справиться с этой задачей, не понимаю где ошибка. Не могли бы вы исправить мой код
Заранее благодарен. |
|||
|
||||
Logree |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
что-то я лишканул с этим:
число байт пустой дискеты там не уместитья так что луше заменить на
или выдавать ответ в секторах, а не байтах. пользуйте поиск. и ещё, этот код вам не нужен, тем более что там ошибка ![]()
Это сообщение отредактировал(а) Logree - 30.6.2010, 18:58 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||||
|
|||||||
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
Когда заменил на EBX пишет "undefined symbol EBX" и "Arguments types override"
|
|||
|
||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
Опишите подробно по какому алгоритму вы переводите число в стоку? и покажите код.
-------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
Блин ну что никто не поможет ? Помогите с выводом результата на экран.Очень срочно надо.
.586 data segment use16 assume cs:data,ss:data,ds:data org 100h start: jmp free_space soob db "vstavte diskety i najmite lubyu klubishy ",10,13,'$' er db "error",10,13,'$' vuv db "freespace",10,13,'$' ten db 10 rez dw ?,'$' s dw ? b dw ? free_space: mov ah,9 lea dx,soob int 21h xor bx,bx mov ah,36h xor dl,dl inc dl int 21h cmp ax,0ffffh je ext shl ebx,9 "СЮДА НУЖНЫ АЛГОРИТМЫ ВЫВОДА РЕЗУЛЬТАТА НА ЭКРАН !!!" ext: mov ah,9 lea dx,er int 21h mov ah,8 int 21h mov ax,4ch int 21h data ends end start Это сообщение отредактировал(а) vgikys - 1.7.2010, 12:00 |
|||
|
||||
vgikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.6.2010 Репутация: нет Всего: нет |
Всё сделал вывод строки. Но почему то неправильно считает свободную память?????????
data segment string_bin_byt label byte string_bin_word label word string_bin_dword label dword string_bin_qword dw ? string_pack dt 0 len_string_pack = $ - string_pack adr_string_pack dd string_pack string db 20 dup (0) len_string = $ - string adr_string dd string soob db "vstavte diskety i najmite lubyu klubishy ",10,13,'$' er db "error",10,13,'$' vuv db "freespace",10,13,'$' rez dw ? data ends st1 segment stack dw 256 dup (?) st1 ends text segment assume cs:text,ds:data,es:data,ss:st1 start: mov ax,data mov ds,ax mov es,ax mov ax,st1 mov ss,ax jmp free_space free_space: mov ah,9 lea dx,soob int 21h xor bx,bx mov ah,36h xor dl,dl mov dl,1 int 21h cmp ax,0ffffh je ext shl bx,9 mov string_bin_qword,bx finit fild string_bin_qword fbstp string_pack lds si,adr_string_pack add si,len_string_pack-2 les di,adr_string mov cx,9 cycl: xor ax,ax std lodsb shl ax,4 rol al,4 or ax,3030h xchg ah,al cld stosw loop cycl mov bx,1 mov cx,len_string lds dx,adr_string mov ah,40h int 21h jc ext mov ah,8 int 21h mov ax,4ch int 21h ext: mov ah,9 lea dx,er int 21h mov ah,8 int 21h mov ax,4ch int 21h text ends end start |
|||
|
||||
Logree |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
естественно ведь shl bx,9 выдвигает много бит, результат в байтах требует 4 байт, те dx:ax:
вместо
вроде так. но тогда алгоритм перевода нужно менять... проще выводи размер не в байтах а в секторах т е не сдвигай bx/ -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |