【问题标题】:assembly error: "instruction operands must be the same size"汇编错误:“指令操作数必须相同大小”
【发布时间】:2012-04-22 23:46:28
【问题描述】:

我对此很陌生,我正在尝试将值从一个数组移动到另一个数组, 它应该是:

vec1 = 1, 2, 3, 4, 5
vec2 = 5, 4, 3, 2, 1

但我得到一个错误:“指令操作数必须是相同的大小”

TITLE program

     .386
     .model flat
     extern _ExitProcess@4:Near
     .data

     vec1 WORD 1, 2, 3, 4, 5; original array
     vec2 WORD 5 DUP(?)
     .code                 
_main:

    mov ebx, 0
    mov ecx, lengthof vec1
    DO:
    mov eax, vec1[ebx]
    mov vec2[ecx], eax
    inc ebx
    loop DO

    push    0                       
    call    _ExitProcess@4          

    end   _main       

请帮忙。

【问题讨论】:

标签: assembly x86 mov


【解决方案1】:

我首先要看的是 WORD 是 16 位宽,eax 是 32 位宽。因此,当您将某些内容加载到 eax(没有明确的大小说明符)中时,您将获得 32 位而不是 16 位。

此外,我不相信您的 ecx 值会是您所期望的 - 您应该检查一下,记住它需要从 n-1 向下迭代到 0 包括在内。按照你的方式,它从n 变为1

【讨论】:

  • 谢谢,这是错误。我仍然有一些价值错误,但正如你所说,这是我的作业:) 谢谢。
  • +1。为家庭作业问题证明足够的信息非常好。 :)
  • 这可能是一个家庭作业问题,但它可能对其他汇编语言程序员有用。
  • 好点,@Anderson,因为这个问题被问到已经 很多 个月了。据推测,如果是家庭作业,学生现在要么通过,要么不及格。所以我会让答案变得不那么晦涩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多