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?

実験目的

ORGは自分の書いたプログラムがメモリ上のどこに読み込まれるかを指定する命令です。
ブートローダーであれば7c00、MSDOSのCOMファイルなら100等、余り意識せずに書いてきましたが実際どんな機械語が生成されるのか気になったため、検証してみました。

検証コード

org1000.asm
org 0x1000

start:
    mov ax, [label]
    jmp $

label:
    dw 0x1234
org2000.asm
org 0x2000

start:
    mov ax, [label]
    jmp $

label:
    dw 0x1234

逆アセンブリ結果

ORG 1000、2000それぞれをコンパイル後、逆アセンブリした結果が以下になります。
ORGに対応する機械語は存在しないようです。
ソースmov ax, [label]labelが絶対アドレスに変換されています。
ORGで指定した基準アドレスに、mov ax,[0x1005]の機械語A10510が3バイト、jmp short 0x3の機械語EBFEを合わせたアドレスがlabelの絶対アドレスとなっていることが確認できます。

ubuntu@ubuntu:~/kaihatsu/org$ nasm -f bin org1000.asm -o org1000.bin
ubuntu@ubuntu:~/kaihatsu/org$ ndisasm -b 16 org1000.bin
00000000  A10510            mov ax,[0x1005]
00000003  EBFE              jmp short 0x3
00000005  3412              xor al,0x12
ubuntu@ubuntu:~/kaihatsu/org$ nasm -f bin org2000.asm -o org2000.bin
ubuntu@ubuntu:~/kaihatsu/org$ ndisasm -b 16 org2000.bin
00000000  A10520            mov ax,[0x2005]
00000003  EBFE              jmp short 0x3
00000005  3412              xor al,0x12
ubuntu@ubuntu:~/kaihatsu/org$ 

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?