指令操作数必须具有相同大小的错误 [英] Instruction operands must be of the same size error

查看:0
本文介绍了指令操作数必须具有相同大小的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在数据段中定义了数组,如-myArray byte 01, 03, 02, 05
在代码中,我有一行mov eax, BYTE PTR myArray[ecx]汇编器在这里抛出一个构建错误
指令操作数的大小必须相同
这可能是什么原因呢?我该怎么解决这件事。我想循环遍历此数组并打印它的
元素

TITLE Subtract Two Nums (SubTwoNums.asm)
; This program collects two numbers and subtracts the second from the first
INCLUDE Irvine32.inc
.data
prompt BYTE "Please enter a number: ", 0
data byte 0A9h
fib  dword 01030205h
msg byte ", " , 0
dwordzeros DWORD 000000h
myArray dword  01,  03,  02,  05

.code

main PROC

mov eax, 0
mov ecx, 0

loop_start:
  cmp ecx, 3
  jge loop_end
  mov eax, myArray[ecx]
  call WriteDec
  mov edx, offset  msg
  call WriteString
  add ecx, 1
  jmp loop_start
loop_end:
exit

主ENDP 结束主干

推荐答案

eax为32位,来自BYTE PTR myArray[ecx]的值为8位。根据您要实现的目标,有几种可能的解决方案。其中包括

您可以将字节值移到临时32位寄存器中:

movzx ebx,BYTE PTR myArray[ecx]
add eax,ebx

您可以将总和累加为8位值:

add al,BYTE PTR myArray[ecx]

您可以将myArray的类型从byte更改为dword

这篇关于指令操作数必须具有相同大小的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