4

私は次のコードを書きました:

 .386
 .model small
 .stack 100h

 .data
    text db "Paper",0
 .code
  start :

  lea dx , text
  mov ah , 9h
  int 21h

  mov ah , 4ch
  int 21h

  end start

  end

問題は、真ん中に正しい文がある変な文字が表示されることです。正確には何が問題なのですか?

4

1 に答える 1

3
; your code
start:
mov ax, @data
mov ds, ax
;your code

それがあなたの問題を解決すると思います。Dos は、.com ファイルをロードするときにcs= ds=を設定しますes。もちろん、.exe形式のロードcsがコードを指している場合はそうではありませんが、ds(およびes?)PSP(プログラムセグメントプレフィックス)を指しています。これは通常、データが存在する場所ではありません...設定する必要がありますds(そしてes、あなたがそれを使うつもりなら)あなた自身。

「なぜ 16 ビット アセンブリを学習するのですか?」良い質問です。「なぜ組み立てを学ぶのですか?」別の良い質問です。それを使って「深刻な」ことを書くことは決してないでしょう。しかし、HLL ではできない方法で「ボンネットの下」で何が起こっているかを知ることができ、16 ビットではセグメント化されたメモリ モデルを理解することができます。32ビットコードもセグメント化されていますが、セグメントは「異なる」ものの、通常は同じメモリを指しており、通常は無視できます.OSがすべてを処理します.

その上、私たちの何人かはそれが楽しいと思うほどクレイジーです!

于 2013-06-18T01:09:43.600 に答える