【发布时间】:2019-10-24 19:05:07
【问题描述】:
我在使用 Assembly 的 .if、.else 等语句时遇到了一些问题。
我的代码必须反转一个数字数组,并且它必须适用于不同的数据类型。我有一个 if 语句来检查数据的类型。如果它是 BYTE 类型,它将进入第一个 if 语句,如果是 WORD,它将进入下一个,如果是 DWORD,它将进入第三个。我的问题是编译器会为不会执行的代码块抛出错误。在当前代码中,我将数组设置为字节,因此它会为最后 2 个 if 语句块引发错误。请给我一些关于如何解决这个问题的建议。
numbers BYTE 10h, 20h, 30h, 40h, 50h, 60h, 70h, 80h, 90h
L1:
.if (ebx == 1)
mov al, numbers[esi]
xchg al, numbers[edi]
mov numbers[esi], al
.elseif (ebx == 2)
mov ax, numbers[esi]
xchg ax, numbers[edi]
mov numbers[esi], ax
.else
mov eax, numbers[esi]
xchg eax, numbers[edi]
mov numbers[esi], eax
.endif
add esi, (type_of_numbers)
sub edi, (type_of_numbers)
Loop L1
【问题讨论】:
-
根据需要添加大小覆盖(
BYTE PTR numbers[esi]、WORD PTR ...、DWORD PTR ...)。 -
这是一个非常简单快捷的解决方案,效果很好。谢谢!