Windows XP以降のアセンブリコードをデバッグする方法

まず、インターネットで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 40Enterを
ここに画像の説明を挿入
押してmasm 使用ます。コンパイルコマンド、入力masm 40.asm3の後にキャリッジリターンを
ここに画像の説明を挿入
エラーなしでコンパイルした場合、リンク命令で実行可能ファイル.exeのリンクが
入るlink 40.obj3の後に改行を
ここに画像の説明を挿入
して、あなたがデバッグするためのデバッグ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の小さなカメのものです。興味のある人は誰でも彼のクラスを聞くことができます。だから私はここで知的財産権を侵害するべきではありません。ただそれを促進してください...

公開された78のオリジナル記事 いいね3 訪問5596

おすすめ

転載: blog.csdn.net/qq_43071318/article/details/104968805