рефакторинг общих данных
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
|
import csv
|
||||||
|
|
||||||
sys.path.insert(0, '.')
|
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
|
from kvs_encoder import encode_instruction
|
||||||
|
|
||||||
# ========== ГЛОБАЛЬНОЕ СОСТОЯНИЕ ==========
|
# ========== ГЛОБАЛЬНОЕ СОСТОЯНИЕ ==========
|
||||||
|
|
@ -44,33 +44,6 @@ data_pos = 0
|
||||||
entry_point = "_start"
|
entry_point = "_start"
|
||||||
relocations = []
|
relocations = []
|
||||||
|
|
||||||
# Список инструкций, которые всегда должны получать заглушки в первом проходе
|
|
||||||
ALWAYS_STUB_INSTRUCTIONS = {
|
|
||||||
"переход",
|
|
||||||
"короткий_переход",
|
|
||||||
"вызвать",
|
|
||||||
"цикл",
|
|
||||||
"переход_если_равно",
|
|
||||||
"переход_если_неравно",
|
|
||||||
"переход_если_меньше",
|
|
||||||
"переход_если_больше",
|
|
||||||
"переход_если_меньше_или_равно",
|
|
||||||
"переход_если_больше_или_равно",
|
|
||||||
"переход_если_перенос",
|
|
||||||
"переход_если_нет_переноса",
|
|
||||||
"переход_если_ноль",
|
|
||||||
"переход_если_не_ноль",
|
|
||||||
"короткий_переход_если_равно",
|
|
||||||
"короткий_переход_если_неравно",
|
|
||||||
"короткий_переход_если_меньше",
|
|
||||||
"короткий_переход_если_больше",
|
|
||||||
"короткий_переход_если_меньше_или_равно",
|
|
||||||
"короткий_переход_если_больше_или_равно",
|
|
||||||
"короткий_переход_если_перенос",
|
|
||||||
"короткий_переход_если_нет_переноса",
|
|
||||||
"короткий_переход_если_ноль",
|
|
||||||
"короткий_переход_если_не_ноль",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def reset_state():
|
def reset_state():
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue