Последние публикации
стили и дизайн Что выгоднее: покупать горячую воду или ..
17-03-2014
секрет успеха Профессия: риэлтор
25-12-2013
разное Мегаталантливый Мэрилин Мэнсон
25-12-2013
рыбалка и охота баллистический маятник
12-07-2013
Название
Автор
Рубрика

Анекдот
Объявление в аэропорту:
- Хотел совершить посадку самолет выполнявший рейс № 13
компьютерные технологии
Язык Макроассемблера IBM PC
В пособии рассматривается язык макроассеблера для персональных ЭВМ типа IBM PC (язык MASM, версия 4.0) .

не только тогда, когда используются сегментные регистры по умолчанию (как в случае с именем B) , но тогда, когда в машинной команде нужно было бы явно указать сегментный регистр (как в случае с именем C) . В MASM сегментный регистр в ссылке на имя требуется указывать лишь тогда, когда имя должно по каким-либо причинам сегментироваться по регистру, отличному от того, что поставлен в соответствие всему сегменту, в котором это имя описано.


Однако все это справедливо только при соблюдении следующих условий. Во-первых, директива ASSUME должна быть указана перед первой командой программы. В противном случае ассемблер, просматривающий текст программы сверху вниз, не будет знать, как сегментировать имена из команд, расположенных до этой директивы, и потому зафиксирует ошибку.


Во-вторых, в директиве ASSUME следует каждому сегменту ставить в соответствие сегментный регистр: если ассемблеру встретится ссылка на имя из сегмента, которому не соответствует никакой сегментный регистр, то он зафиксирует ошибку. Правда, в обоих случаях можно избежать ошибки, но для этого в ссылках необходимо явно указывать сегментный регистр.


1.4.5 Начальная загрузка сегментных регистров


Директива ASSUME сообщает ассмеблеру о том, по каким регистрам он должен сегментировать имена из каких сегментов, и "обещает", что в этих регистрах будут находиться начальные адреса этих сегментов. Однако загрузку этих адресов в регистры сама директива не осуществляет.


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


Поскольку в ПК нет команды пересылки непосредственного операнда в сегментный регистр (а имя, т.е. начало, сегмента это непосредственный операнд) , то такую загрузку приходится делать через какой-то другой, несегментный, регистр (например, AX) : MOV AX, DT1 ;AX: =начало сегмента DT1 MOV DS, AX ;DS: =AX Аналогично загружается и регистр ES.


Загружать регистр CS в начале программы не надо: он, как и счетчик команд IP, загружается операционной системой перед тем, как начинается выполнение программы (иначе нельзя было бы начать ее выполнение) . Что



Дата публикации: 15-06-2007
Прочитано: 7646 раз
Страниц: 28
-16-
[<][ 1 | ... | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 ][>]

Дополнительно на данную тему
Компьютерные сети и телекоммуникации
Корпоративная сеть
Корпоративные ЛВС
Компьютерные сети
Turbo Vision
   
Рейтинг@Mail.ru
ENQ.ru © 2005-2012
Генерация страницы: 0.044 сек. и
11 запросов к базе данных за 0.003 сек.
Designed by ZmEi