Pep/9汇编与机器语言:数据存储内存地址确定方法咨询
解决Pep/9汇编中数据地址确定问题
你完全没必要先写机器语言再转汇编,这搞反了汇编语言的设计目的——汇编器本身就是帮你自动计算内存地址的工具,不用手动计数。给你几个实用方法:
用符号标签代替硬编码地址
这是汇编的核心优势之一。定义数据时给它加个标签,比如:; 定义数据,标签MY_BYTE代表这个字节的内存地址 MY_BYTE: .BYTE 0x15 ; 后续指令直接用标签,汇编器会自动替换成实际地址 LDBA MY_BYTE, d编译时汇编器会自动计算每个标签对应的地址,根本不用你手动数。
用伪指令指定内存布局
如果你需要固定某个区域的地址,用.ORG伪指令指定起始位置,比如:.ORG 0x0020 ; 让后续的代码/数据从0x0020地址开始存放 MY_WORD: .WORD 0xABCD ; 这个数据的地址就是0x0020 NEXT_BYTE: .BYTE 0x01 ; 地址自动变成0x0022(因为.WORD占2字节)指令区默认从0x0000开始,你可以把数据区放在指令之后,或者用
.ORG单独指定。手动估算的正确姿势(别数字符!)
非要手动算的话,是按指令/数据的字节数累加,不是字符数:- 单字节指令(比如
STOP)占1字节 - 双字节指令(比如
BR LOOP)占2字节 - 三字节指令(比如
LDBA addr,d)占3字节 - 数据类型:
.BYTE占1字节,.WORD占2字节,.ASCII "hello"会占6字节(5个字符+1个终止符)
比如从0x0000开始写:
0x0000: LDBA 0x0003,d ; 占3字节,下一个地址是0x0003 0x0003: .BYTE 0x15 ; 这个数据的地址就是0x0003- 单字节指令(比如
利用汇编工具的输出
用Pep/9的汇编器(比如pep9asm)编译代码时,会生成符号表,里面清晰列出每个标签对应的实际内存地址;调试时用pep9sim加载程序,查看内存转储也能直接看到数据的地址。
内容的提问来源于stack exchange,提问作者Aegon
相关产品推荐
相关产品推荐

