Assembly Z80汇编程序/机器代码中的字节/字/地址是有符号的还是无符号的?
我正在为Z80二进制文件制作一个模拟器,但我无法确定所有的整数数据类型是有符号的还是无符号的,还是来自google。那么,寄存器Assembly Z80汇编程序/机器代码中的字节/字/地址是有符号的还是无符号的?,assembly,cpu,machine-code,z80,signedness,Assembly,Cpu,Machine Code,Z80,Signedness,我正在为Z80二进制文件制作一个模拟器,但我无法确定所有的整数数据类型是有符号的还是无符号的,还是来自google。那么,寄存器A、B…HL、BC等中的数字是否已签名 此外,在机器代码中,指令后面的字节/字/地址是有符号的还是无符号的参数 如以下示例(来源): 8080助记符Z80助记符机器代码操作 ------------- ------------ ------------ --------- MVI A、字节LD A、字节3Ebyte AAKAIK、汇编语言数据和传输指令
A
、B
…HL
、BC
等中的数字是否已签名
此外,在机器代码中,指令后面的字节/字/地址是有符号的还是无符号的参数
如以下示例(来源):
8080助记符Z80助记符机器代码操作
------------- ------------ ------------ ---------
MVI A、字节LD A、字节3Ebyte AAKAIK、汇编语言数据和传输指令不包含符号信息。数据和传输操作都只定义数据大小。符号信息是某些指令的一部分,如有符号/无符号乘法指令。因此,imul指令可以将同一寄存器作为有符号整数处理,mul指令可以将其作为无符号整数处理
寄存器可以包含其中任何一个,并且大多数操作数同时计算两个答案,因为。但是,有些指令确实需要包含有符号或无符号值的信息。它们有两种形式,一种是有符号的,另一种是无符号的。我不记得Z80有没有这些
请参阅(1.)绝对地址是无符号的,相对地址(分支)是有符号的,以便能够向后跳转
在许多机器上,有符号数和无符号数之间的唯一区别是执行大小比较的方式,以及将较短值转换为较长值的方式(请注意,许多处理器的乘法运算有效地将较短的类型转换为较长的类型,除法本质上执行幅度比较)。在执行除上述类型以外的任何类型的运算时,都会精确地处理有符号和无符号操作数(逐位)同样的方法,所以不需要区分它们。我明白了,所以add
指令将对有符号和无符号整数执行加法。至少可以说,这很烦人,因为我的模拟器是用C语言编写的,不支持只添加原始数据。我会做一些ASM互操作的事情。你确定这一点吗?我更担心对机器码比对程序集更感兴趣。那么地址是否总是被格式化为无符号的,因为有负地址似乎很荒谬?程序集只是机器码的可读翻译。每个程序集指令都与某些操作码完全匹配,反之亦然。关于地址,关键是指令是什么当然,地址总是被视为正数,但偏移量可能是负数。
8080 Mnemonic Z80 Mnemonic Machine Code Operation
------------- ------------ ------------ ---------
MVI A,byte LD A,byte 3Ebyte A <- byte
LXI B,word LD BC,word 01word BC <- word
JMP address JP address C3address PC <- address