Оперативная память

         

В 1 Вариант размещения данных в стеке



Таблица В.1. Вариант размещения данных в стеке



Смещение Что находится в слове
bp+ 0 Исходное содержимое регистра bp
bp+ 2 Младшая часть адреса возврата (IP)
bp+ 4 Старшая часть адреса возврата (cs)
bp+ 6 Второй параметр подпрограммы
bp+ 8 Первый параметр подпрограммы

В соответствии с табл. В.1, при сделанных выше допущениях, полный адрес первого параметра равен ss: [bp+8], а второго — ss: [bp+б]. Как уже говорилось, сегментный регистр ss в записи операндов не указывается, поскольку в данном случае он используется по умолчанию. Например, произведение параметров можно вычислить с помощью двух команд:

mov ах, [bp+б] ; ах = значение первого параметра
mul [bp+81 ; dx:ax = ах * значение второго параметра

В общем случае адрес параметра, т. е. значение, прибавляемое к ьр, зависит от размеров предшествующих величин и его собственного размера. Поэтому при разработке подпрограммы надо предварительно определить, что конкретно будет находиться в стеке при ее вызове.

Внешняя процедура cnvindec. Рассмотрим простую внешнюю процедуру, которая преобразует последовательность десятичных цифр, представленных в коде ASCII, в код десятичного числа. Цифры в коде ASCII получаются, например, при вводе чисел с клавиатуры. Для того чтобы результат ввода можно было использовать при вычислениях, последовательность цифр надо преобразовать в шестнадцатеричный код числа.

Алгоритм формирования десятичного числа следующий. Обозначим формируемое число как result и предположим, что в исходном состоянии result = о. В таком случае на шаге номер I значение result умножается на 10 и к произведению прибавляется код очередной цифры:

result = result * 10 + digit [I]

Перед прибавлением кода очередной цифры его надо преобразовать в двоичный код. В формате ASCII коды цифр изменяются от 30h до зэь, поэтому для преобразования из кода цифры вычитается код нуля (зсш). Кроме того, надо проверить, действительно ли очередной символ строки является цифрой, и если это не так, то процесс формирования числа прекращается.

Завершенный текст подпрограммы приведен в примере В.5. Перед ее вызовом в стеке указывается полный адрес преобразуемой строки (сегмент и смещение).

Сформированное число помещается в стек на место адреса строки. Кроме того, при возврате из подпрограммы в регистре ai находится код символа, при обнаружении которого было прекращено формирование результата. Им может быть любой символ, кроме цифры. Вариант обращения к подпрограмме описан ниже.



Содержание раздела