Лаб. Занятие 7. Обязательные задания
Требуемые условия завершения
Открыто с: понедельник, 14 октября 2024, 08:00
Срок сдачи: пятница, 18 октября 2024, 17:25
Лаб. Занятие 7. Обязательная задача [4 балла]
Следует разместить в Moodle решение одной из перечисленных ниже задач (по выбору преподавателя).
Во всех заданиях следует отправлять на проверку:
1) реализацию заданной инструкции на микропрограммном уровне (тот фрагмент с короткой микропрограммой на языке микроассемблера MAL, который Вы добавляете в файл mic1mmv-mmcs.mal);
2) JAS file, в котором Вы вызываете созданную Вами новую инструкцию.
Измененный файл ijvm-mmcs.conf, который Вам нужен для проверки работоспособности Вашей микропрограммы отправлять не надо.
- [
v71
] Реализуйте инструкцию DUP_X2, описанную на стр. 135, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна менять содержимое стека следующим образом: значение, размещенное на вершине стека должно продублироваться в третью по глубине ячейку стека, сдвинув остальные. Т. е. если до инструкции стек имел вид ....s , v1, v2, v3 (v3- значение, лежащее на вершине стека) то после выполнения DUP_X2 стек должен иметь вид ...s, v3, v1, v2, v3. - [
v72
] Реализуйте инструкцию DUP2_X1, описанную на стр. 135, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна менять содержимое стека следующим образом: пара значений, размещенных на вершине стека и в предыдущей ячейке должна продублироваться в глубину стека, сдвинув остальные значения. Т. е. если до инструкции стек имел вид ....s , v1, v2, v3 (v3- значение, лежащее на вершине стека) то после выполнения DUP2_X1 стек должен иметь вид ...s, v2, v3, v1, v2, v3 - [
v73
] Разработайте микропрограмму для реализации инструкции 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
- [
v74
] Разработайте микропрограмму для реализации инструкции IREM, описанной на стр. 136, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна вместо лежащих на стеке значений a, b размещать на вершине стека остаток целочисленного деления a%b. Для упрощения считайте, что оба числа положительные. - [
v75
] Разработайте микропрограмму для реализации инструкции LCMP, описанной на стр. 136, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Вместо лежащих на стеке значений ... , a , b на вершине стека должен быть 0, если a==b, -1, если a<b, и 1 в противном случае (... , a == b ? 0 : (a < b ? -1 : 1)). - [
v76
] Разработайте микропрограмму для реализации инструкции INEG, описанной на стр. 135, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. - [
v77
] Разработайте микропрограмму для реализации инструкции IDIV, описанной на стр. 135, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна размещать на вершине стека результат целочисленного деления. Для упрощения считайте, что оба числа положительные. - [
v78
] Разработайте микропрограмму для реализации инструкции IASTORE для работы с массивами, описанной на стр. 137, A. Appendix в Справочнике ассемблерных инструкций Java-машины. Код для инструкции подберите самостоятельно. Инструкция должна для размещенных на стеке адреса начала массива, смещения в массиве и некоторого значения а, записать в указанный элемент массива значение а. Если до инструкции стек имел вид ....s, o,i,a (a - значение, лежащее на вершине стека) то после выполнения IASTORE cтек должен иметь вид ...s. Для того, чтобы узнать адрес начала массива, в 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
- [
v79
] Разработайте микропрограмму для реализации инструкции MAXAB. Код для инструкции подберите самостоятельно. Вместо лежащих на стеке значений ... , a , b на вершине стека должен быть b, если a<b, и a в противном случае (... , a < b ? b : a).