取消引用C与汇编程序

时间:2013-07-25 07:33:17

标签: c assembly z80

学习指针:我们可以说C中的星号运算符*类似于Z80汇编程序中的括号吗?

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

但是,Z80汇编程序中的括号使用不一致,因此并非真正有意义的操作符。例如,以下内容:

JP (HL)

表达将HL加载到程序计数器的操作的常用方法。没有什么是从内存中获取的,它只是一个直接的赋值 - 我想这会产生令人困惑的语法,因为这意味着将来可以通过程序执行来读取HL中的内容。

作为第二个例子,见:

OUT (C), A

A中的字节存储到端口BC。因此括号表示它们内部的东西将被读取或写入,但括号内的东西是缩写(技术上因为原始的8080只做了8位端口寻址所以Zilog不想混淆事物)。

答案 2 :(得分:-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