Лабораторная №7. Микропрограммирование (продолжение)
Лабораторная №7. Микропрограммирование. [3 балла]
Во всех заданиях следует отправлять на проверку:
1) реализацию заданной инструкции на микропрограммном уровне (тот фрагмент с короткой микропрограммой на языке микроассемблера MAL, который Вы добавляете в файл mic1mmv-mmcs.mal);
2) JAS file, в котором Вы вызываете созданную Вами новую инструкцию.
Измененный файл ijvm-mmcs.conf, который Вам нужен для проверки работоспособности Вашей микропрограммы отправлять не надо.
- Разработайте микропрограмму для реализации инструкции LCMP, описанной на стр. 136, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Вместо лежащих на стеке значений ... , a , b на вершине стека должен быть 0, если a==b, -1, если a<b, и 1 в противном случае (... , a == b ? 0 : (a < b ? -1 : 1)).
- Разработайте микропрограмму для реализации инструкции IDIV, описанной на стр. 135, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна размещать на вершине стека результат целочисленного деления. Для упрощения считайте, что оба числа положительные.
Дополнительное задание [1 балл]
Разработайте микропрограмму для реализации инструкции IALOAD для работы с массивами, описанной на стр. 135, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна для лежащих на стеке адреса начала массива и смещения в массиве, размещать на вершине стека значение соответствующего элемента массива. Т. е. если до выполнения инструкции на стеке лежали значения ...s,o,i (o- адрес начала массива, i - смещение в массиве), то после выполнения IALOAD стек должен иметь вид ...s, o[i]. Для того, чтобы узнать адрес начала массива, в mal-файле нужно разместить функцию
aload1 H = LV // MBR contains index; Copy LV to H aload2 MDR = TOS = MBRU + H // Copy LV + index to H aload3 PC = PC + 1; fetch aload4 MAR = SP = SP + 1; wr; goto Main1 // Push var address onto stack