如何在gpasm中从标签获取地址的高16位以上部分?
解决gpasm中提取标签地址高16位以上字节的问题
你的问题出在gpasm默认会将PIC18的标签地址在表达式中截断为16位,导致手动移位操作无法正确获取高位字节。改用gpasm内置的地址提取宏就能优雅解决这个问题:
修正后的代码
LIST P=PIC18F46Q10 ;LIST P=PIC18F47J13 ORG 0 MOVLW LOW(TEST_LOCATION) ; 提取地址最低8位(0x68) MOVWF 0x500, A MOVLW HIGH(TEST_LOCATION) ; 提取地址中间8位(0x24) MOVWF 0x501, A MOVLW UPPER(TEST_LOCATION) ; 提取地址最高8位(0x01) MOVWF 0x502, A JUST_LOOP BRA JUST_LOOP ORG 0x12468 TEST_LOCATION DB 0xDE, 0xAD, 0xBE, 0xEF END
原理说明
gpasm针对PIC系列MCU的地址结构,内置了三个专门提取地址字节的宏:
LOW(expr):获取表达式结果的最低8位(对应地址的bits 0-7)HIGH(expr):获取表达式结果的中间8位(对应地址的bits 8-15)UPPER(expr):获取表达式结果的最高8位(对应地址的bits 16-23)
这些宏会自动处理超过16位的地址值,不会出现截断问题,比手动移位更可靠。
内容的提问来源于stack exchange,提问作者MikeCAT
相关产品推荐
相关产品推荐

