使用寄存器和变量的程序集
assembly working with registers and variables
我有这些变量:
A DB 56h
B DW -123
C DB '$'
然后我有4个操作:
add C,al
add ax,A
add B,al
add C,ax
只有第一个是正确的。谁能解释一下为什么这 3 个操作是错误的? (我知道他们错了,因为尺寸不同,但我不知道那些尺寸)
这里是在汇编中创建变量的可能方法
`DB Define Byte allocates 1 byte
DW Define Word allocates 2 bytes
DD Define Doubleword allocates 4 bytes
DQ Define Quadword allocates 8 bytes
DT Define Ten Bytes allocates 10 bytes`
寄存器是处理器内部固定的微小存储空间,处理器可以直接使用这些空间
这些是基于 x86 的程序集中可用的寄存器。
`ax => [ah + al]
bx => [bh + bl]
cx => [ch + cl]
dx => [dh + dl]`
其中ax,bx,cx,dx为16位寄存器,可以直接引用,也可以单独使用8位中的一对,可以用ah,al,bh,引用。 .etc 其中ah,bh
中的h
等代表对应16位寄存器(ax,bx,cx,dx)的"higher"
字节和[=中的l
16=]等代表低字节
要在两个变量之间进行算术运算或转移,它们应该具有相同的大小
因为 DB
的大小取决于传入的字符串。即。每个字符一个字节,在上面的例子中,变量 C 是 1 个字节,这与 al 的相同 - 这是 ax 寄存器的低字节。
要查看有关汇编中变量分配的更多信息,请尝试此 link
我有这些变量:
A DB 56h
B DW -123
C DB '$'
然后我有4个操作:
add C,al
add ax,A
add B,al
add C,ax
只有第一个是正确的。谁能解释一下为什么这 3 个操作是错误的? (我知道他们错了,因为尺寸不同,但我不知道那些尺寸)
这里是在汇编中创建变量的可能方法
`DB Define Byte allocates 1 byte
DW Define Word allocates 2 bytes
DD Define Doubleword allocates 4 bytes
DQ Define Quadword allocates 8 bytes
DT Define Ten Bytes allocates 10 bytes`
寄存器是处理器内部固定的微小存储空间,处理器可以直接使用这些空间
这些是基于 x86 的程序集中可用的寄存器。
`ax => [ah + al]
bx => [bh + bl]
cx => [ch + cl]
dx => [dh + dl]`
其中ax,bx,cx,dx为16位寄存器,可以直接引用,也可以单独使用8位中的一对,可以用ah,al,bh,引用。 .etc 其中ah,bh
中的h
等代表对应16位寄存器(ax,bx,cx,dx)的"higher"
字节和[=中的l
16=]等代表低字节
要在两个变量之间进行算术运算或转移,它们应该具有相同的大小
因为 DB
的大小取决于传入的字符串。即。每个字符一个字节,在上面的例子中,变量 C 是 1 个字节,这与 al 的相同 - 这是 ax 寄存器的低字节。
要查看有关汇编中变量分配的更多信息,请尝试此 link