关于装配中的mov

COM*_*Mer 2 assembly

将寄存器bx的内容移入寄存器ax

MOV ax, bx
Run Code Online (Sandbox Code Playgroud)

为什么语法如此奇怪?

Mov ax,(to)bx实际上是指to的move内容,是否有任何历史原因以这种方式定义它?bxax

lox*_*xxy 10

考虑一下代码

x = 5
Run Code Online (Sandbox Code Playgroud)

这可能将值5分配给x.你想要5 = x吗?

同样,您不应该尝试将英语与编码进行比较.这在历史上也发生了什么.英语可能会说这就是这个.但计算机架构师就是这样的.

所以基本上是这样的过程:

X := Y
Run Code Online (Sandbox Code Playgroud)

可以更好地概括为:

MOV X, Y
Run Code Online (Sandbox Code Playgroud)

  • 我一直觉得使用*赋值*的等号可能会让新手感到困惑.在代数中,表达式"x = x - 5"意味着你的方程是不可解的,但它意味着C中完全不同的东西:) (2认同)

Ale*_*x F 7

MOV ax, bx

这意味着,ax = bx(将bx移动到ax,更准确地说,将bx复制到ax).在此汇编语法中,第一个操作数是目标 - 这是常见的情况,例如,在C函数中:

strcpy(dest, source);

在AT&T Assembler中,第一个操作数是源.一般来说,它看起来很奇怪,因此AT&T Assembler用户会犯下有趣的错误.