在汇编语言中使用宏制作一行时出现错误 A2149
Error A2149 while making a line using macros in assembly language
我有一个制作数字时钟的作业,它需要打印从 0 到 9 的数字,类似于七段显示器上的数字。到目前为止,我已经制作了没有宏的数字。现在,我尝试使用 one 制作水平线,但出现以下错误。
代码如下:
Include irvine32.inc
draw_row macro row_start, row_end, col_
movzx al, row_start
mov bl, col_
mov ecx, row_end
L1:
mov dl,al ;column
mov dh,bl ;row
call Gotoxy
mov edx, offset string1
call writestring
inc al
loop L1
endm
;draw_column macro _row, _col
;endm
.data
temp_col1 byte ?
temp_col2 byte ?
temp_row1 byte ?
temp_row2 byte ?
string1 byte "_" , 0
string2 byte "|" , 0
.code
main proc
mov temp_row1, 0
mov temp_row2, 5
mov temp_col1, 0
draw_row temp_row1, temp_row2 , temp_col1
call crlf
call dumpregs
;call clrscr
exit
main endp
end main ;end program`
这段代码应该打印 -----
请帮忙解决错误。
我是宏的新手。
你应该阅读 error documentation 上面写着
A byte register was specified to an instruction that cannot take it as the first operand.
这里指的是movzx al, row_start
。您不能零扩展到字节寄存器。你只想要 mov
那里。
另一个错误是相反的,您使用了 mov ecx, row_end
,其中 row_end
是一个字节,因此您确实需要一个 movzx
。
PS:其中 None 与宏有关,事实上我看不出有任何理由将其编码为宏。
我有一个制作数字时钟的作业,它需要打印从 0 到 9 的数字,类似于七段显示器上的数字。到目前为止,我已经制作了没有宏的数字。现在,我尝试使用 one 制作水平线,但出现以下错误。
代码如下:
Include irvine32.inc
draw_row macro row_start, row_end, col_
movzx al, row_start
mov bl, col_
mov ecx, row_end
L1:
mov dl,al ;column
mov dh,bl ;row
call Gotoxy
mov edx, offset string1
call writestring
inc al
loop L1
endm
;draw_column macro _row, _col
;endm
.data
temp_col1 byte ?
temp_col2 byte ?
temp_row1 byte ?
temp_row2 byte ?
string1 byte "_" , 0
string2 byte "|" , 0
.code
main proc
mov temp_row1, 0
mov temp_row2, 5
mov temp_col1, 0
draw_row temp_row1, temp_row2 , temp_col1
call crlf
call dumpregs
;call clrscr
exit
main endp
end main ;end program`
这段代码应该打印 ----- 请帮忙解决错误。 我是宏的新手。
你应该阅读 error documentation 上面写着
A byte register was specified to an instruction that cannot take it as the first operand.
这里指的是movzx al, row_start
。您不能零扩展到字节寄存器。你只想要 mov
那里。
另一个错误是相反的,您使用了 mov ecx, row_end
,其中 row_end
是一个字节,因此您确实需要一个 movzx
。
PS:其中 None 与宏有关,事实上我看不出有任何理由将其编码为宏。