在我看来,这是一个非常愚蠢的问题,但我找不到答案。
有没有其他方法可以将数据变量内容传递给另一个变量,而不是使用推送/弹出,或者首先将其移动到寄存器?
我的意思是这样的:
.data
txt dd 1
txt1 dd 2
.code 
start:
mov txt1, txt
;or - mov [txt1], txt
ret
end start
在 8086 系列中,最简单的方法是使用中间寄存器:
   mov   eax, txt
   mov   txt1, eax
许多非英特尔 CISC 架构提供直接内存到内存移动指令。RISC 架构很少这样做。
如果不止这些,使用字符串移动指令可能更简单,它需要设置 ESI 和 EDI 寄存器、DF 标志,如果你想使用rep前缀,ECX 寄存器:
 lea  edi, dest   ; or mov edi, offset dest.  Shorter encoding.  Only use LEA for 64bit RIP-relative addressing.
 lea  esi, src
 cld
 movsd       ; moves 32-bit value [ESI] to [EDI] and increments both pointers
 movsd       ; moves another
显然,一两个词不值得,但是如果您有人为的约束(没有中间寄存器,没有推送/弹出),那么这可能满足条件。
如果你的函数可以假设它的调用者都严格遵循标准调用约定,你可以假设在函数进入时方向标志已经被清除。引导加载程序代码应该尽可能少地假设初始状态,因为不同的 BIOS 会以不同的状态跳转到它。