0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アセンブラをhexにした結果がおかしくなる

Last updated at Posted at 2025-10-20

はじめに

タイトルの通りです。現在も解決していません。
解決しました..!
不思議だと思ったのでメモ。

コンパイラは記載しないでおきます。

手順

hexに変換する部分でおかしくなっていました。
アセンブラ→.outファイルに変換→outファイルをinputにhexに変換

.outファイルに変換した際、一緒に生成しているlstファイルは問題なかったため、hexに変換する処理でおかしくなっていると想像..

問題のアセンブラコード

以下のアセンブラをコンパイルします。

mov 0x200, r10
jr  0x245e

hexファイルを逆アセンブルすると以下の結果に...
jr 0x245eと変換されることを期待しましたが、jr 0x2462に...

movea 0x0200,r0,r10
jr    0x2462

hexファイルを見ると以下の結果。
6番地のデータがおかしいです。
jr 0x245eの0x245eが書かれています。
相対アドレスとして計算されていません。0x245aが正しいです。

0x00000000:  .dhw    0x5620
0x00000002:  .dhw    0x0200
0x00000004:  .dhw    0x0780
0x00000006:  .dhw    0x245e

以下の命令だけでは問題ありません。
なんで..

jr  0x245e

原因

jr 即値だと、命令コードに即値が埋め込まれる仕様になっていました。
jrにラベルを指定することで問題は解決しました。

.section ~ > 0x0
    mov 0x200, r10
    jr  XXX
    
.section ~ > 0x245e
XXX:
    nop

まとめ

確認できることは色々あると思うのですが、放置しております..
いつか解決...したい...

解決しました!よかった!
↓で問題ないのは、たまたまですね。解析力が足りず迷走しました。

jr  0x245e

いつもはラベルを指定していたため、気づきませんでした..
今後は気を付けます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?