You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:45:30