2016-10-27 21 views
0

私はかなり理解していないし、それに関する情報を見つけることができなかった特定のコードを発見しました。これは、レジスタを取り込み、結果をLCDに表示するマクロです。AVRプログラミング用のSubi構文の理解

渡されるレジスタの内容は、1桁の数字である必要があります。

.macro do_lcd_rdata 
    mov lcd, @0 
    subi lcd, -'0' 
    rcall lcd_data 
    rcall lcd_wait 
.endmacro 

私が混乱している部分は何ですか?subi lcd, -'0'これはこれを意味します。 SUBIは即座に減算されますが、私は '-0'が何であるかについて混乱しています。

答えて

2

-'0'は、文字 '0'のASCII値の否定です。この操作は、0x30または48をレジスタの値に効果的に追加して、数字の同等のASCII文字値に変換します。

たとえば、6 - '0 '= 6 + 48 = 54 =' 6 '