2016-12-04 3 views
-2

私はデジタル時計を作成することが割り当てられており、7セグメント表示の場合と同様の0から9までの印刷番号が必要です。今まで私はマクロなしで数字を作りました。今私は1つを使用して水平線をしようとしていると、私は次のエラーが表示されます。アセンブリ言語でマクロを使用してラインを作成中のエラーA2149

enter image description here

コードは次のとおりです。

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` 

このコードは----- エラーを手伝ってくださいを印刷する必要があります。 私はマクロが初めてです。

答えて

1

あなたは

バイトレジスタが最初のオペランドとしてそれを取ることができない命令に指定されていたと言うerror documentationお読みください。

これはmovzx al, row_startを指します。バイトレジスタにゼロを拡張することはできません。そこにはmovがほしいだけです。

他のエラーは逆です。ここで、row_endは1バイトなので、movzxが必要です。

PS:これらはマクロに関係しません。実際、これをマクロとしてコードする理由はありません。

+0

マクロを使用することになっています。私はそれらなしで大丈夫だった。 ありがとうございます。できます。 –

関連する問題