まず、インターネットでDOS-BOXプログラムをダウンロードする必要があります。
ダウンロードリンク:DOS-BOX。
次に、デバッグ
ダウンロードリンクをダウンロードする必要があります:デバッグ
抽出コード:bx0s。
次に、アセンブリコードを作成するためのIDE
ダウンロードリンクとしてノードパッド++をダウンロードする必要があります:ノードパッド++
ダウンロードが完了したら、アセンブラを配置するための新しいフォルダを作成する必要があります。フォルダのオープンパス全体に中国語が含まれていてはいけません。DまたはEドライブの下にASMという名前の新しいフォルダを作成し、
次にDOSBOXフォルダーに入れ、
すべてのファイルをWindowsデバッグフォルダーに入れます(Windowsデバッグフォルダーで最も重要なのは、これら3つのプログラムです:debug.exe、masm.exe、link.exe)
次に、次を入力します。 DOSBoxフォルダー
黄色のexeファイルをクリックすると、このインターフェイスが表示されます。
次に、操作を実行する前に、マウント操作を実行する必要があります。つまり、小さな画面でmount e e:\asm
最初のe指を入力します。それは、操作したい仮想ディスクに依存し、気分に応じて、26文字で十分です。E:\ ASMは、デバッグプログラムを格納する場所を指します。デバッグプログラムを別の場所に配置する場合(パスに中国語を含めることはできません)、対応するアクションを実行する必要があります。
mount e e:\asm
この文は、options.batファイルにも配置できるため、DOSBoxを開くたびに書き直す必要はありません。
次に、DOSBox.exeを入力してテストします。最初にe:Enterと入力し、次にdebug Enterと入力してから、rコマンドを入力してレジスタの現在の場所を表示します
。rコマンドは、レジスタの現在のステータスを表示するために使用します。このコンソールでは、 aコマンドを使用して、アセンブリの命令を1つずつ入力することもでき
ます。コンソールで短いアセンブリプログラムをデバッグしても問題はありません。長いアセンブリコードをデバッグする必要がある場合は、まずプログラムコードを記述してから、コンパイル、実行、デバッグすることをお勧めします。
ここでは、nodepad ++を使用します。まず、現在のASMフォルダーに、作成するアセンブリプログラム用の新しいフォルダーを作成します。フォルダーには中国語の名前を付けないでください。たとえば、新しいフォルダ「40」を作成します。
もちろん、自分でファイルを管理する場合は、意味のある英語の単語や略語でファイル名を付けることをお勧めします。。。悲しいかな、私は英語を上手に学んでおらず、プログラミングには2つの涙があります。。。
このフォルダーを開き、「40.asm」という名前の新しいファイルを作成します
(コンピューターをより早く使用したい場合は、ファイル拡張子を確認する必要があります!)
右クリックして、ノードパッド++で開きます
。デバッグフォルダー内のファイルはこのフォルダーに配置されます。
次にDOSBox.exeを開き、e:Enter(マウントしたドライブ文字)を入力し、次にcdコマンドを使用してこのフォルダーに入り、cd 40
Enterを
押してmasm を使用します。コンパイルコマンド、入力masm 40.asm
3の後にキャリッジリターンを
エラーなしでコンパイルした場合、リンク命令で実行可能ファイル.exeのリンクが
入るlink 40.obj
3の後に改行を
して、あなたがデバッグするためのデバッグ40.exeを入力することができ
、デバッグモードで私の最も一般的に使用されますいくつかの命令があります。-rは現在のレジスタステータスを表示します。これは上記の
-tシングルステップ実行です。
-dレジスタの内部データを表示する物理アドレス
と-p命令、ループが発生すると、ループ全体の実行後の結果を表示できます。 、-Q exitコマンド
もちろん、デバッグに加えて、プログラム名を直接入力することもできます。たとえば、実行可能ファイルが生成されてプログラムを実行した後、通常はその瞬間に戻ります。フロントフォルダーは、プログラムが正常に実行され、正常に終了することを示しています。
ここに添付されているプログラムがあります。関数は、指定された場所に指定された色で文字列を表示します
;在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
;(cl)=颜色,ds:si指向字符串的首地址
;应用举例:在屏幕的8行3列,用绿色显示data段中的字符串
assume cs:code, ds:data
data segment
db 'Welcome to masm!', 0
data ends
code segment
start:
mov dh, 8 ;(dh)=行号(取值范围0~24)
mov dl, 3 ;(dl)=列号(取值范围0~79)
mov cl, 2 ;(cl)=颜色
mov ax, data
mov ds, ax
mov si, 0
call show_str
mov ax, 4c00H
int 21H
show_str:
push cx
push si
mov al, 0A0H ;每行有80*2==160个字节==0A0H个字节
dec dh ;行号在显存中从0开始,所以减1
mul dh ;相当于从第(n-1)*0A0H个Byte单元开始
mov bx, ax ;定位好的位置偏移地址存放在bx里(行)
mov al, 2 ;每个字符占两个字节
mul dl ;定位列,结果ax存放的是定位好的列的位置
sub ax, 2 ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2
add bx, ax ;此时bx中存放的是行与列号的偏移地址
mov ax, 0B800H ;显存开始的地址
mov es, ax ;es中存放的是显存的第0页(共0--7页)的起始的段地址
mov di, 0 ;di指向显存的偏移地址,确定指向下一个要处理的字符的位置
mov al, cl ;cl是存放颜色的参数,这时候al存放颜色了
mov ch, 0 ;下边cx存放的是每次准备处理的字符
s: mov cl, ds:[si] ;ds:[si]指向“Welcome to masm", 0
jcxz ok ;当cl的值为0的时候,cx == 0,则发生跳转,到ok处结束处理
mov es:[bx+di], cl ;偶地址存放字符
mov es:[bx+di+1], al ;奇地址存放字符的颜色属性
inc si ;指向下个字符
add di, 2 ;指向下个字符
jmp short s ;无条件跳转,jcxz是离开的关键跳转
ok: pop si
pop cx
ret ;显示字符串的子程序【定义结束】
code ends
end start
プログラムの実行結果は次のとおりです:
添付:この記事で使用されている2つのサンプルプログラムは、ステーションbの小さなカメのものです。興味のある人は誰でも彼のクラスを聞くことができます。だから私はここで知的財産権を侵害するべきではありません。。。ただそれを促進してください...