from .utils import * # common preamble to add, sub, and, or BINARY_COMMON_ASM = """@SP AM=M-1 D=M A=A-1 """ # common preamble to neg and not UNARY_COMMON_ASM = """@SP A=M-1 """ ARITH_LOGIC_ASM = { "add": BINARY_COMMON_ASM + "M=D+M\n", "sub": BINARY_COMMON_ASM + "M=M-D\n", "and": BINARY_COMMON_ASM + "M=D&M\n", "or": BINARY_COMMON_ASM + "M=D|M\n", "neg": UNARY_COMMON_ASM + "M=-M\n", "not": UNARY_COMMON_ASM + "M=!M\n", } def translate_arith_logic(command, verbose=False): asm = f"// {command}\n" if verbose else "" asm += ARITH_LOGIC_ASM[command] return asm