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

时间:2015-11-27 20:11:01

标签: assembly cpu-registers

我有这些变量:

A DB 56h
B DW -123
C DB '$'

然后我有4个操作:

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

只有第一个是正确的。任何人都可以解释为什么这3个操作是错误的? (我知道他们错了,因为尺寸不同,但我不知道那些尺寸)

1 个答案:

答案 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