Cтраница 2
В языке ассемблера наряду с конструкцией явного адреса можно применять неявный адрес, который позволяет программисту не учитывать правила образования исполнительного адреса и представляет собой выражение ( абсолютное или перемещаемое), обозначающее ячейку оперативной памяти. Для таких адресов транслятор независимо от программиста выделяет регистр базы, формирует его содержимое ( величину базы) и величину смещения. [16]
При построении шестнадцатиричного эквивалента команды формата RX, в которой употреблен неявный адрес в первой форме, Ассемблер помещает в поле Х2 ноль, а в поля В2 и D2 - номер базового регистра и смещение, равное разности значения А и символического базового адреса. [17]
Команда USING служит для сообщения транслятору информации, необходимой для представления неявного адреса в виде регистра базы и смещения. По команде USING транслятор не строит ни машинной команды, ни константы, поэтому во время выполнения программы никаких действий не производится. [18]
В машинных командах, записанных на языке ассемблера, операндами могут быть неявные адреса, а не значения регистра базы и смещения. Для таких адресов транслятор с языка ассемблера создает на машинном языке коды, указывающие значение регистра базы и смещения. Это избавляет программиста от кропотливой работы по вычислению смещения. [19]
Определение и загрузка базовых регистров в односекционной програм - ме с помощью команды. [20] |
При написании команд загрузки базовых регистров необходимо следить за тем, чтобы неявные адреса операндов команд загрузки L или LA могли бы быть базированы регистрами, определенными и загруженными ранее. [21]
Итак, в момент, когда Ассемблер приступает к обработке машинной команды, содержащей неявный адрес, в таблице базовых регистров он находит номер по крайней мере одного общего регистра, который ему разрешено использовать в качестве базового, и значение базового адреса в этом регистре. [22]
Команда USING нужна в тех и только тех случаях, когда в программе имеются неявные адреса. [23]
Команда USING ( определить регистр базы) предназначена для передачи информации Ассемблеру, необходимой для представления неявного адреса в виде регистра базы и смещения. [24]
Команда USING может помещаться в любом месте программы, но обязательно перед теми командами, которые используют неявные адреса и определяемые регистры базы. Перед выполнением команды USING программист должен разместить команды, которые бы загружали регистр, так как сама команда USING только информирует транслятор о том, какой регистр будет использован в качестве базового и каково содержимое этого регистра. [25]
В языке ассемблера имеет место конструкция определения символических адресов тех общих регистров, которые помещают значения базы для неявных адресов. Эта конструкция состоит из семи элементов строки. Тело первого из них содержит либо символический адрес ( этой конструкции), дополненный пробелами до восьми позиций ( если в адресе меньше чем восемь символов), либо восемь пробелов. Тело пятого элемента строки содержит от 2 до 17 адресных выражений, разделенных запятыми. [26]
Общий регистр 11 выбран в качестве базового автором программы для обеспечения доступа к предложениям исходного модуля с помощью неявных адресов. [27]
При первом способе имеется риск допустить ошибку в программе ( которую будет довольно трудно обнаружить, особенно при использовании неявных адресов), а при втором способе несколько усложняется распечатка содержимого этой области, а именно - задание ее длины. [28]
Первое выражение определяет начальный адрес той области основной памяти ( объемом 4096 восьмиразрядных ячеек), в которой расположены операторы, содержащие неявные адреса, для формирования которых будет использоваться в качестве базы, содержимое общего регистра с действительным ардесом, заданным величиной второго выражения. [29]
Как видно, возможность явного использования внешних имен в операнд-ной части команд требует дополнительных усилий со стороны программиста для обеспечения базирования неявных адресов, в которые РХОДИТ внешнее имя. [30]