これは、アセンブリ (「省略形」と呼ばれるもの) とマシン コードの間の対応を示す例です。まず、いくつかのパラメーターが抽象化された、アルゴリズムのアセンブリ コードを次に示します。
* = 4000 ; This is the address where our program will be stored
LDX #len
loop LDA src,X
STA dest,X
DEX
BNE loop
もちろん、それを直接機械語に変換することはできません。len
、src
およびの値も入力する必要がありますdest
。
src = $1234
dest = $5678
len = 10
名前について理解しておくべきことは、に value が割り当てられるのloop
と同じように、その後に命令のアドレスが割り当てられるということです。したがって、この場合、は 2 バイトを占めるため (後で説明します)、に設定されます。これはアセンブラーによって自動的に行われますが、もちろん、これらすべてを紙の上で行うこともできます。src
$1234
loop
LDX #len
loop
$4000 + 2 = $4002
では、上記のアセンブリ プログラムの 6502 マシン コードは何でしょうか?
A2 0A
BD 34 12
9D 78 56
CA
D0 F7
どうすればこれを知ることができますか? 上記のプログラムをオンラインの 6502 アセンブラー ( http://www.masswerk.at/6502/assemblyr.html ) に貼り付けただけです。アセンブリとマシン コード間の詳細なマッピングも表示されます。
4000 LDX #LEN A2 0A
4002 LOOP LDA SRC,X BD 34 12
4005 STA DEST,X 9D 78 56
4008 DEX CA
4009 BNE LOOP D0 F7
400B
の実際の値はLOOP
のマシンコードの計算にも使用されず、命令自体BNE LOOP
と比較した相対アドレスのみが使用されることに注意してください: は -9 であり、との差 は -9 です!BNE
F7
$400B
$4002
したがって、これを手動で行う場合は、他のすべてを機械語に変換するだけで、ジャンプに到達したら、次の命令の開始アドレスとジャンプ先のアドレスの差を計算します。後方へのジャンプでは負、前方へのジャンプでは正である必要があります。