3

学习指点:C 中的星号运算符 * 可以说类似于 Z80 汇编器中的括号吗?

换句话说,这两个句子是否具有相似的含义:

  LOAD (HL),a;       VS         *HL=a;
4

3 回答 3

2

我建议你不要做出这样的假设,因为它们并不总是正确的。虽然你说的在某些情况下可能是真的,但这不能一概而论,所以我认为它是不正确的。这是因为 C 是一种比汇编更高级别的语言,因此具有一些汇编所没有的抽象。如果指针指向的数据不能放入一个寄存器会发生什么?当指针指向结构或联合时会发生什么?

我建议您使用编译器检查为不同指针类型生成的程序集并自己查看。

于 2013-07-25T07:55:24.960 回答
0

指针是内存地址。在 C 中,当您取消引用指针时,您从指针中存储的地址获取或存储引用类型的项目。在 C 中,当您执行时,您LD (HL), A从存储在HL. 所以在这方面,这两件事是密切相关的。

然而,括号在 Z80 汇编器中的使用不一致,因此不是真正意义上的运算符。例如,以下内容:

JP (HL)

是表示加载HL到程序计数器的操作的常用方式。没有从内存中获取任何内容,它只是一个直接赋值——我猜会出现令人困惑的语法,因为这意味着未来将通过程序执行来读取 HL 中的内容。

作为第二个示例,请参见:

OUT (C), A

将字节存储A到端口BC中。所以括号的作用是表示它们里面的东西将被读取或写入,但括号里面的东西是一个缩写(技术上因为最初的 8080 只做了 8 位端口寻址,所以 Zilog 不想混淆事情)。

于 2013-07-25T17:09:38.130 回答
-1

当然。另一个例子(在实际程序中应该有类型转换!):

LD DE,HL     --      DE=HL
LD DE,(HL)   --      DE=*HL (add typecast: DE=(int *)*HL
LD DE,((HL)) --      DE=**HL (add typecasts: DE=(int *)**(int **)HL
于 2013-07-25T07:40:51.800 回答