|
|
|
|
Определение параметра, аргумента, переменной константы
Мы "вращались" вокруг слов параметр, аргумент и переменная подобно шарикам для настольного тенниса. Большей частью эти слова имели взаимозаменяемые
значения. Теперь необходимо определить различия между ними (хотя некоторые из них несомненно будут требовать уточнения). После этой главы мы будем
всегда возвращаться к правильным способам, однако, сейчас необходимо пояснить основные понятия и положения.
Словарным понятием "параметр" является "элемент характеристики". В общем смысле параметр представляет собой ссылку на любую часть данных,
используемую модулем, которая в целом не содержится внутри этого модуля. Почему добавлены слова "ссылка на"? Потому, что параметр это не сами данные, и,
даже, не адрес данных. Скорее всего, параметр это местодержатель (элемент характеристики). Например, рассмотрим уравнение Y+1. Нельзя написать модуль для
оценки этого уравнения, потому что Y не является конкретным значением! Y есть параметр, который заменяется действительным значением во время оценки
этого уравнения. Действительное значение называется "аргументом".
Мы еще не определили понятие "переменная". Строго говоря, это нечто, размещенное в регистре или ячейке памяти и содержащее порцию данных, которые
могут в дальнейшем изменяться. В предыдущем примере Y также является переменной, поскольку он изменяется в зависимости от требуемых обстоятельств.
Поэтому аргументы автоматически являются переменными (но не наоборот).
Таким образом, если объект данных может изменяться, то это переменная. Если же эта переменная требуется в модуле для выполнения возложенной на него
задачи, то она в то же время является параметром. Аргумент - это действительное значение, которое принимает переменная при вызове модуля.
Нам также необходимо рассмотреть специальный случай "константы". Константа - это объект данных, значение которого никогда не изменяется. В языке
Ассемблер константы могут появляться в двух случаях. Они могут быть частью непосредственных данных для инструкций (например, mov al,4) или они могут
быть размещены в памяти подобно другим данным. Когда константа помещена в память, она отличается от переменной исключительно тем, что "только читается"
и никогда не записывается.
Может ли параметр также быть константой? Если константа является типом памяти, то определенно да. Однако, при попытке непосредственного использования
константы данных в качестве параметра могут возникнуть определенные проблемы. Непосредственные данные в подпрограмме передавать сами себя не могут.
Непосредственные данные должны содержаться в чем-либо: в регистре, ячейке памяти или в стеке. В языках высокого уровня о преобразовании констант с
целью их размещения заботится компилятор. В языке Ассемблер это должен делать сам программист.
|
|