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

Assembly 使用寄存器和变量的程序集,assembly,cpu-registers,Assembly,Cpu Registers,我有以下变量: A DB 56h B DW -123 C DB '$' 然后我有4个操作: add C,al add ax,A add B,al add C,ax 只有第一个是正确的。有人能解释一下为什么这三个操作是错误的吗?(我知道它们是错误的,因为大小不同,但我不知道这些大小)这里是在汇编中创建变量的可能方法 `DB Define Byte allocates 1 byte DW Define Word allocates 2 byt

我有以下变量:

A DB 56h
B DW -123
C DB '$'
然后我有4个操作:

add C,al
add ax,A
add B,al
add C,ax

只有第一个是正确的。有人能解释一下为什么这三个操作是错误的吗?(我知道它们是错误的,因为大小不同,但我不知道这些大小)

这里是在汇编中创建变量的可能方法

 `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)的
“更高”
字节而
al、bl
等中的
l
代表较低的字节
要在两个变量之间进行算术运算或传输,它们的大小应该相同



因为
DB
的大小取决于传入的字符串。即,每个字符一个字节,在上述示例中,变量C为1字节,与al相同,al是ax寄存器的低位字节。

要查看有关汇编中变量分配的更多信息,请尝试此

汇编程序是否生成警告?是的,它生成警告。但如果我不使用任何软件就必须知道哪个操作是正确的,“我不知道大小”。您可以这样做:
DB
是1个字节,
DW
是2个字节,
al
是1个字节,
ax
是2个字节。那么,添加ax有什么问题?ax=2字节,DB-1字节;56h=2字节?汇编程序告诉您这是错误的,如果您不喜欢,您必须找到另一个汇编程序或处理器<正如我提到的,code>A只有一个字节。通常,必须对相同大小的操作数执行算术运算。