私はアセンブリに非常に慣れていないため、古い 16 ビット dos ゲームの逆アセンブリ (IDA Free によって生成された逆アセンブリ) を理解することによって学習しようとしています。
そのコードで読んだことが2つありますが、それが何をしているのか推測できます。それにもかかわらず、私が正しいかどうかはよくわからないので、確認したかったのです(ところで、ここのコード例を短縮しただけです):
1)
lds di, some_adress ; (eg: ds = 0012h, di=BAF6h afterwards)
xor cx, cx
mov [di], cx ; <- what segment is used here
ds
オフセットを適用して物理アドレスを計算するために、魔法のデフォルトセグメントとして使用していると思います。
2)
assume ds:dseg (e.g. 0012h)
mov ax, 0BAF6h ; <- why is the leading 0 here btw
push ds
push ax
だから私のスタックは次のようになっています:
... ...
02 ds (0012)
00 ax (BAF6) <- sp
それから:
mox bx, sp
les di, ss:[bx]
レジスタはes
=0012h
とdi
=BAF6h
になっていると思いますが、残りのゲーム コードを見ると理にかなっていますが、私のスタックは のように見えるのでBAF6 0012 ...
、これは最初の単語が に入れられdi
、2 番目の単語が に入れられることを意味しes
ます。(私の観点からすると) 2 つの単語の順序が逆になっているので、これは少し混乱します。