コンパイラやアセンブリ言語について学んできたので、演習として自分のアセンブラを書いてみたいと思います。しかし、いくつか質問があります。
@DATA や OFFSET/ADDR VarA などのセグメントのアドレスを計算するにはどうすればよいですか?
例として、簡単なアセンブリ プログラムを取り上げます。
.model small
.stack 1024
.data
msg db 128 dup('A')
.code
start:
mov ax,@data
mov ax,ds
mov dx, offset msg
; DS:DX points at msg
mov ah,4ch
int 21h ; exit program without using msg
end
では、アセンブラはセグメントのセグメント アドレスをどのように計算するの@data
でしょうか。
そして、何を即時に入れるべきかをどのように知るのmov dx, offset msg
でしょうか?