以下のコードフラグメントが各レジスタに何をロードするかを理解するのに問題があります。コードが実行された後、各レジスタは何を保存しますか?
ldi r20, low(-1)
ldi r21, high(-1)
ldi r17, low(0x600)
ldi r18, high(0x600)
編集:私のマークダウンを修正しました、それについて申し訳ありません。
以下のコードフラグメントが各レジスタに何をロードするかを理解するのに問題があります。コードが実行された後、各レジスタは何を保存しますか?
ldi r20, low(-1)
ldi r21, high(-1)
ldi r17, low(0x600)
ldi r18, high(0x600)
編集:私のマークダウンを修正しました、それについて申し訳ありません。
さて、これはAVRアセンブリであり、8ビットレジスタ(レジスタ名で判断すると、Atmega32など)を想定しているためです。
まず、AVRアセンブリでlow()とhigh()が何をするかを見てみましょう。この情報源によると、個人的な経験から、16ビットの数値でのみ機能し、上位バイトまたは下位バイトのいずれかを提供し、左側が最上位ビット(MSB)になります。
-1を16ビット数として=0b1111111111111111または0xFFFF(両方とも等しい)。負の数は2の補数を使用して計算されるため、それぞれのlow()とhigh()を取得すると次のようになります。
ldi r20, low(0b1111111111111111)
ldi r21, high(0xFFFF)
r20とr21は両方とも0b11111111の値、または10進表記で-1を保持します
その他の0x600については、簡単にするために、最初に完全な16ビットの数値として表示しましょう。0x600 == 0x0600(実際には何も追加していないため、MSBスポットに0をスローするだけです)
high(0x0600)を取ると、上位2つの数値、つまり上位バイト、つまり0x06が得られます。
low(0x0600)を取ると、下の2つの数値、つまり下位バイト、つまり0x00が得られます。