AOP_Tom1 (1021736), страница 42
Текст из файла (страница 42)
Они определяются для числовых слов М1Х следующим образом. С = А+В ЕРА АА,' АРР ВВ; ЯТА СС. С = А-В ЕРА АА; БРВ ВВ; ЯТА СС. С = Авй ЕРА АА; М1Л. ВВ; ЯТХ СС. С А/В ЕРА АА; ЯВАХ 5; 017 ВВ; БТА СС. С = А//В ЕРА АА; ЕМТХ 0; 01Ч ВВ; БТА СС. С ч А:В ЕРА АА; МШ. =8=; БЕАХ 5; АРР ВВ; ЯТА СС. Здесь АА, ВВ и СС вЂ” ячейки, содержащие соответствующие значения символов А, В и С. Операции внутри выражения выполняются слева направо. Пвимерм: -1+5 -1+5*20/6 равно 4. равно 4*20/6 равно 80/6 равно 13 (операции выполняются слева направо). равно слову М1Х, размер которого приблизительно равен Ь~/3, где 5 †разм байта; т.
е. слово, представляющее дробь -' с десятичной точкой слева. равно 11 (обычно используется в частичной спецификации поля). равно Ф минус три. равно Ов, умноженному на Ов . 1//3 1:3 *-3 ввв 6. А-часть (которая используется для описания адресного поля команды М1Х) либо 1. Символ — этр строка, содержащая от одной до десяти букв и/пли цифр,. среди которых должна быть по крайней мере одна буква. Примеры РВ1МЕ, ТЕМР, 208720. Специальньгя символы НН, НР и ИВ, где Н вЂ” это одна цифра, в целях данного определения будут заменяться другими уникальными символами в соответствии с соглашением о "локальных символах", о котором говорилось выше.
а) пуста (и обозначает нулевое значение), либо Ь) является выражением, либо с) является ссылкой вперед (и обозначает окончательный эквивалент символа; см. правило 13), либо Й) является литералом (и обозначает ссылку на внутренний символ; см. правило 12). 7. Иидексиал часть (которая используется для описания индексного поля команды М1Х), либо а) пуста (и обозначает нулевое значение), либо Ь) состоит из запятой и следующего за ней выражения (и обозначает значение этого выражения). 8. Р-часгаь (которая используется для описания Р-поля команды М1Х) либо а) пуста (что обозначает стандартное Р-значение в зависимости от содержимого поля ОП (см.
табл. 1.3.1-1)), либо Ь) состоит из выражения, заключенного в круглые скобки (и обозначает значение этого выражения). 9. И'-значение (которое используется для описания константы М1Х, занимающей полное слово) — это либо а) выражение, за которым следует Р-часть (в этом случае пустая Р-часть обозна- чается через (О: 5)), либо Ь) ЧЧ-значение, за которым после запятой следует %-значение вида (а).
ЧЧ-значение указывает числовое значение слова М1Х, которое определяется следующим образом. Пусть ХЧ-значение имеет вид "Е~(Р~),Ез(рэ),...,Е„(Р„)", где и ) 1, Е,— выражения, а Р,— поля. Желаемый результат — окончательное значение, которое появилось бы в ячейке памяти МЧАТ после выполнения следующей гипотетической программы: ЯТХ УЧАТ; 1.ОА С~, ЯТА УЧАТ.(Р~); ...; ЫА С„,' БТА ЧЧА~.(Р„). Здесь См ..., С„обозначают ячейки, содержащие значения выражений Ем ..., Е„.
Каждоау, должно иметь вид 8Е, +йо где О < Ь, < й, < 5. Примеры слово 1,-1000(0:2) слово -1000(0:2),1 слово 10. В процессе трансляции используется величина, которая обозначается через О~ (и называется счетчиком адреса). Первоначальное значение счетчика адреса равно нулю. Значение Э всегда должно быть неотрицательным числом, которое помещается в двух байтах. Если в строке поле метки не пусто, то оно должно содержать символ, который не был определен ранее.
Эквивалент этого символа затем определяется как текущее значение ~~. 11. После обработки поля МЕТКА, как описано в правиле 10, процесс трансляции будет зависеть от значения 'содержимого поля ОП. Существует шесть возможностей для ОП. а) В поле ОП содержится символический оператор М1Х.
В табл. 1 из предыдущего раздела определены стандартные значения С и Е для каждого оператора М1Х. В этом случае в поле АДРЕС должна находиться А-часть (правило 6), за которой следует индексная часть (правило 7), а затем — Г-часть (йравило 8). Таким образом, получаем четыре значения: С, Г, А и 1. В результате транслируется слово, которое определяется последовательностью «ЕОА С; ЯТА МОЮ; ЕРА Р; ЯТА ИОКО(4:4); ЫА 1; ЯТА МОКР(3:3); ЕОА А; ЯТА МОЮ(0:2)« и помещается в ячейку, заданную С«, а затем увеличивается на 1 значение счетчика С«ь Ь) В поле ОП содержится операция "ЕЦО".
В поле АДРЕС должно содержаться %'- значение (см. правило 9). Если поле МЕТКА не пусто, то значение содержащегося здесь символа устанавливается равным значению, заданному в поле АДРЕС. Это правило имеет более высокий приоритет, чем правило 10, Значение О* не меняется. (В качестве нетривиального примера рассмотрим строку ВУТЕЯ12Е ЕЦУ 1(4:4), позволяющую программисту получить символ, значение которого зависит от размера байта.
Эта ситуация допустима до тех пор, пока программа имеет смысл для всех возможных размеров байта.) с) В поле ОП находится "ОК10". В поле АДРЕС должно содержаться %'-значение (см. правило 9); значение счетчика адреса О«устанавливается равным этому значению. 13аметьте, что согласно правилу 10 символ, находящийся в поле МЕТКА строки с операцией ОК10, принимает значение В до его изменения. Например, ТАВОТЕ ОК10 ««100 делает символ ТАВЬЕ эквивалентным текущему адресу плюс 100.) 6) В поле ОП находится "СОМ".
В поле АДРЕС должно содержаться %-значение. В результате происходит трансляция слова, имеющего это значение, помещение его в ячейку, заданную О«, и увеличение значения счетчика ® на 1. е) В поле ОП находится "АЕР", В результате выполняется трансляция слова из символьных кодов, образуемого первыми пятью символами адресного поля; в остальном операция аналогична СОМ. 1) В поле ОП находится "ЕМО". В поле АРОКЕЯЯ должно содержаться %-значение, определяющее в своем поле (4: 5) адрес команды, с которой начинается программа.
Строка ЕМР обозначает окончание программы на языке М1ХАЕ. В завершение ассемблер вставляет в произвольном порядке непосредственно перед строкой ЕМО дополнительные строки, соответствующие всем неопределенным символам и литеральным константам (см. правила 12 и 13). Таким образом, символ в поле МЕТКА строки ЕМО будет обозначать первую ячейку, следующую за вставленными словами. 12. Литеральные константы.
%-значение, длина которого — менее 10 символов, можно заключить между знаками "=' и использовать в качестве ссылки вперед. В результате будет создан новый внутренний символ и сразу перед строкой ЕМО будет вставлена строка СОЙ, определяющая этот символ (см. примечание 4 после программы Р). 13. Каждому символу соответствует одно и только одно значение.
Это чиню, занимающее полное слово И1Х, обычно определяется символом из поля МЕТКА в соответствии с правилом 10 или 11, (Ь). Если этого символа не было в поле МЕТКА, то перед строкой ЕМР вставляется новая строка, у которой ОП = «СОМ", АДРЕС = "0" и в поле ЕОС которой содержится имя символа. Замечание. Самым важным следствием из приведенных цынге правил является ограничение на ссылки вперед. Для этого нельзя использовать символ, который еще не был определен в поле ЬОС одной из предыдущих строк; его можно применять только в качестве А-части команды. В частности, этот символ нельзя использовать (а) в связи с арифметическими операциями или (Ь) в поле АДРЕС операций ЕЦО, ОЕ10 и СОМ.
Например, операции ЕРА 2Р«1 СОМ ЗР недопустимы. Это ограничение было наложено для того, чтобы обеспечить более эффективную трансляцию программ. Кроме того, опыт, полученный в процессе написания данной серии книг, показал, что это очень мягкое ограничение, которое редко имеет сколько-нибудь существенное значение. На самом деле у И1Х есть два символических языка программирования низкого уровня: И1ХАь«, машинно-ориентированный язык, предназначенный для облегчения трансляции за один проход с помощью очень простого ассемблера, н Рь/И1Х, который более адекватно отражает информационные и управляющие структуры и выглядит, как поле примечаний програлгм на языке ИХХАЬ.
Рь/МХХ будет описан в главе 10. УПРАЖНЕНИЯ (часть 1) 1. (00) В тексте раздела отмечалось. что запись «Х Е00 1000" не генерирует машинной команды, которая присваивает значение переменной. Предположим, вы пишете программу дли М1Х, в которой хотите присвоить значение, равное 1 000, некоторой ячейке памяти (с символическим именем Х). Как это сделать на языке М1ХАь? 2.