Assembly 获取16位字的低位和高位部分
学习SDCC编译器,其Z80部分(sdasz80)。在汇编程序的本机版本中,我使用:Assembly 获取16位字的低位和高位部分,assembly,z80,sdcc,Assembly,Z80,Sdcc,学习SDCC编译器,其Z80部分(sdasz80)。在汇编程序的本机版本中,我使用: ld (hl),LOW BUF inc hl ld (hl),HIGH BUF 将16位值BUF存储在两个8位部分(高和低)。我在SDCC找不到该怎么做,似乎是这样 ld (hl),#BUF & #0xff inc hl ld (hl),#BUF >> 8 & #0xff 编译时不会出错,生成的代码是正确的,但第二次加载对我来说不太合适,并且编译器不接受用于排序逻辑操作的括号
ld (hl),LOW BUF
inc hl
ld (hl),HIGH BUF
将16位值BUF
存储在两个8位部分(高和低)。我在SDCC找不到该怎么做,似乎是这样
ld (hl),#BUF & #0xff
inc hl
ld (hl),#BUF >> 8 & #0xff
编译时不会出错,生成的代码是正确的,但第二次加载对我来说不太合适,并且编译器不接受用于排序逻辑操作的括号。这是正确的,也是实现16位值除以2字节的唯一方法吗
更新。在一些ASxxx
和中发现,可能汇编程序使用了与C不同的运算符优先级。在C中,这将是BUF>>(8&0xff)
,但如果它起作用,则显然意味着(BUF>>8)&0xff
。&0xFF
是多余的,除非#BUF
实际上大于16位。IDK您为什么在链接手册中提到
和@PeterCordes:“<左括号不确定这是否适用于您拥有的汇编器,但请在HI和LO前面使用“back撇号”尝试HI(BUF)和LO(BUF)(这里的引擎不允许显示它)。撇号..“后引号”-在ascii中用0x60编码就是我所说的。
BUF .equ #0xf55e
....
ld (hl),`HI(BUF)