我有一个编程分配来贯穿并设置所有可能组合的背景和文本。我正在使用一个名为SetTextColor的预定义函数,它基本上设置了这样的值:
mov eax, white + (blue * 16)
基本上,这会将文本设置为白色,背景设置为蓝色(将背景设置为16乘以)。基本上,该组合是16×16 = 256
TITLE BACKGROUND COLORS (main.asm)
; Description: T
; Author: Chad Peppers
; Revision date: June 21, 2012
INCLUDE Irvine32.inc
.data
COUNT = 16
COUNT2 = 16
LCOUNT DWORD ?
val1 DWORD 0
val2 DWORD 0
.code
main PROC
mov ecx, COUNT
L1:
mov LCOUNT, ecx
mov ecx, COUNT2
L2:
mov eax, val1 + (val2 * 16)
call SetTextColor
inc val2
Loop L2
mov ecx, LCOUNT
Loop L1
call DumpRegs
exit
main ENDP
END main
基本上我在做一个嵌套循环。我的想法是,我只是做一个1 *(1 * 16)然后在嵌套循环中填入值,直到1 *(16 * 16)。我收到以下错误
我收到错误A2026:预期不变
答案 0 :(得分:3)
我想你得到的错误就在这一行:
mov eax, val1 + (val2 * 16)
你不能那样做。如果你打算将val2乘以16然后将val1加到结果中,那么你需要逐步实现它(你可能会遇到以+ b * c形式的寻址,但a和c需要是寄存器和b只能是2,4或8,而不是16)。尝试用以下内容替换此行:
mov eax, val2
imul eax, 16
add aex, val1