1

我有一个编程任务要运行并设置所有可能组合的背景和文本。我正在使用一个名为 SetTextColor 的预定义函数,它基本上设置如下值:

mov eax, white + (blue * 16)

本质上,这会将文本设置为白色,背景设置为蓝色(设置您乘以 16 的背景)。基本上组合是 16 X 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:预期不变

4

1 回答 1

3

我想你得到的错误是在这一行:

mov eax, val1 + (val2 * 16)

你就是不能那样做。如果你打算将 val2 乘以 16 然后将 val1 添加到结果中,那么你需要逐步实现它(你可能会遇到 a+b*c 形式的寻址,但 a 和 c 需要是寄存器和 b只能是 2、4 或 8,不能是 16)。尝试用这样的东西替换这一行:

mov eax, val2
imul eax, 16
add aex, val1
于 2012-06-22T11:05:14.610 回答