Вопрос № 71472: Уважаемые эксперты!Можете закидать меня камнями,но я в панике:в книгах Калашникова и Зубкова слово = 2б и номерация право->лево,а в учебнике информатики того борделя в котором я имею честь учится(Вальциферов и Дронов) слово = 4б и номерация лево-&...Вопрос № 71502: Эксперты, мож вы знаете. Не нахожу в Clipper возможности определить размер текстового файла . Может кто подскажет- на ассемблере как написать такую подпрограмму.
Тока как скомпилить ее с клиперовским модулем- я тоже не знаю. :( И на ассемблере писАл ...
Вопрос № 71.472
Уважаемые эксперты!Можете закидать меня камнями,но я в панике:в книгах Калашникова и Зубкова слово = 2б и номерация право->лево,а в учебнике информатики того борделя в котором я имею честь учится(Вальциферов и Дронов) слово = 4б и номерация лево->право
чтото я потерялся в этом вопросе!
Отправлен: 18.01.2007, 09:45
Вопрос задал: ATZATZ (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Олег Владимирович
Здравствуйте, ATZATZ!
Калашников и Зубков правы :)
Слово традиционно = 2 байта, как в приложениях для DOS
Но так как современные компьютеры в подавляющем большинстве 32разрядные, то единицу памяти 4 байт (традиционно двойное слово) начинают называть словом. В некоторых статьях по ИТ размер слова даже отдельно оговаривается.
Что касается нумерации бит, то всегда самый младший разряд имеет номер 0, а самый старший - 15 (в слове). Это связано наверняка с тем, что бит с номером k определяет k-ый разряд в двоичном числе, т.е. 2^k. Если нумерацию перевернуть, считать 2^(16-k) будет труднее. Кроме того, некоторые команды ассемблера (BT, BSF, например), имеют дело непосредственно с номерами бит, и, как показывает практика, нумерация по Калашникову верна.
Удачи!
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 10-ый класс)
Ответ отправлен: 18.01.2007, 10:42 Оценка за ответ: 5 Комментарий оценки: Спасибо! "имеют дело непосредственно с номерами бит"-собственно поэтому я и спрашивал!
Отвечает: Sergijj
Здравствуйте, ATZATZ!
Учебника Вальциферова и Дронова в глаза не видел, но попробую рассказать вкратце как обстоят дела.
Процессоров, процессорных платформ и разных микроконтроллеров (не говоря уж про ОС) существует много (Вы, кстати, не указали ни платформу, ни ОС под которую написан вышеупомянутый учебник).
Существуют 8-битные архитектуры (например i80x086), 16-битные (например, i80x286), 24-битные (например, pi80x286), 32-битные (например, i80x386), 64-битные (например Athlon64) и т.д...
Также существуют не только двоичные платформы, но и троичные, а также всякие нейро- и фаззи-контроллеры, мультипроцессорные архитектуры и пр., но - это уже другой коленкор. Я подозреваю, что у Вас всё ж таки платформа 16/32-битная и процессор PC-compatible.
На всех упомянутых платформах могут существовать разные подходы к хранению данных, в т.е. как слева - направо, так и справа - налево.
На PC-compatible платформах (DOS, Windows, *nix) по-умолчанию применяются следующие размеры данных:
1 бит = 1 бит
8 бит = 1 байт = символ (кроме Unicode, там - слово)
16 бит = 2 байта = слово (Unicode: символ)
32 бита = 4 байта = двойное слово (в 32-битных системах слово "двойное" авторы учебников иногда опускают)
64 бита = 8 байт = четверное слово
80 бит = 10 байт = декабайт = пентаслово
1024 байта = 1 килобайт
1024 килобайта = 1 мегабайт
1024 мегабайта = 1 гигабайт
16384 байт = 16 килобайт = параграф (в зависимости от контекста - трактуется по разному)
65536 байт = 64 килобайта = сегмент (если система имеет сегментированную архитектуру)
Опять же по-умолчанию последовательность байт в PC-compatible системах следующая:
Сначала (слева - попорядку адресов) в память пишется младший байт, потом - старший байт.
Сначала (слева - попорядку адресов) в память пишется старшее слово, потом - младшее слово.
Но когда _это_ видит человек, то для того, чтобы ему правильно прочитать это число (например дамп памяти), нужно читать СПРАВА-НАЛЕВО (т.е. как обычно - начиная со старших разрядов числа, которые в результате приведённой выше записи оказались справа).
Например (десятично = 16-рично = 16-рично-побайтно = дамп памяти;):
32767 = 7FFFh = 7F FF = FF 7F;
2147483647 = 7FFFFFFFh = 7F FF FF FF = FF FF FF 7F;
100000 = 186A0h = 00 01 86 A0 = A0 86 01 00;
Также обращаю Ваше внимание на разную трактовку размеров данных, зависящую от компилятора и ОС (C-шная нотация):
char = байт = символ (стандарт)
wchar = слово = символ (Unicode)
int = слово (в 16-битных системах) = двойное слово (в 32-битных системах) = знаковое целое
short int = всегда слово = коротное знаковое целое
long int = всегда двойное слово = длинное знаковое целое
И т.д.
Надеюсь я ответил на Ваш, столь расплывчато заданный вопрос. Но если Вы всё же не удовлетворены ответом и Вам хотелось бы вникнуть глубже - я к Вашим услугам...;)
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 7-ой класс)
Ответ отправлен: 18.01.2007, 11:17 Оценка за ответ: 5 Комментарий оценки: Это не учебник по Асму,это посто учебник информатики :)
Вопрос № 71.502
Эксперты, мож вы знаете. Не нахожу в Clipper возможности определить размер текстового файла . Может кто подскажет- на ассемблере как написать такую подпрограмму. Тока как скомпилить ее с клиперовским модулем- я тоже не знаю. :( И на ассемблере писАл последний раз в 1990 году. :( Подскажите, пожалуйста.
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Alexander Babich!
Создай BAT-файл
tasm FileSize
clipper %1
rtlink file %1 lib FileSize.obj
и вызывай с параметром - именем PRG-файла
FileSize.asm в приложении
Вызываем как
i:=FileSize("somefile.ext")
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 19.01.2007, 13:39 Оценка за ответ: 5