Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 238
от 13.09.2005, 23:24

Администратор:Калашников О.А.
В рассылке:Подписчиков: 262, Экспертов: 21
В номере:Вопросов: 4, Ответов: 8


Вопрос № 26049: Не могу точно понять почему в ассемблере под Дос выбран способ адресации спомощью сегмента и смещения в такой форме. Изюминка в етом вопросе состоит в том что каждый сегмент налаживается на придыдущий с разнецей в 16 байт, почему нельзя было зделать ...
Вопрос № 26052: Не могу точно понять почему в ассемблере под Дос выбран способ адресации спомощью сегмента и смещения в такой форме. Изюминка в етом вопросе состоит в том что каждый сегмент налаживается на придыдущий с разнецей в 16 бит, почему нельзя было зделать с...
Вопрос № 26060: Здравствуйте, уважаемые эксперты! Я сейчас учусь печатать вслепую десятью пальцами на английском языке. Вопрос для тех, кто это умеет делать: реально ли писать программы на Ассемблере, не смотря на клавиатуру (или вообще с закрытыми глазами)? Поч...
Вопрос № 26063: Ну ну у меня assembler вообще не пашет я хочу из obj - файла сделать exe: LINK.EXE Proga1.asm а MASM мне пишет: Proga1.obj : fatal error LNK1190: invakid fixup found,, type 0x0001 ...

