Source code for program

from enum import Enum

from ngpasm.mnemonics.base import BaseMnemonic
from ngpasm.registers import BaseRegisterSet, get_registers


[docs] class ProgramMode(Enum): """Program modes with corresponding bit sizes.""" BIT_16 = "16" BIT_32 = "32" BIT_64 = "64" @property def bit_size(self) -> int: """Get bit size as integer.""" return int(self.value)
[docs] class ASMProgram: """ Assembler program class. This class represents an assembly program with its mnemonics, registers, and generation capabilities. """
[docs] def __init__(self, filename: str, mode: ProgramMode) -> None: """ Initialize an assembly program. Args: filename: Name of the output file mode: Program mode (16/32/64 bit) """ self.filename = filename self.mode = mode self._mnemonics: list[BaseMnemonic] = [] self._indent_level: int = 0 self._registers = get_registers(mode.value)
@property def registers(self) -> BaseRegisterSet | None: """Get assembly registers for current mode.""" return self._registers @property def mnemonics(self) -> list[BaseMnemonic]: """Get list of mnemonics in the program.""" return self._mnemonics.copy() # Return copy to prevent external modification
[docs] def add_mnemonic(self, mnemonic: BaseMnemonic) -> None: """ Add a mnemonic to the program. Args: mnemonic: The mnemonic to add Raises: TypeError: If mnemonic is not a BaseMnemonic instance """ if not isinstance(mnemonic, BaseMnemonic): raise TypeError(f"Expected BaseMnemonic, got {type(mnemonic).__name__}") self._mnemonics.append(mnemonic)
[docs] def set_indent_level(self, level: int) -> None: """Set indentation level for program generation.""" self._indent_level = max(0, level)
[docs] def generate(self) -> str: """ Generate the assembly program. Returns: Formatted assembly program as string """ indent = " " * self._indent_level program_lines = [mnemonic.construct(indent) for mnemonic in self._mnemonics] return "\n".join(program_lines)
[docs] def clear(self) -> None: """Clear all mnemonics from the program.""" self._mnemonics.clear()