私は次のコードを書きました:
.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
問題は、真ん中に正しい文がある変な文字が表示されることです。正確には何が問題なのですか?
私は次のコードを書きました:
.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
問題は、真ん中に正しい文がある変な文字が表示されることです。正確には何が問題なのですか?
; 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がすべてを処理します.
その上、私たちの何人かはそれが楽しいと思うほどクレイジーです!