0
、 8051アセンブリプログラミングでの命令サイズの計算方法(ADD A、Rn - > 1byte ..?)私は、アセンブリプログラミングに新たなんだ
ADD A,Rn
は1バイト命令と
ADD A,direct
は2バイト命令でした。どうして?
、 8051アセンブリプログラミングでの命令サイズの計算方法(ADD A、Rn - > 1byte ..?)私は、アセンブリプログラミングに新たなんだ
ADD A,Rn
は1バイト命令と
ADD A,direct
は2バイト命令でした。どうして?
ADD A,Rn
は、オペコード+レジスタ番号を1バイトでエンコードできるため、1バイト命令です。サイズ> 1を説明したパラメータを、(保持する
base_operand = 0x28 (only 6 bits are required)
R_register_index = 0->7 (only 3 bits are required)
instruction = base operand OR R_register_index
ADD A,R0 0x28
ADD A,R1 0x29
ADD A,R2 0x2A
ADD A,R3 0x2B
ADD A,R4 0x2C
ADD A,R5 0x2D
ADD A,R6 0x2E
ADD A,R7 0x2F
ADD A,direct
ニーズ1オペコードのためのバイトと少なくとも別のバイト:
で構成されている1バイトに保持する8つの異なるオペコードがあります。例:MOV RO,#12H
:2バイト)
命令サイズの範囲は1〜3バイトですが、命令のサイズについて絶対的なルールはありません。 (2つのパラメータを持ついくつかの命令については、メモリから読み込みます)
参照hereを確認して、すべての指示をメモリに保存してください。&
サイズを計算する信頼性の高い方法は、命令サイズテーブル(IST)を作成することです:opcode => size。
これは、デバッガが次の命令アドレスを「予測」する方法です。完全を期すために
、私はあなたにこのテーブルを提供してみましょう($A5
を保有し、命令ではありませんのでご注意:私はサイズを0に設定)
op sz
$00 => 1
$01 => 2
$02 => 3
$03 => 1
$04 => 1
$05 => 2
$06 => 1
$07 => 1
$08 => 1
$09 => 1
$0A => 1
$0B => 1
$0C => 1
$0D => 1
$0E => 1
$0F => 1
$10 => 3
$11 => 2
$12 => 3
$13 => 1
$14 => 1
$15 => 2
$16 => 1
$17 => 1
$18 => 1
$19 => 1
$1A => 1
$1B => 1
$1C => 1
$1D => 1
$1E => 1
$1F => 1
$20 => 3
$21 => 2
$22 => 1
$23 => 1
$24 => 2
$25 => 2
$26 => 1
$27 => 1
$28 => 1
$29 => 1
$2A => 1
$2B => 1
$2C => 1
$2D => 1
$2E => 1
$2F => 1
$30 => 3
$31 => 2
$32 => 1
$33 => 1
$34 => 2
$35 => 2
$36 => 1
$37 => 1
$38 => 1
$39 => 1
$3A => 1
$3B => 1
$3C => 1
$3D => 1
$3E => 1
$3F => 1
$40 => 2
$41 => 2
$42 => 2
$43 => 3
$44 => 2
$45 => 2
$46 => 1
$47 => 1
$48 => 1
$49 => 1
$4A => 1
$4B => 1
$4C => 1
$4D => 1
$4E => 1
$4F => 1
$50 => 2
$51 => 2
$52 => 2
$53 => 3
$54 => 2
$55 => 2
$56 => 1
$57 => 1
$58 => 1
$59 => 1
$5A => 1
$5B => 1
$5C => 1
$5D => 1
$5E => 1
$5F => 1
$60 => 2
$61 => 2
$62 => 2
$63 => 3
$64 => 2
$65 => 2
$66 => 1
$67 => 1
$68 => 1
$69 => 1
$6A => 1
$6B => 1
$6C => 1
$6D => 1
$6E => 1
$6F => 1
$70 => 2
$71 => 2
$72 => 2
$73 => 1
$74 => 2
$75 => 3
$76 => 2
$77 => 2
$78 => 2
$79 => 2
$7A => 2
$7B => 2
$7C => 2
$7D => 2
$7E => 2
$7F => 2
$80 => 2
$81 => 2
$82 => 2
$83 => 1
$84 => 1
$85 => 3
$86 => 2
$87 => 2
$88 => 2
$89 => 2
$8A => 2
$8B => 2
$8C => 2
$8D => 2
$8E => 2
$8F => 2
$90 => 3
$91 => 2
$92 => 2
$93 => 1
$94 => 2
$95 => 2
$96 => 1
$97 => 1
$98 => 1
$99 => 1
$9A => 1
$9B => 1
$9C => 1
$9D => 1
$9E => 1
$9F => 1
$A0 => 2
$A1 => 2
$A2 => 2
$A3 => 1
$A4 => 1
$A5 => 0
$A6 => 2
$A7 => 2
$A8 => 2
$A9 => 2
$AA => 2
$AB => 2
$AC => 2
$AD => 2
$AE => 2
$AF => 2
$B0 => 2
$B1 => 2
$B2 => 2
$B3 => 1
$B4 => 3
$B5 => 3
$B6 => 3
$B7 => 3
$B8 => 3
$B9 => 3
$BA => 3
$BB => 3
$BC => 3
$BD => 3
$BE => 3
$BF => 3
$C0 => 2
$C1 => 2
$C2 => 2
$C3 => 1
$C4 => 1
$C5 => 2
$C6 => 1
$C7 => 1
$C8 => 1
$C9 => 1
$CA => 1
$CB => 1
$CC => 1
$CD => 1
$CE => 1
$CF => 1
$D0 => 2
$D1 => 2
$D2 => 2
$D3 => 1
$D4 => 1
$D5 => 3
$D6 => 1
$D7 => 1
$D8 => 2
$D9 => 2
$DA => 2
$DB => 2
$DC => 2
$DD => 2
$DE => 2
$DF => 2
$E0 => 1
$E1 => 2
$E2 => 1
$E3 => 1
$E4 => 1
$E5 => 2
$E6 => 1
$E7 => 1
$E8 => 1
$E9 => 1
$EA => 1
$EB => 1
$EC => 1
$ED => 1
$EE => 1
$EF => 1
$F0 => 1
$F1 => 2
$F2 => 1
$F3 => 1
$F4 => 1
$F5 => 2
$F6 => 1
$F7 => 1
$F8 => 1
$F9 => 1
$FA => 1
$FB => 1
$FC => 1
$FD => 1
$FE => 1
$FF => 1
を、それは一つに、RnのをMOV Aをエンコードするにはどうすればよいですバイト...私はそれの詳細な説明を得ることができる参照を追加してくださいできますか?事前に感謝します – praneeth
MOV A、Rnエンコーディングを具体的に説明するために投稿を編集しました。答えを受け入れてくれてありがとう。 –