在Assembly intel中设置文本和背景

时间:2012-06-22 03:46:39

标签: loops assembly nested-loops masm irvine32

我有一个编程分配来贯穿并设置所有可能组合的背景和文本。我正在使用一个名为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:预期不变

1 个答案:

答案 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