Вопрос № 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
Здравствуйте, уважаемые эксперты!
Я сейчас учусь печатать вслепую десятью пальцами на английском языке. Вопрос для тех, кто это умеет делать: реально ли писать программы на Ассемблере, не смотря на клавиатуру (или вообще с закрытыми глазами)? Почему Ассемблер: потому, что тут команды наиболее специфические - не похожие на "слова" высокого уровня.
Отвечает: 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
Отвечает: Стас
Здравствуйте, 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