Доброго времени суток всем. Запутался в адресациях памяти. 1. Непосредственная адресация 2. Прямая адресация 3. Прямая регистровая адресация 4. Косвенная регистровая адресация 5. Индексная регистровая адресация 6. Относительная адресация. 7. Прямая индексная адресация 8. Относительная индексная адресация 9. Автоинкрементная( автодекриментная) 10. Поразрядная адресация Если есть немножко времени, немогли бы вы написать, примеры каждого вида адресации на примере ассемблерного кода. и еще нигде не могу найти последовательность микрокоманд к каждой из них. Уже благодарен вам)
может натолкнет на путь истинный: http://256bit.ru/education/infor1/lecture3-4.htm http://www.intuit.ru/department/hardware/mpbasics/4/ http://www.google.com.ua/search?rlz=1C1GGLS_ruUA299&sourceid=chrome&ie=UTF-8&q=Методы+адресации с примерами на асме: http://www.refstore.ru/box/9/pro/1571/index1.6.html
адресация то не менялась многие из этих адресаций изучались на базе i8080 (КР580ВМ80А) чемоданчик был что надо.
ну сейчас-то понятия "индексной адресации" как таковой нет, esi и edi уже не особые индексные регистры, а самые обычные.
GoldFinch, спасибо) А примеры микрокоманд есть? вот у меня например по относительной есть: 1.Формирование адреса регистра 2.Чтение данных из регистра 3.Инкрементирование счетчика 4.Чтение константы 5.Суммирование 6.Результат сложить с содержимым регистра(где хранится адрес сегмента) Ну не понятно что к чему,зачем и почему((
Как записать на ассемблере ADD приемник, источник если источник: прямая индексная адресация, а приемник: автодекрементная. З.Ы:Это поможет
Luzer На IA-32 такого нет. Вообще виды адресации зависят от архитектуры проца. На PDP-11 эти виды есть, но приёмник там записывается вторым операндом, наприер: ADD 10(R3),-(R5) Но на IA-32, повторюсь, нет таких видов адресации.
видимо имеется ввиду, что сначала нужно прочитать значение приемника из памяти, потому значение источника, а потом выполнить команду... я сам не очень въезжаю... а что нибудь по поводу микрокоманд можете сказать? (5 пост по счету)
Вобщем взял я счя книжко про 386й проц в русском переводе и прочитал там что адресация бывает 1) прямая, [imm16] 2) косвенная регистровая, [bx] 3) относительная, [bx+4] 4) прямая индексная, imm16[si] 5) относительная индексная, [bx+si+4] для 32-разрядного режима 2 и 3 - одно и тоже, и вообще ограничений на регистры нет + в 32-разрядном режиме есть масштабирование [eax+ecx*8] автодекрементная - видимо для строковых инструкций %)
Вот кстате, как я понимаю, "изучая" этот предмет, уже три месяца( Называется он схемотехника ), что команды ассемблера состоят из микрокоманд(микропрограмм). Я сам не понимаю, как в какой-то одно команде(нам давали примеры) происходит переключение регистра счетчика команд по несколько раз. Видимо имеется ввиду, какое-то действие из некоторой последовательности команд на ассемблере, которые нада перевести в последовательность микрокоманд... в 5 посте, я приводил пример последовательности микрокоманд, при считывание данных используя относительную адресацию.
GoldFinch Автоинкремент и автодекремент -- да, только в строковых инструкциях. В этом списке нет регистровой и непосредственной (о чём написал t00x); кроме того, обозначение imm (immediate) некорректно. Так обозначают операнд, являющийся константой, но не адрес или часть адреса операнда; в последнем случае надо использовать disp (displacement). K10 Точнее, LSI-11 -- кастрированного варианта PDP-11. Главные отличия: в принципе отсутствуют разные режимы процессора (пользователь/система) и нет приоритета внешних прерываний (единственная линия, разделяемая всеми устройствами, а не до 7 линий). Плюс система команд поменьше, хотя все основные, есно, имеются. GoldFinch Если говорить точно, микрокод -- это последовательность микрокоманд. А микрокоманда -- это нечто цельное, что выполняется железом за один "заход" (обычно за один такт, но не всегда). Но вовсе не требуется реализовать команды с помощью микрокоманд. Первые вычислительные машины имели жёсткое схемное управление (где каждая команда и была элементарной операцией, исполняемой аппаратурой без всяких промежуточных звеньев в виде микрокоманд). Но сложные системы команд реализовать прямо в электронике проблематично. Например, у IBM были мэйнфреймы из серии 360 с полностью схемной реализацией, но в конце концов от такого подхода отказались в пользу микропрограммной реализации. Как правило, в одной микрокоманде задаётся несколько действий одновременно, но как она "устроена", зависит, есно, от железа. Длина микрокоманды может очень существенно различаться даже на машинах, реализующих одинаковую систему команд. У ЕС-1035 (советский мэйнфрейм, аналог IBM System/370) микрокоманда имела длину 32 бита, но обычно они были длиннее, нередко превосходя 100 бит. Наконец, в производительных процессорах обычно используется смесь аппаратного и микропрограммного управления. Например, в ЕС-1130 (последняя советская серийная ЕСка) выборка команд из памяти, их декодирование и вычисление адресов операндов в большинстве случаев выполнялось аппаратно, а сами команды исполнялись микропрограммами, причём наиболее часто используемые команды реализовывались микропрограммами из одной микрокоманды. Благодаря совмещению аппаратного и микропрограммного управления там удавалось выполнять по одной такой команде за такт процессора, что определяло высокое по тем меркам быстродействие. В то же время у упомянутой выше ЕС-1035 почти всё реализовывалось микропрограммно, и её быстродействие при примерно одинаковой (вроде бы даже более высокой) тактовой частоте было в несколько раз ниже.
похоже у нас одна и та же книжка (рыжая такая) я хз как непосредственное значение связано с адресацией, а если и связано, то что оно "адресует" %) думаю это ошибки перевода
GoldFinch Термин "адресация" применительно к машинным командам означает способ, которым операнд команды может быть обнаружен и пущен в дело. Поэтому регистровая адресация -- это когда операнд находится в регистре, а в коде команды задаётся номер (адрес) этого регистра, непосредственная адресация -- когда операнд находится в самом коде команды (т.е. является константой), прямая -- когда в команде прямо указан адрес операнда в памяти (т.е. когда адрес является константой) и т.д. murder Это прямая адресация: 500 является адресом операнда, а не самим операндом. А непосредственная -- это mov ax,500 (операндом является само число 500).