Skip to content

Latest commit

 

History

History
66 lines (48 loc) · 1.39 KB

aslkobj.md

File metadata and controls

66 lines (48 loc) · 1.39 KB

アセンブラとリンカとオブジェクトファイル

(d16,An)が意図しないディスプレースメントになる問題

a.s

.xref X
  move.l #$deadbeef,(buf+X)

  lea (buf,pc),a0
  move.l (X,a0),d0
  .dc $ff00

.bss
buf: .ds.b $10000

b.s

.offset 0
    .ds.b $8000
X:: .ds.l 1

アセンブラで警告が出ず、リンカでもエラーにならないため意図しない動作になる。

オブジェクトファイルのコマンドでワード値の出力時に-$8000~$7fffの範囲外の値をエラーにするものは次のものしかない。

  • 65 sect.b
  • 69 sect.b
  • 99 00

d16の出力を99 00を使うように変更する(スタックからポップするコマンドなので値のプッシュも必要) という手段が考えられる。

(d8,An,Ix)が意図しないディスプレースメントになる問題

a.s

.xref X
  move.l #$deadbeef,(buf+X+4)

  lea (buf,pc),a0
  moveq #4,d0
  move.l (X,a0,d0.l),d0
  .dc $ff00

.bss
buf: .ds.b $10000

b.s

.offset 0
    .ds.b $80
X:: .ds.l 2

アセンブラで警告が出ず、リンカでもエラーにならないため意図しない動作になる。

-$80~$7fの範囲外の値をエラーにするものは6b sect.bしかない。
コマンドを新設する必要がある?


goto index / プログラミング