Вопрос № 26.049
Не могу точно понять почему в ассемблере под Дос выбран способ адресации спомощью сегмента и смещения в такой форме. Изюминка в етом вопросе состоит в том что каждый сегмент налаживается на придыдущий с разнецей в 16 байт, почему нельзя было зделать сначала первый сегмент размерностью 65536 байт по адресу 0000, а затем следующий такой же сегмент по адресу 0001. Ну и почему налажывается именно с разницей в 16 байт? Заране благодарю за ответ. Спасибо всем большое.
Отправлен: 08.09.2005, 16:33
Вопрос задал: Dr_Set (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Boriss
Здравствуйте, Товченко Тарас Викторович!
Для этого были исторические причины. Сначала было, грубо говоря, только 16 проводков, на которых можно было выставить высокий или низкий уровень сигнала -(0 и 1) - то есть это была адрес ячейки памяти (вот Вам и 16 бит). Потом техника еще не развилась сильно, а уже хотелось адресовать больше. Вот и придумали, что адрес состоит из двух частей: первая часть сегмент умножается на 16, вторая часть - смещение складывается с результатом
---------
Прорвемся! (Быть может :(( )
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 08.09.2005, 16:46
Оценка за ответ: 3

Отвечает: Ayl
Здравствуйте, Товченко Тарас Викторович!

Налаживается - это когда с механизмами. Ну, или когда сильно "налажался"... А сегменты - либо накладываются, либо перекрываются.

А насчет того, почему выбрана такая схема - к ребятам из Интела. Типа, к авторам.
Могу только предположить, что это сделано из-за того, что все регистры 16-тиразрядные, а адресная шина для первых процов была 20-разрядной. Вот и встал вопрос, как из 2-х 16-тиразрядных числе сделать 20-разрядное.

А в 16 байт разница как раз из-за принятой схемы формирования адреса: сдвиг адреса сегмента на 4 разряда влево как раз и дает умножение на 16. Т.е. единица в сегментном регистре соответствует 16-ти адресам.

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 08.09.2005, 17:21
Оценка за ответ: 3

Отвечает: Bob Johnson
Здравствуйте, Товченко Тарас Викторович!
А вот тут-то как раз все очень просто... Процессор 8086 был 16-ти разрядным, значит умел оперировать с числами от 0 до 65535. Это всего 64к, если адресоваться по одному такому регистру. Этого было мало для процессора того времени (8080 умел адресовать столько же памяти), поэтому вопрос надо было каким-то образом решать. Вариантов решения много. Самый простой был реализован на спектруме - там просто переключались страницы памяти средствами, вообще не входящими в процессор. Intel решила решить этот вопрос другим путем - введением сегментации.
А вот теперь, почему размер сегмента не равен 64к - если бы он был равен 64К, то даже 8086 смог бы адресовать 4Г памяти и сегменты бы не перекрывались. Объемов памяти больше 1 мб было по тем временам просто не нужно (т.к. скорость процессора была невысокой и он все равно не смог бы эффективно ее использовать), а то, что сегменты бы неперекрывались только усложняло работу с отдельными их частями. Основное преимущество перекрывающихся сегментов
- минимальной единицой сегментации становится параграф (16 байт). это означает, что _любую_ программу можно сдвигать на любое количество параграфов вверх или вниз без изменения ее кода, потому что при этом будет изменяться только сегмент адреса, а смещение останется тем же. Минимальным эффективно выделямым блоком памяти так же являются 16 байт - дос всегда выделял память блоками по 16 байт. при этом работать с такой памятью было легко, т.к. менеджеру памяти не было необходимости залезать внутрь сегмента. Также в этом есть и преимущества с программной точки зрения - если бы сегменты были размером по 64к, то переход с одного сегмента в другой надо было бы отлавливать в любом случае, т.к. он был бы неизбежан. в 16-ти байтном же варианте, если блок памяти не превышает 64к, то всегда можно подобрать сегмент так, чтобы этот блок целиком в нем располагался.
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 08.09.2005, 18:00
Оценка за ответ: 4


Вопрос № 26.052
Не могу точно понять почему в ассемблере под Дос выбран способ адресации спомощью сегмента и смещения в такой форме. Изюминка в етом вопросе состоит в том что каждый сегмент налаживается на придыдущий с разнецей в 16 бит, почему нельзя было зделать сначала первый сегмент размерностью 65536 байт по адресу 0000, а затем следующий такой же сегмент по адресу 0001. Ну и почему налажывается именно с разницей в 16 бит? Заране благодарю за ответ. Спасибо всем большое.
Отправлен: 08.09.2005, 17:24
Вопрос задал: Dr_Set (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Boriss
Здравствуйте, Dr_Set!
Дык, сегменты могут быть разными по величине. Зачем держать 65536 байт, если нужно 64, например?
---------
Прорвемся! (Быть может :(( )
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 08.09.2005, 18:08
Оценка за ответ: 5


Вопрос № 26.060
Здравствуйте, уважаемые эксперты!
Я сейчас учусь печатать вслепую десятью пальцами на английском языке. Вопрос для тех, кто это умеет делать: реально ли писать программы на Ассемблере, не смотря на клавиатуру (или вообще с закрытыми глазами)? Почему Ассемблер: потому, что тут команды наиболее специфические - не похожие на "слова" высокого уровня.
Отправлен: 08.09.2005, 19:22
Вопрос задал: Стомов Евгений (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sager
Здравствуйте, Стомов Евгений!
Конечно реально. Это сначало синтаксис ассемблера будет непонятен и поэтому могут возникнуть трудности, но это пока не привыкнешь(у меня это заняло пару дней), а потом все будет ок, только с закрытыми глазами сможешь печатать отдельные куски кода, а не всю программу,т.к. надо, чтобы у тебя была феноменальная память и иметь богатый опыт разработки программ(это чтобы писать "без отладки")
Ответ отправил: Sager (статус: 6-ой класс)
Отправлен: 08.09.2005, 20:14

Отвечает: mvp
Здравствуйте, Стомов Евгений!
Лично я пишу не смотря на клавиатуру - будь то английский, русский или украинский (звыняйте, хохол я :)). Даже SMS на своём телефоне свободно могу набрать вслепую (ну, 3 года один и тот же телефон - любой сможет :)). Но: советую не ставить перед собой такую цель - когда без отрыва смотришь в монитор, глаза гораздо больше устают, чем когда время от времени смотришь на клавиатуру. А ассемблер - команды достаточно короткие, так что научиться печатать несколько слов особых проблем не составит. А если совсем не вмочь, то найдите Solo или Stamina - клавиатурные тренажёры и научитесь.
---------
Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: 4-ый класс)
Отправлен: 08.09.2005, 23:10


Вопрос № 26.063
Ну ну у меня assembler вообще не пашет я хочу из obj - файла сделать exe:
LINK.EXE Proga1.asm
а MASM мне пишет:
Proga1.obj : fatal error LNK1190: invakid fixup found,, type 0x0001

Приложение:

Отправлен: 08.09.2005, 20:34
Вопрос задал: Petya-kurochkin (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Стас
Здравствуйте, Petya-kurochkin!
Так все замечательно компилится...
Первая часть MASM32 (Microsoft (R) Macro Assembler Version 5.10
+Microsoft (R) Incremental Linker Version 5.12.8078)
батник N1 в приложении (использовать: a.bat)

Вторая TASM (Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International+Turbo Link Version 4.0 Copyright (c) 1991 Borland International)
батник N2 в приложении (использовать: comp имяфайла.asm)

Приложение:

Ответ отправил: Стас (статус: Специалист)
Отправлен: 09.09.2005, 01:13
Оценка за ответ: 3

Отвечает: Boriss
Здравствуйте, Petya-kurochkin!
Первая в моем MASM32 v.6.14.8444 прошла без проблем у меня. (Я один-к-одному скопировал Ваш пример)
Пользуетесь стандартными .bat-файлами? Может линковщик битый? Другие идут?

А что за проблемы со второй? Если с помощью тогоже MASM'a получить .COM, то не удастся. 32-битный для этого не подходит. А для .EXE-исходник второго не подходит
---------
Прорвемся! (Быть может :(( )
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 09.09.2005, 17:07
Оценка за ответ: 4


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное