学习指针:我们可以说C中的星号运算符*类似于Z80汇编程序中的括号吗?
换句话说,这两句话是否有相似的含义:
LOAD (HL),a; VS *HL=a;
答案 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