汇编实战四


前言

汇编实战四
这样是会报错的
错误是invalid instruction operands
改成MOV AX,X
还是会报一样的错误

汇编实战四
汇编实战四
汇编实战四

这样就挺对的,结果也挺好的
注意咱们这个程序模板后面,是:
MOV AH,4CH
咱们也知道这个就是固定的,是格式
但是这个格式会使得AX的高两位,也就是AH的值是4CH
我一开始写的是MOV AH, X+3
但是怎么试,在debug里看到的结果都是AX=4C11
我还奇怪呢,其实就是最后两句固定格式又把AH的值给改了

还有一个需要注意的地方,就是
MOV AH, X和MOV AH, [X]是一样的,因为X本来就是地址。

这个博客写了两个32位的数相加

汇编实战四
所以你再看一下这个为什么不对
问题根本不在加不加[ ]
问题在于你这个X,他是个双字型数据,或者说双字型数据的地址。(这个不重要了,关键不在于它到底代表数据还是地址了,你就当他指向一个内存单元。)
根据这里说的

MOV AX, X 的具体意义要看 X 的类型。如果它是定义的数据变量,那么就是和 mov ax, word ptr x 功能一样;只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。
如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,与mov ax, word ptr x 完全不是一样意思。

关键看第一段,

只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。

所以我们要说明word ptr x

我们之前一直说
X DB 40 DUP (‘A’)
是定义了一段内存区域,首地址是X
这个是非常确定的,是我们一直在说的。

标号有两个属性,段基地址、偏移地址
变量有三个属性,段基地址、偏移地址和数据类型
这里的标号说的是next:这种标号
变量指的就是X DB 40 DUP (‘A’)中的X这种标号
也就是说X,这个变量,他有这么多属性,它知道自己的地址,而且非常详细,并且它也知道自己的数据类型。
因此
X DD 0000H
MOV AX, X
这样是不行的!
X本身有数据类型的属性,这与AX是不匹配的。

你还可以感受到
X DB 11H
MOV AL, X

MOV AL, [X]
是一样的
并且和
MOV AL, [BX]
也很类似
[BX]是把BX里的数当成地址
X本身就是个地址
因为X是变量,变量有地址属性

相关文章:

  • 2022-12-23
  • 2021-06-11
  • 2022-01-11
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2021-07-17
  • 2021-06-17
猜你喜欢
  • 2021-10-11
  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
  • 2021-06-12
  • 2021-04-13
相关资源
相似解决方案