我有这些变量:
A DB 56h
B DW -123
C DB '$'
然后我有4个操作:
add C,al
add ax,A
add B,al
add C,ax
只有第一个是正确的。任何人都可以解释为什么这3个操作是错误的? (我知道他们错了,因为尺寸不同,但我不知道那些尺寸)
答案 0 :(得分:0)
这里是在程序集中创建变量的可能方法
`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,..等引用h
等中的ah,bh
代表相应16位寄存器(ax,bx,cx,dx)的"higher"
字节和l
中的al,bl
等等代表低位字节
要在两个变量之间进行算术运算或转移,它们应该具有相同的大小
因为DB
的大小取决于传入的字符串。每个字符一个字节,在上面的例子中,变量C是1字节,与al的相同 - 这是ax寄存器的低字节。
要查看有关汇编中变量分配的更多信息,请尝试使用此link