рефакторинг общих данных
This commit is contained in:
parent
84646f02c6
commit
171cb1af10
39
kvs_data.py
39
kvs_data.py
|
|
@ -331,6 +331,45 @@ VARIABLE_SIZE_INSTRUCTIONS = {
|
|||
"переместить_со_знаком", # зависит от размера регистра
|
||||
}
|
||||
|
||||
# === ИНСТРУКЦИИ, ВСЕГДА ТРЕБУЮЩИЕ ЗАГЛУШКУ НА ПЕРВОМ ПРОХОДЕ ===
|
||||
# Эти инструкции содержат целевые метки в операндах, которые могут быть
|
||||
# определены позже (в том числе в других секциях)
|
||||
ALWAYS_STUB_INSTRUCTIONS = {
|
||||
# Безусловные переходы
|
||||
"переход",
|
||||
"короткий_переход",
|
||||
|
||||
# Вызовы
|
||||
"вызвать",
|
||||
|
||||
# Циклы
|
||||
"цикл",
|
||||
|
||||
# Длинные условные переходы (32-битное смещение)
|
||||
"переход_если_равно",
|
||||
"переход_если_неравно",
|
||||
"переход_если_меньше",
|
||||
"переход_если_больше",
|
||||
"переход_если_меньше_или_равно",
|
||||
"переход_если_больше_или_равно",
|
||||
"переход_если_перенос",
|
||||
"переход_если_нет_переноса",
|
||||
"переход_если_ноль",
|
||||
"переход_если_не_ноль",
|
||||
|
||||
# Короткие условные переходы (8-битное смещение)
|
||||
"короткий_переход_если_равно",
|
||||
"короткий_переход_если_неравно",
|
||||
"короткий_переход_если_меньше",
|
||||
"короткий_переход_если_больше",
|
||||
"короткий_переход_если_меньше_или_равно",
|
||||
"короткий_переход_если_больше_или_равно",
|
||||
"короткий_переход_если_перенос",
|
||||
"короткий_переход_если_нет_переноса",
|
||||
"короткий_переход_если_ноль",
|
||||
"короткий_переход_если_не_ноль",
|
||||
}
|
||||
|
||||
|
||||
# === ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ===
|
||||
|
||||
|
|
|
|||
29
kvs_pass1.py
29
kvs_pass1.py
|
|
@ -15,7 +15,7 @@ import sys
|
|||
import csv
|
||||
|
||||
sys.path.insert(0, '.')
|
||||
from kvs_data import PAGE_SIZE, text_vaddr_base, align_up
|
||||
from kvs_data import PAGE_SIZE,ALWAYS_STUB_INSTRUCTIONS, text_vaddr_base, align_up
|
||||
from kvs_encoder import encode_instruction
|
||||
|
||||
# ========== ГЛОБАЛЬНОЕ СОСТОЯНИЕ ==========
|
||||
|
|
@ -44,33 +44,6 @@ data_pos = 0
|
|||
entry_point = "_start"
|
||||
relocations = []
|
||||
|
||||
# Список инструкций, которые всегда должны получать заглушки в первом проходе
|
||||
ALWAYS_STUB_INSTRUCTIONS = {
|
||||
"переход",
|
||||
"короткий_переход",
|
||||
"вызвать",
|
||||
"цикл",
|
||||
"переход_если_равно",
|
||||
"переход_если_неравно",
|
||||
"переход_если_меньше",
|
||||
"переход_если_больше",
|
||||
"переход_если_меньше_или_равно",
|
||||
"переход_если_больше_или_равно",
|
||||
"переход_если_перенос",
|
||||
"переход_если_нет_переноса",
|
||||
"переход_если_ноль",
|
||||
"переход_если_не_ноль",
|
||||
"короткий_переход_если_равно",
|
||||
"короткий_переход_если_неравно",
|
||||
"короткий_переход_если_меньше",
|
||||
"короткий_переход_если_больше",
|
||||
"короткий_переход_если_меньше_или_равно",
|
||||
"короткий_переход_если_больше_или_равно",
|
||||
"короткий_переход_если_перенос",
|
||||
"короткий_переход_если_нет_переноса",
|
||||
"короткий_переход_если_ноль",
|
||||
"короткий_переход_если_не_ноль",
|
||||
}
|
||||
|
||||
|
||||
def reset_state():
|
||||
|
|
|
|||
Loading…
Reference in a new issue