Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Borland C, asm, дискета), Работа с секторами дискеты 
:(
    Опции темы
irinak0912
Дата 7.2.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Нужно считать в файл с дискеты указанное количество секторов. И наоборот: с файла записать на дискету указанное число секторов.
Борланд С + ассемблер.
Вот мои начинания, несовсем успешные, может кто поможет.
Спасибо огромное.

Код
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <time.h>
static char dat[512], dat1[512];
int segm, segm1, off1, off;
unsigned char st1, dor, sek;
char disc;
void main (void) {
disc=0x00;
//for (int i=0; i<100; i++)
//{
//dat = i%10;
//}

_asm {
      mov ah,0x00
      mov dl,disc
      int 13h
      }
puts("Enter storonu 1 2");
scanf("%d",&st1);
puts("Enter doroshku");
scanf("%d",&dor);
puts("Enter kol cektorov");
scanf("%d",&sek);
FILE *fil, *ou;

fil=fopen("c:\\temp\\123.txt","wt");
ou=fopen("c:\\temp\\1234.txt","rt");

//for (int i=0; i<100; i++)
//{
fscanf(ou,"%s",&dat);
//}

for (int i=0; i<100; i++)
{
printf("%d",dat);
}


off=FP_OFF(dat);
segm=FP_SEG(dat);


_asm{
   mov bx,off
   mov es,segm
   mov ah,0x03
   mov al,sek
   mov ch,dor
   mov cl,0x1
   mov dh,st1
   mov dl,disc
   int 13h
}

//getchar();
puts("scital");
getchar();
//puts("pishu");
delay(1000);
puts("pishu");
off1=FP_OFF(dat1);
segm1=FP_SEG(dat1);

_asm{
   mov bx,off1
   mov es,segm1
   mov ah,0x02
   mov al,sek
   mov ch,dor
   mov cl,0x1
   mov dh,st1
   mov dl,disc
   int 13h
}

for (i=0; i<100; i++)
   fprintf (fil, "%d",dat1);

fclose(fil);

getchar();

}



Модератор: Не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 7.2.2010, 22:06
PM MAIL   Вверх
bsa
Дата 7.2.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



А в чем проблема? Не пишет или не компилируется? Кажется, в сегментные регистры нельзя данные загружать напрямую, надо через другой регистр: mov es,segm => mov ax,segm + mov es,ax
PM   Вверх
irinak0912
Дата 8.2.2010, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



bsa, Компилируется, уже работает)
Можно так задавать напрямую)
Сейчас возник вопрос, как из файла записать на дискету указанное количество секторов?
Не подскажете ли?
Спасибо большое-большое)
PM MAIL   Вверх
bsa
Дата 8.2.2010, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



irinak0912, так же как и читать, только команда другая. Почитай описание INT 13h
PM   Вверх
irinak0912
Дата 8.2.2010, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Ребята, Новая проблема))
С файла на диске записываю на дискету указанное количество секторов.

Код

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
void Zapis(void);


int main()
{
    Zapis();
    getch();
    return 0;
}



void Zapis(){
int i,sec;
char buf[5000];
printf("Vvedite name faila:\n");
scanf("%s",buf);
printf("Vvedite kol-vo sectorov:\n");
scanf("%d",&sec);
FILE *fr=fopen(buf,"rb");
fread(buf,sizeof(char),512*sec,fr);
char *seg,*off,*ptr1;
int disc;
disc=0x00;
{
    _AH=0x00;
    _DL=disc;
    geninterrupt(0x13);
}
  do{
    off=(char*) FP_OFF(buf);
    seg=(char*) FP_SEG(buf);   
    ptr1=(char*) MK_FP(seg,off);
    _BX = (int ) off;
    _ES = (int ) seg;
    _AH = 0x03;
    _AL = sec;
    _CH = 1;
    _CL = 1;
    _DH = 1;
    _DL = disc;
    geninterrupt(0x13);
  }while((_AH!=0x0 || _AL==0));
  printf("GOTOVO!\n");
}



А как задать имя  файла, в который записать указанное количество секторов с файла на диске?

Спасибо за помощь)
PM MAIL   Вверх
bsa
Дата 9.2.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
char fileName[100];
printf("Input file name: ");
fflush(stdout);
scanf("%99s", fileName);


Добавлено через 48 секунд

M
bsa
irinak0912, пожалуйста, один топик - один вопрос.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.