Давайте создадим компилятор!   ::   Креншоу Джек

Страница: 318 из 382



Действия, которые мы должны выполнить, лучше всего показывает следующая таблица:

T1

T2 B W L

B Преобразовать D0 в W

Преобразовать D7 в W

MULS

Result = W Преобразовать D0 в W

MULS

Result = L Преобразовать D0 в L

JSR MUL32

Result = L

W Преобразовать D7 в W

MULS

Result = L MULS

Result = L Преобразовать D0 в L

JSR MUL32

Result = L

L Преобразовать D7 в L

JSR MUL32

Result = L Преобразовать D7 в L

JSR MUL32

Result = L JSR MUL32

Result = L

Эта таблица показывает действия, предпринимаемые для каждой комбинации типов операндов. Есть три вещи, на которые необходимо обратить внимание: во-первых, мы предполагаем, что существует библиотечная подпрограмма MUL32, которая выполняет 32 x 32 умножение, оставляя 32-битное (не 64) произведение. Если в процессе этого происходит переполнение мы игнорируем его и возвращаем только младшие 32 бита.

Во-вторых, заметьте, что таблица симметрична. Наконец, обратите внимание, что произведение это всегда длинное слово, за исключением случая когда оба операнда байты. (Стоит заметить, между прочим, что это означает что результатом многих выражений будет длинное слово, нравится нам это или нет. Возможно идея перевода всех их заранее не была уж такой возмутительной, в конце концов!)

Теперь ясно, что мы должны будем генерировать различный код для 16-разрядного и 32-разрядного умножения.

|< Пред. 316 317 318 319 320 След. >|

Java книги

Контакты: [email protected]