实验一 查看CPU和内存 Debug 用机器指令和汇编指令编程
一、 Debug的使用
1. 什么是Debug
Debug是Dos、Windows都提供的实模式(8086方式)程序调试的工具。使用它,可以查看CPU各种寄存器的内容。内存的情况和在机器码级跟踪程序运行。
2. Debug 常用功能
命令 |
功能 |
r |
查看、改变CPU寄存器的内容 |
d |
查看内存中的内容 |
e |
改写内存中的内容 |
u |
将内容中的机器指令翻译成汇编指令 |
t |
执行一条机器指令 |
a |
以汇编指令的格式在内存中写入一条机器指令 |
3. 进入Debug
支持与win7 32位以下
(1)win+R
,然后输入canmand
,进入后输入Debug
4. R命令 查看、改变CPU寄存器的内容

5. D命令 查看内存中的内容
(1)方法一:d 段地址:偏移地址

(2)方法二:d 段地址:起始偏移地址 结尾偏移地址

6. e命令 改写内存中的内容
格式:e 起始地址 数据 数据 数据 ...
比如,要将内存1000:0~1000:9 单元中的内容分别写为0、1、3、4、5、6、7、8、9
案例一:


案例二:写入字符

7. 1 e命令向内存写入机器码
机器码 对应汇编命令
b80100 mov ax,0001
b90200 mov cx,0002
01c8 add ax,cx


7.2 U命令翻译为汇编命令

7.3 t命令 执行汇编指令
(1)先修改 cs:ip=1000:0
(2)-t
执行


8. a命令 汇编形式在内存写入机器指令

<h2><a id="_Debug_0"></a>一、 Debug的使用</h2>
<h3><a id="1_Debug_1"></a>1. 什么是Debug</h3>
<p>Debug是Dos、Windows都提供的实模式(8086方式)程序调试的工具。使用它,可以查看CPU各种寄存器的内容。内存的情况和在机器码级跟踪程序运行。</p>
<h3><a id="2_Debug__3"></a>2. Debug 常用功能</h3>
<table>
<thead>
<tr>
<th>命令</th>
<th>功能</th>
</tr>
</thead>
<tbody>
<tr>
<td>r</td>
<td>查看、改变CPU寄存器的内容</td>
</tr>
<tr>
<td>d</td>
<td>查看内存中的内容</td>
</tr>
<tr>
<td>e</td>
<td>改写内存中的内容</td>
</tr>
<tr>
<td>u</td>
<td>将内容中的机器指令翻译成汇编指令</td>
</tr>
<tr>
<td>t</td>
<td>执行一条机器指令</td>
</tr>
<tr>
<td>a</td>
<td>以汇编指令的格式在内存中写入一条机器指令</td>
</tr>
</tbody>
</table>
<h3><a id="3_Debug_14"></a>3. 进入Debug</h3>
<p>支持与win7 32位以下<br />
(1)<code>win+R</code>,然后输入<code>canmand</code>,进入后输入<code>Debug</code></p>
<h3><a id="4__R_CPU_18"></a>4. R命令 查看、改变CPU寄存器的内容</h3>
<p><img src="https://static.couragesteak.com/article/5135e172ee694579aa08de3e62d15fd5.png" alt="汇编R命令 查看、改变CPU寄存器的内容" /></p>
<h3><a id="5__D__23"></a>5. D命令 查看内存中的内容</h3>
<p>(1)方法一:<code>d 段地址:偏移地址</code></p>
<p><img src="https://static.couragesteak.com/article/e1ad012fc2a78ca1a9761b6bf5a3a5ee.png" alt="d 段地址:偏移地址" /></p>
<p>(2)方法二:<code>d 段地址:起始偏移地址 结尾偏移地址</code><br />
<img src="https://static.couragesteak.com/article/33483f628a88b7f8f880ba29d05081b8.png" alt="d 段地址:起始偏移地址 结尾偏移地址" /></p>
<h3><a id="6_e__33"></a>6. e命令 改写内存中的内容</h3>
<p>格式:<code>e 起始地址 数据 数据 数据 ...</code><br />
比如,要将内存1000:0~1000:9 单元中的内容分别写为0、1、3、4、5、6、7、8、9</p>
<p>案例一:<br />
<img src="https://static.couragesteak.com/article/316f26b8e2fd3131b556491b348a9aeb.png" alt="79f3b3a221d01522bb7fde7e7973db10.png" /></p>
<p><img src="https://static.couragesteak.com/article/ca09db3c23339ce820ef188ef90ed510.png" alt="640927c9ff48329f0a32b0636a8629d8.png" /></p>
<p>案例二:写入字符<br />
<img src="https://static.couragesteak.com/article/2422b8019382e768f9d667e212f1eac3.png" alt="2d52b808424d451e60ed061e5d1ac6de.png" /></p>
<h3><a id="7_1_e_45"></a>7. 1 e命令向内存写入机器码</h3>
<pre><div class="hljs"><code class="lang-c">机器码 对应汇编命令
b80100 mov ax,<span class="hljs-number">0001</span>
b90200 mov cx,<span class="hljs-number">0002</span>
<span class="hljs-number">01</span>c8 add ax,cx
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/605fe43f2e3aaac29266022dddd95f5b.png" alt="9924047adf834de70eea02179c5d2a67.png" /></p>
<p><img src="https://static.couragesteak.com/article/dfc721dd8aca85d74878d120f6d55919.png" alt="32d231acbe0432fe03202e523ccdcdbb.png" /></p>
<h3><a id="72_U_57"></a>7.2 U命令翻译为汇编命令</h3>
<p><img src="https://static.couragesteak.com/article/85028f8ce1f6ee0b77c867f5e9a21658.png" alt="b3a49d10a9156bf5633d37a01e21dfc4.png" /></p>
<h3><a id="73_t__61"></a>7.3 t命令 执行汇编指令</h3>
<p>(1)先修改 <code>cs:ip=1000:0</code><br />
(2)<code>-t</code>执行<br />
<img src="https://static.couragesteak.com/article/de4bbfe54bc05dcbbc9dc78b6cff783a.png" alt="6f411529ca3cf2db32da5653be5c0243.png" /></p>
<p><img src="https://static.couragesteak.com/article/71c750cc59f226464a0475e530311a04.png" alt="9412c6b6a97f586ceea063234cdfda84.png" /></p>
<h3><a id="8_a__68"></a>8. a命令 汇编形式在内存写入机器指令</h3>
<p><img src="https://static.couragesteak.com/article/e7af5d8d3e64d3852980ea7eabded79d.png" alt="da4025a773a8497e54998d7ec6dfc24d.png" /></p>
留言