<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>小恒的博客 &#187; ASM</title>
	<atom:link href="http://www.henghome.com/archives/category/asm/feed" rel="self" type="application/rss+xml" />
	<link>http://www.henghome.com</link>
	<description>www.henghome.com</description>
	<lastBuildDate>Fri, 09 Apr 2010 17:45:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>王爽汇编语言（第2版）检测点6.1</title>
		<link>http://www.henghome.com/archives/418</link>
		<comments>http://www.henghome.com/archives/418#comments</comments>
		<pubDate>Sun, 11 Oct 2009 04:09:08 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=418</guid>
		<description><![CDATA[(1) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据，完成程序： &#160;assume cs:codesg &#160; &#160;codesg segment &#160; &#160;dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h &#160; &#160;start: mov ax,0 &#160;mov ds,ax &#160;mov bx,0 &#160; &#160;mov cx,8 &#160;s: mov ax,[bx] &#160;mov cs:[bx],ax &#160;add bx,2 &#160;loop s &#160; &#160;mov ax,4c00h &#160;int 21h &#160;codesg ends &#160; &#160;end start (2) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据，数据的传送用栈来进行，栈空间设置在程序内。完成程序： &#160;assume cs:codesg &#160; &#160;codesg segment &#160; &#160;dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h &#160;dw 0,0,0,0,0,0,0,0,0,0 &#160; &#160;start: mov [...]]]></description>
			<content:encoded><![CDATA[<p>(1) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据，完成程序：</p>
<div class="phpcode">
<div class="hl-main">
<ol class="hl-main">
<li>&nbsp;<span class="hl-code">assume cs:codesg</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;codesg segment</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;start: mov ax,0</span></li>
<li><span class="hl-code">&nbsp;mov ds,ax</span></li>
<li><span class="hl-code">&nbsp;mov bx,0</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov cx,8</span></li>
<li><span class="hl-code">&nbsp;s: mov ax,[bx]</span></li>
<li><span class="hl-code">&nbsp;mov cs:[bx],ax</span></li>
<li><span class="hl-code">&nbsp;add bx,2</span></li>
<li><span class="hl-code">&nbsp;loop s</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,4c00h</span></li>
<li><span class="hl-code">&nbsp;int 21h</span></li>
<li><span class="hl-code">&nbsp;codesg ends</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;end start</span></li>
</ol>
</div>
</div>
<p>(2) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据，数据的传送用栈来进行，栈空间设置在程序内。完成程序：</p>
<div class="phpcode">
<div class="hl-main">
<ol class="hl-main">
<li>&nbsp;<span class="hl-code">assume cs:codesg</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;codesg segment</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h</span></li>
<li><span class="hl-code">&nbsp;dw 0,0,0,0,0,0,0,0,0,0</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;start: mov ax,cs</span></li>
<li><span class="hl-code">&nbsp;mov ss,ax</span></li>
<li><span class="hl-code">&nbsp;mov sp,24h</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,0</span></li>
<li><span class="hl-code">&nbsp;mov ds,ax</span></li>
<li><span class="hl-code">&nbsp;mov bx,0</span></li>
<li><span class="hl-code">&nbsp;mov cx,8</span></li>
<li><span class="hl-code">&nbsp;s: push [bx]</span></li>
<li><span class="hl-code">&nbsp;pop cs:[bx]</span></li>
<li><span class="hl-code">&nbsp;add bx,2</span></li>
<li><span class="hl-code">&nbsp;loop s</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,4c00h</span></li>
<li><span class="hl-code">&nbsp;int 21h</span></li>
<li><span class="hl-code">&nbsp;codesg ends</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;end start</span></li>
</ol>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/418/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）实验4</title>
		<link>http://www.henghome.com/archives/410</link>
		<comments>http://www.henghome.com/archives/410#comments</comments>
		<pubDate>Thu, 08 Oct 2009 12:00:33 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=410</guid>
		<description><![CDATA[(1) 编程，向内存0:200~0:23F依次传送数据0~63(3FH)。 (2) 编程，向内存0:200~0:23F依次传送数据0~63(3FH)，程序中只能使用9条指令，9条指令中包括“mov ax,4cooh”和“int 21h”。 &#160;assume cs:code &#160; &#160;code segment &#160; &#160;mov ax,0020H &#160;mov ds,ax &#160;mov bx,0 &#160; &#160;mov cx,64 &#160; &#160;s:mov ds:[bx],bl ; bl存储低8位1字节数据 &#160;inc bx &#160;loop s &#160; &#160;mov ax,4C00H &#160;int 21H &#160; &#160;code ends &#160; &#160;end (3) 下面的程序功能是将“mov ax,4c00h”之前的指令复制到内存0:200处，补全程序。上机调试，跟踪运行结果。 &#160;assume cs:code &#160; &#160;code segment &#160; &#160;mov ax,&#60;span style=&#34;text-decoration: underline;&#34;&#62;cs&#60;/span&#62; ; CS存储的是代码段地址 [...]]]></description>
			<content:encoded><![CDATA[<p>(1) 编程，向内存0:200~0:23F依次传送数据0~63(3FH)。<br />
(2) 编程，向内存0:200~0:23F依次传送数据0~63(3FH)，程序中只能使用9条指令，9条指令中包括“mov ax,4cooh”和“int 21h”。</p>
<div class="phpcode">
<div class="hl-main">
<ol class="hl-main">
<li>&nbsp;<span class="hl-code">assume cs:code</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;code segment</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,0020H</span></li>
<li><span class="hl-code">&nbsp;mov ds,ax</span></li>
<li><span class="hl-code">&nbsp;mov bx,0</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov cx,64</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;s:mov ds:[bx],bl ; bl存储低8位1字节数据</span></li>
<li><span class="hl-code">&nbsp;inc bx</span></li>
<li><span class="hl-code">&nbsp;loop s</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,4C00H</span></li>
<li><span class="hl-code">&nbsp;int 21H</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;code ends</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;end</span></li>
</ol>
</div>
</div>
<p>(3) 下面的程序功能是将“mov ax,4c00h”之前的指令复制到内存0:200处，补全程序。上机调试，跟踪运行结果。</p>
<div class="phpcode">
<div class="hl-main">
<ol class="hl-main">
<li>&nbsp;<span class="hl-code">assume cs:code</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;code segment</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,&lt;span style=&quot;text-decoration: underline;&quot;&gt;cs&lt;/span&gt; ; CS存储的是代码段地址</span></li>
<li><span class="hl-code">&nbsp;mov ds,ax</span></li>
<li><span class="hl-code">&nbsp;mov ax,0020H</span></li>
<li><span class="hl-code">&nbsp;mov es,ax ; 目标段地址存储在ES寄存器中</span></li>
<li><span class="hl-code">&nbsp;mov bx,0</span></li>
<li><span class="hl-code">&nbsp;mov cx,&lt;span style=&quot;text-decoration: underline;&quot;&gt;cx&lt;/span&gt; ; CX存放的是程序的长度</span></li>
<li><span class="hl-code">&nbsp;s:mov al,[bx]</span></li>
<li><span class="hl-code">&nbsp;mov es:[bx],al</span></li>
<li><span class="hl-code">&nbsp;inc bx</span></li>
<li><span class="hl-code">&nbsp;loop s</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;mov ax,4C00H</span></li>
<li><span class="hl-code">&nbsp;int 21H</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;code ends</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;end</span></li>
</ol>
</div>
</div>
<p><img src="http://www.henghome.com/wp-content/uploads/2009/10/asmt43.jpg" alt="asmt43" title="asmt43" width="396" height="214" class="aligncenter size-full wp-image-414" /><br />
(1) 复制的是什么？从哪里到哪里？<br />
答：复制的是代码的二进制数据，从CS:0到ES:0。<br />
(2) 复制的是什么？有多少个字节？你如何知道要复制的字节的数量？<br />
答：复制的是代码的二进制数据，有cx个字节，因为CX存放的是程序的长度。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/410/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）实验3</title>
		<link>http://www.henghome.com/archives/401</link>
		<comments>http://www.henghome.com/archives/401#comments</comments>
		<pubDate>Wed, 07 Oct 2009 10:08:29 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=401</guid>
		<description><![CDATA[(1) 将下面的程序保存为t1.asm文件，将其生成可执行文件t1.exe。 &#160;assume cs:codesg &#160; &#160;codesg segment &#160;mov ax,2000H &#160;mov ss,ax &#160;mov sp,0 &#160;add sp,10 &#160;pop ax &#160;pop bx &#160;push ax &#160;push bx &#160;pop ax &#160;pop bx &#160;mov ax,4c00H &#160;int 21H &#160; &#160;codesg ends &#160; &#160;end   (2) 用Debug跟踪t1.exe的执行过程，写出每一步执行后，相关寄存器中的内容和栈顶的内容。 (3) PSPR头两个字节是CD 20，用Debug加载t1.exe，查看PSP的内容。 输入命令： debug t1.exe d ds:0 ff]]></description>
			<content:encoded><![CDATA[<p>(1) 将下面的程序保存为t1.asm文件，将其生成可执行文件t1.exe。</p>
<div class="phpcode">
<div class="hl-main">
<ol class="hl-main">
<li>&nbsp;<span class="hl-code">assume cs:codesg</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;codesg segment</span></li>
<li><span class="hl-code">&nbsp;mov ax,2000H</span></li>
<li><span class="hl-code">&nbsp;mov ss,ax</span></li>
<li><span class="hl-code">&nbsp;mov sp,0</span></li>
<li><span class="hl-code">&nbsp;add sp,10</span></li>
<li><span class="hl-code">&nbsp;pop ax</span></li>
<li><span class="hl-code">&nbsp;pop bx</span></li>
<li><span class="hl-code">&nbsp;push ax</span></li>
<li><span class="hl-code">&nbsp;push bx</span></li>
<li><span class="hl-code">&nbsp;pop ax</span></li>
<li><span class="hl-code">&nbsp;pop bx</span></li>
<li><span class="hl-code">&nbsp;mov ax,4c00H</span></li>
<li><span class="hl-code">&nbsp;int 21H</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;codesg ends</span></li>
<li><span class="hl-code">&nbsp; </span></li>
<li><span class="hl-code">&nbsp;end</span></li>
</ol>
</div>
</div>
<p> </p>
<p>(2) 用Debug跟踪t1.exe的执行过程，写出每一步执行后，相关寄存器中的内容和栈顶的内容。</p>
<p>(3) PSPR头两个字节是CD 20，用Debug加载t1.exe，查看PSP的内容。</p>
<p>输入命令：<br />
debug t1.exe<br />
d ds:0 ff</p>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/401/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）实验2</title>
		<link>http://www.henghome.com/archives/389</link>
		<comments>http://www.henghome.com/archives/389#comments</comments>
		<pubDate>Tue, 06 Oct 2009 12:58:18 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=389</guid>
		<description><![CDATA[(1) 使用Debug,将下面的程序段写入内存，逐条执行，根据指令执行后的实际运行情况填空。 mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0]    ;ax=5BEA add ax,[2]      ;ax=5CCA mov bx,[4]    ;bx=30F0 add bx,[6]      ;bx=6021 push ax    ;sp=00FE; 修改的内存单元地址是220FE内容为5CCA push bx    ;sp=00FC; 修改的内存单元地址是220FC内容为6021 pop ax      ;sp=00FE; ax=6021 pop bx      ;sp=0100; bx=5CCA push [4]    ;sp=00FE; 修改的内存单元地址是220FE内容为30F0 push [6]    ;sp=00FC; 修改的内存单元地址是220FC内容为2F31 (2) 仔细观察图3.19中的实验过程，然后分析：为什么2000:0~2000:f中的内容会发生改变？ 可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题，那么要恭喜你，因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的，不过不要紧，因为随着课程的进行，这个问题的答案将逐渐变得显而易见。]]></description>
			<content:encoded><![CDATA[<p>(1) 使用Debug,将下面的程序段写入内存，逐条执行，根据指令执行后的实际运行情况填空。</p>
<p>mov ax,ffff<br />
mov ds,ax</p>
<p>mov ax,2200<br />
mov ss,ax</p>
<p>mov sp,0100</p>
<p>mov ax,[0]    ;ax=<span style="text-decoration: underline;">5BEA<br />
</span>add ax,[2]      ;ax=<span style="text-decoration: underline;">5CCA</span><br />
mov bx,[4]    ;bx=<span style="text-decoration: underline;">30F0</span><br />
add bx,[6]      ;bx=<span style="text-decoration: underline;">6021</span></p>
<p>push ax    ;sp=<span style="text-decoration: underline;">00FE</span>; 修改的内存单元地址是<span style="text-decoration: underline;">220FE</span>内容为<span style="text-decoration: underline;">5CCA<br />
</span>push bx    ;sp=<span style="text-decoration: underline;">00FC</span>; 修改的内存单元地址是<span style="text-decoration: underline;">220FC</span>内容为<span style="text-decoration: underline;">6021</span><br />
pop ax      ;sp=<span style="text-decoration: underline;">00FE</span>; ax=<span style="text-decoration: underline;">6021</span><br />
pop bx      ;sp=<span style="text-decoration: underline;">0100</span>; bx=<span style="text-decoration: underline;">5CCA</span></p>
<p>push [4]    ;sp=<span style="text-decoration: underline;">00FE</span>; 修改的内存单元地址是<span style="text-decoration: underline;">220FE</span>内容为<span style="text-decoration: underline;">30F0<br />
</span>push [6]    ;sp=<span style="text-decoration: underline;">00FC</span>; 修改的内存单元地址是<span style="text-decoration: underline;">220FC</span>内容为<span style="text-decoration: underline;">2F31</span></p>
<p>(2) 仔细观察图3.19中的实验过程，然后分析：为什么2000:0~2000:f中的内容会发生改变？</p>
<p>可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题，那么要恭喜你，因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的，不过不要紧，因为随着课程的进行，这个问题的答案将逐渐变得显而易见。</p>
<div id="attachment_392" class="wp-caption aligncenter" style="width: 607px"><img class="size-full wp-image-392" title="图3.19 用Debug进行的实验" src="http://www.henghome.com/wp-content/uploads/2009/10/asm3.19.jpg" alt="图3.19 用Debug进行的实验" width="597" height="495" /><p class="wp-caption-text">图3.19 用Debug进行的实验</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/389/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）检测点3.2</title>
		<link>http://www.henghome.com/archives/379</link>
		<comments>http://www.henghome.com/archives/379#comments</comments>
		<pubDate>Sun, 23 Aug 2009 03:17:05 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=379</guid>
		<description><![CDATA[(1) 补全下面的程序，使其可以将10000H~1000FH中的8个字，逆序复制到20000H~2000FH中。逆序复制的含义如图3.17所示（图中内存里的数据均为假设）。 mov ax, 1000H mov ds, ax mov ax, 2000H   mov ss, ax   mov sp, 0010H   push [0] push [2] push [4] push [6] push [8] push [A] push [C] push [E] (2) 补全下面的程序，使其可以将 10000H~1000FH 中的8个字，逆序复制到20000H~2000FH中。 mov ax, 2000H mov ds, ax mov ax, 1000H   mov ss, ax   mov sp, 0000H   [...]]]></description>
			<content:encoded><![CDATA[<p>(1) 补全下面的程序，使其可以将10000H~1000FH中的8个字，逆序复制到20000H~2000FH中。逆序复制的含义如图3.17所示（图中内存里的数据均为假设）。</p>
<div id="attachment_381" class="wp-caption aligncenter" style="width: 478px"><img class="size-full wp-image-381" title="图3.17 逆序复制示意图" src="http://www.henghome.com/wp-content/uploads/2009/08/asm3.17.jpg" alt="图3.17 逆序复制示意图" width="468" height="301" /><p class="wp-caption-text">图3.17 逆序复制示意图</p></div>
<p>mov ax, 1000H<br />
mov ds, ax<br />
<span style="text-decoration: underline;">mov ax, 2000H  <br />
mov ss, ax  <br />
mov sp, 0010H  </span><br />
push [0]<br />
push [2]<br />
push [4]<br />
push [6]<br />
push [8]<br />
push [A]<br />
push [C]<br />
push [E]</p>
<p>(2) 补全下面的程序，使其可以将 10000H~1000FH 中的8个字，逆序复制到20000H~2000FH中。<br />
mov ax, 2000H<br />
mov ds, ax<br />
<span style="text-decoration: underline;">mov ax, 1000H  <br />
mov ss, ax  <br />
mov sp, 0000H  <br />
</span>pop [E]<br />
pop [C]<br />
pop [A]<br />
pop [8]<br />
pop [6]<br />
pop [4]<br />
pop [2]<br />
pop [0]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/379/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）检测点3.1</title>
		<link>http://www.henghome.com/archives/348</link>
		<comments>http://www.henghome.com/archives/348#comments</comments>
		<pubDate>Fri, 07 Aug 2009 09:19:01 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=348</guid>
		<description><![CDATA[(1) 在Debug中，用户&#8221;d 0:0 1F&#8221; 查看内存，结果如下。 0000:0000    70 80 F0 30 EF 60 30 E2-00 80 12 66 20 22 60 0000:0010    62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88 下面的程序执行前，AX=0,BX=0,写出每条汇编指令执行后相关寄存器中的值。 mov ax,1    AX=0001H mov ds,ax    DS=0001H    (0001:0000)指向的内存地址与(0000:0010)相同 mov ax,[0000]     AX=2662H mov bx,[0001]     BX=E626H mov ax,bx              AX=E626H mov ax,[0000]   [...]]]></description>
			<content:encoded><![CDATA[<p>(1) 在Debug中，用户&#8221;d 0:0 1F&#8221; 查看内存，结果如下。</p>
<p>0000:0000    70 80 F0 30 EF 60 30 E2-00 80 12 66 20 22 60<br />
0000:0010    62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88</p>
<p>下面的程序执行前，AX=0,BX=0,写出每条汇编指令执行后相关寄存器中的值。<br />
<span id="more-348"></span></p>
<p>mov ax,1    AX=0001H<br />
mov ds,ax    DS=0001H    (0001:0000)指向的内存地址与(0000:0010)相同<br />
mov ax,[0000]     AX=2662H<br />
mov bx,[0001]     BX=E626H<br />
mov ax,bx              AX=E626H<br />
mov ax,[0000]    AX=2662H<br />
mov bx,[0002]    BX=D6E6H<br />
add ax,bx               AX=FD48H<br />
add ax,[0004]      AX=2C14H<br />
mov ax,0                AX=0000H<br />
mov al,[0002]     AX=00E6H<br />
mov bx,0               BX=0000H<br />
mov bl,[000c]     BX=0026H<br />
add al,bl                  BX=000CH</p>
<p>提示，注意DS的设置。</p>
<p>(2) 内存中的情况如图3.6所示。</p>
<p>各寄存器的初始值：CS=2000H, IP=0, DS=1000H, AX=0, BX=0;</p>
<p>① 写出CPU执行的指令序列（用汇编指令写出）。<br />
② 写出CPU执行每条指令后，CS、IP和相关寄存器中的数值。<br />
③ 再次体会：数据和程序有区别吗？如何确定内存中的信息哪些是数据，哪些是程序？</p>
<div id="attachment_350" class="wp-caption aligncenter" style="width: 617px"><img class="size-full wp-image-350" title="内存情况示意图" src="http://www.henghome.com/wp-content/uploads/2009/08/asm_3_6.jpg" alt="asm_3_6" width="607" height="319" /><p class="wp-caption-text">图 3.6 内存情况示意图</p></div>
<p> 1. mov ax,6622H<br />
CS=2000H, IP=0003, DS=1000H, AX=6622H, BX=0000H</p>
<p>2. jmp 0FF0:0100<br />
CS=0FF0H, IP=0100H, DS=1000H, AX=6622H, BX=0000H<br />
指令指向内存地址为 0FF0H x 10H + 0100H = 10000H</p>
<p>3. mov ax,2000H<br />
CS=0FF0H, IP=0103H, DS=1000H, AX=2000H, BX=0000H</p>
<p>4. mov ds,ax<br />
CS=0FF0H, IP=0105H, DS=2000H, AX=2000H, BX=0000H<br />
数据指向内存地址为 2000H x 10H + 0000H = 20000H</p>
<p>5. mov ax,[0008]<br />
CS=0FF0H, IP=0108H, DS=2000H, AX=C389H, BX=0000H</p>
<p>6. mov ax,[0002]<br />
CS=0FF0H, IP=010BH, DS=2000H, AX=EA66H, BX=0000H</p>
<p>数据在内存中都是以二进制形式存放，CPU把CS:IP指向的内存地址当做指令执行，DS:0000指向的内存地址当做数据来调用。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/348/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）实验1</title>
		<link>http://www.henghome.com/archives/319</link>
		<comments>http://www.henghome.com/archives/319#comments</comments>
		<pubDate>Sun, 02 Aug 2009 04:44:10 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=319</guid>
		<description><![CDATA[2.实验任务 (1)使用Debug，将下面的程序段写入内存，逐条执行，观察每条指令执行后，CPU中相关寄存器中内容的变化。 注意在进入debug模式时 AX 和 BX 的初始数据为 0000H 机器码 汇编指令 b8 20 4e    mov ax,4E20H    使用T命令读入指令后 IP = IP + 3  执行指令后 AX=4E20H 05 16 14    add ax,1416H    使用T命令读入指令后 IP = IP + 3   执行指令后 AX=6236H bb 00 20   mov ax,2000H    使用T命令读入指令后 IP = IP + 3  执行指令后 AX =2000H 01 d8     add ax,bx    使用T命令读入指令后 [...]]]></description>
			<content:encoded><![CDATA[<p>2.实验任务<br />
(1)使用Debug，将下面的程序段写入内存，逐条执行，观察每条指令执行后，CPU中相关寄存器中内容的变化。</p>
<p>注意在进入debug模式时 AX 和 BX 的初始数据为 0000H</p>
<p>机器码 汇编指令<br />
b8 20 4e    mov ax,4E20H    使用T命令读入指令后 IP = IP + 3  执行指令后 AX=4E20H<br />
05 16 14    add ax,1416H    使用T命令读入指令后 IP = IP + 3   执行指令后 AX=6236H<br />
bb 00 20   mov ax,2000H    使用T命令读入指令后 IP = IP + 3  执行指令后 AX =2000H<br />
01 d8     add ax,bx    使用T命令读入指令后 IP = IP + 2  执行指令后 AX=2000H，BX=0000H<br />
89 c3     mov bx,ax    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2000H，BX=2000H<br />
01 d8     add ax,bx    使用T命令读入指令后 IP = IP + 2 执行指令后   AX=4000H，BX=2000H<br />
b8 1a 00     mov ax,001AH    使用T命令读入指令后 IP = IP + 2 执行指令后  AX=001AH，BX=2000H<br />
bb 26 00     mov bx,0026H   使用T命令读入指令后 IP = IP + 3 执行指令后 AX=001AH，BX=0026H<br />
00 d8      add al,bl   使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0040H，BX=0026H<br />
00 dc      add ah,bl    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2640H，BX=0026H<br />
00 c7     add bh,al    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2640H，BX=4026H<br />
b4 00     mov ah,0  使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0040H，BX=4026H<br />
00 d8     add al,bl    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0066H，BX=4026H<br />
04 9c     add al,9CH    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0002H，BX=4026H<br />
注意，以上结果是102H，担al是8位寄存器，高位1不能存放在al中<br />
提示，可用E命令和A命令以两种方式将将指令写入内存。注意用T命令执行时，CS:IP的指向。</p>
<p><span id="more-319"></span><br />
(2)将下面3条指令写入从2000:0开始的内存单元中，利用这3条指令计算2的8次方。<br />
mov ax,1<br />
add ax,ax<br />
jmp 2000:0003</p>
<p>进入debug模式<br />
用A命令写入汇编指令到2000:0开始的内存单元，见图：<br />
<img class="aligncenter size-full wp-image-337" title="debug1" src="http://www.henghome.com/wp-content/uploads/2009/08/debug11.jpg" alt="debug1" width="418" height="221" /><br />
用R命令修改CS:IP指向2000:0，见图：<br />
<img class="aligncenter size-full wp-image-336" title="debug2" src="http://www.henghome.com/wp-content/uploads/2009/08/debug21.jpg" alt="debug2" width="592" height="318" /><br />
用T命令执行CS:IP指向的指令，需要执行T命令16次来计算2的8次方，见图：<br />
<img class="aligncenter size-full wp-image-333" title="debug3" src="http://www.henghome.com/wp-content/uploads/2009/08/debug3.jpg" alt="debug3" width="593" height="435" /><br />
指令执行序列为：<br />
1. mov ax,1<br />
2. add ax,ax<br />
3. jmp 2000:0003<br />
4. 转到第2步执行</p>
<p>(3)查看内存中的内容。<br />
PC机主板上的ROM中写有一个生产日期，在内存FFF00H~FFFFFH的某几个单元中，请找到这个生产日期并试图改变它。<br />
提示，如果读者对实验的结果感到疑惑请仔细阅读第1章中的1.15节。</p>
<p>根据给出的物理地址算出段地址<br />
存放主板日期的起始地址（基础地址）为FFF00H，段地址为：FFF00H / 10H = FFF0H<br />
FFF0H  x 16 + 00FFH = FFFFFH （结束物理地址）<br />
我们要查找生产日期的段地址范围是 FFF0:0000 ~ FFF0:00FF<br />
<img class="aligncenter size-full wp-image-341" title="debug4" src="http://www.henghome.com/wp-content/uploads/2009/08/debug4.jpg" alt="debug4" width="648" height="342" /></p>
<p>尝试修改生产日期失败。</p>
<p>(4)向内存从B8100H开始的单元中填写数据，如：<br />
-e B810:0000 01 01 02 02 03 03 04 04<br />
请读者先填写不同的数据，观察产生的现象；再改变填写的地址，观察产生的现象。<br />
提示，如果读者对实验的结果感到疑惑，请仔细阅读第1章中的1.15节。<br />
输入 -e B810:0000 01 01 02 02 03 03 04 04 时产生图像：<br />
<img class="aligncenter size-full wp-image-345" title="debug5" src="http://www.henghome.com/wp-content/uploads/2009/08/debug5.jpg" alt="debug5" width="480" height="192" /><br />
输入 -e B810:0000 30 30 31 31 32 32 33 33 时产生图像：<br />
<img class="aligncenter size-full wp-image-346" title="debug6" src="http://www.henghome.com/wp-content/uploads/2009/08/debug6.jpg" alt="debug6" width="487" height="225" /></p>
<p>根据1.15节的内容，B81000是属于显存在内存地址空间中内存单元，向它写入数据时，就是向显存中写入数据，计算机会将可打印的字符输出到屏幕上</p>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/319/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>王爽汇编语言（第2版）检测点2.3</title>
		<link>http://www.henghome.com/archives/307</link>
		<comments>http://www.henghome.com/archives/307#comments</comments>
		<pubDate>Fri, 31 Jul 2009 07:25:48 +0000</pubDate>
		<dc:creator>小 恒</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.henghome.com/?p=307</guid>
		<description><![CDATA[下面的3条指令执行后，CPU几次修改IP?？都是在什么时候？最后IP中的值是多少？ mov ax, bx sub ax, ax jmp ax 指令序列： mov ax, bx 读取这个指令进入指令缓冲器后第一次修改IP，IP = IP + 2; 执行后 ax = bx; sub ax, ax 读取这个指令进入指令缓冲器后第二次修改IP，IP = IP + 2; 执行后 ax = 0000H; jmp ax 读取这个指令进入指令缓冲器后第三次修改IP， IP = IP + 2; 指令执行后第四次修改IP，IP = 0000H; IP加2是因为ax是16位寄存器，16位=2字节。]]></description>
			<content:encoded><![CDATA[<p>下面的3条指令执行后，CPU几次修改IP?？都是在什么时候？最后IP中的值是多少？<br />
mov ax, bx<br />
sub ax, ax<br />
jmp ax</p>
<p>指令序列：<br />
mov ax, bx 读取这个指令进入指令缓冲器后第一次修改IP，IP = IP + 2; 执行后 ax = bx;<br />
sub ax, ax  读取这个指令进入指令缓冲器后第二次修改IP，IP = IP + 2; 执行后 ax = 0000H;<br />
jmp ax 读取这个指令进入指令缓冲器后第三次修改IP， IP = IP + 2; 指令执行后第四次修改IP，IP = 0000H;<br />
<span id="more-307"></span><br />
IP加2是因为ax是16位寄存器，16位=2字节。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.henghome.com/archives/307/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->