Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 获取16位字的低位和高位部分_Assembly_Z80_Sdcc - Fatal编程技术网

Assembly 获取16位字的低位和高位部分

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 编译时不会出错,生成的代码是正确的,但第二次加载对我来说不太合适,并且编译器不接受用于排序逻辑操作的括号

学习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
编译时不会出错,生成的代码是正确的,但第二次加载对我来说不太合适,并且编译器不接受用于排序逻辑操作的括号。这是正确的,也是实现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)