# PythonAssembly **Repository Path**: csomebro/python-assembly ## Basic Information - **Project Name**: PythonAssembly - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-04-26 - **Last Updated**: 2022-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PythonAssembly #### 环境依赖 需要python3.7及以上 #### 使用说明 在本地新建一个文件,写入8位自定义格式汇编码,一行一个汇编码,汇编码格式见后文 `python pythonAssembly.py my_asm_file target_file` 单字长指令汇编码格式 | 汇编指令 | 格式 | 例子 | 机器码 | | ---------- | ----------------------------- | ------------ | ------ | | MOV DR, SR | `MOV ${0,1,2,3}, ${0,1,2,3}` | `MOV $1, $2` | 09 | | ADD DR, SR | 同上 | | | | AND DR, SR | 同上 | | | | SUB DR, SR | 同上 | | | | RET | RET | RET | ce | | CLR DR | CLR ${0,1,2,3} | CLR $3 | ff | 双字长指令汇编码格式 | 汇编指令 | 格式 | 例子 | 机器码 | | --------------------- | --------------------------------- | ------------------------------------------------- | ------------ | | LDA DR, ADDR/DISP/X | 直接寻址:LDA ${0,1,2,3}, ADDR | `LDA $1, 0xd` | ['81', '0d'] | | | 间接寻址:LDA ${0,1,2,3}, [ADDR] | `LDA $1, [0xd]` | ['91', '0d'] | | | 变址寻址:LDA ${0,1,2,3}, SI:X | `LDA $1, SI:-0xd` (支持负数,将转换成8位二进制补码) | ['a1', 'f3'] | | | 相对寻址:LDA ${0,1,2,3}, PC:DISP | `LDA $1, PC:0xd` | ['b1', '0d'] | | STA ADDR/DISP/X, DR | 同上 | `STA PC:-0b10, $2` | ['b6', 'fe'] | | JMP ADDR/DISP/X/Label | 直接寻址:JMP ADDR | `JMP 0x3f` | ['88', '3f'] | | | 间接寻址:JMP [ADDR] | `JMP [0x3f]` | ['98', '3f'] | | | 变址寻址:JMP SI:X | `JMP SI:0x3f` | ['a8', '3f'] | | | 相对寻址:JMP PC:DISP | `JMP PC:0x3f` | ['b8', '3f'] | | | 标签:JMP Label | `JMP myfunc` | | | JZC | 同上 | `JZC SI:0x40` | ['ac', '40'] | | CALL Label | CALL label | `CALL my_func` | | | | | | | 其他标记格式 ```asm MOV $2, $3 LDA $2, 0x3f CALL myfunc MOV $0, $2 myfunc: MOV $3, $2 RET DATA 0x30:[33 4e 23 8f 00 11] # 这个是注释 ``` `DATA ADDR:[data...]` ADDR可以用二/八/十/十六进制表示,data...是由多个十六进制数组成,中间用一个空格隔开 `label:`label标签可以由大小写字母数字组成,可以与CALL组合使用 `#`行注释和行内注释都用#号,目前没有块注释符号,实现块注释可以在每一行前加# 其他默认约定,使用`JMP/JZC Label`的形式默认是直接寻址,会自动生成地址,RET和CALL的指令字1低2位为`10` TODO 目前还没加上中止汇编语句 #### 其他说明 如有勘误请在issue添加。