使用寄存器和变量的程序集

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