<?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; 汇编</title>
	<atom:link href="http://pwwang.com/category/technology/%e6%b1%87%e7%bc%96/feed/" rel="self" type="application/rss+xml" />
	<link>http://pwwang.com</link>
	<description>专注技术,用心生活!</description>
	<lastBuildDate>Fri, 02 Jul 2010 02:26:53 +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>汇编学习笔记[14]：DOS功能调用</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b014%ef%bc%9ados%e5%8a%9f%e8%83%bd%e8%b0%83%e7%94%a8/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b014%ef%bc%9ados%e5%8a%9f%e8%83%bd%e8%b0%83%e7%94%a8/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 07:07:55 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=489</guid>
		<description><![CDATA[&#160;

常用的DOS功能调用：

1．键盘输入并显示（1号功能调用）

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b014%ef%bc%9ados%e5%8a%9f%e8%83%bd%e8%b0%83%e7%94%a8/" title="汇编学习笔记[14]：DOS功能调用">Read More: 1534 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>常用的DOS功能调用：</p>
<p><strong>1．键盘输入并显示（1号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式： <span style="color: rgb(255, 0, 255);">MOV       AH, 01H<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT          21H</span></p>
<p>
功能：按下任何键，将其对应字符的ASCII码送入AL中，并在屏幕上显示该字符。如果按下的是Ctrl＋Break组合键，则终止程序执行。1号功能调用无须入口参数，出口参数在AL中</p>
</blockquote>
<p><strong>2．键盘输入但不显示输入字符（8号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式：  <span style="color: rgb(255, 0, 255);">MOV      AH,  08H<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT       21H</span></p>
<p>
功能：同1号功能调用，但字符不在屏幕上显示。&nbsp;</p>
</blockquote>
<p><strong>3．屏幕显示一个字符（2号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式：    <span style="color: rgb(255, 0, 255);">MOV      DL, &#8216;字符&#8217;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 02H<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
功能：将置入DL寄存器中的字符在屏幕上显示输出。&nbsp;</p>
</blockquote>
<p><strong>4．打印输出（5号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式：<span style="color: rgb(255, 0, 255);">    MOV      DL, &#8216;字符&#8217;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 05H<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
功能：将置入DL寄存器中的字符送打印机接口，打印输出。</p>
</blockquote>
<p> <span id="more-489"></span></p>
<p><strong>5．屏幕显示字符串（9号功能调用）</strong></p>
<blockquote>
<p>格式： <span style="color: rgb(255, 0, 255);">   MOV      DX, 字符串的偏移地址 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 09H<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
&nbsp;&nbsp;&nbsp; 功能：在屏幕上显示字符串。<br />
&nbsp;&nbsp;&nbsp; 在使用9号功能调用时，应当注意以下问题。</p>
<p>
<span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp; ① 待显示的字符串必须先放在内存一数据区（DS段）中，且以&lsquo;$&rsquo;符号作为结束标志。 </span></p>
<p><span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp; ② 应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。</span></p>
</blockquote>
<p><strong>6．字符串输入功能调用（0AH号功能调用）</strong></p>
<blockquote>
<p>&nbsp;&nbsp;<span class="STYLE16">&nbsp;&nbsp; 格式： </span><span style="color: rgb(255, 0, 255);"><span class="STYLE16">   MOV      DX, 已定义缓冲区的偏移地址 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 0AH<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></span></p>
<p>
&nbsp;&nbsp;&nbsp; 功能：从键盘接收字符，并存放到内存缓冲区。</p>
<p class="STYLE13">
&nbsp;&nbsp;&nbsp; 在使用0AH号功能调用时，应当注意以下问题。</p>
<p class="STYLE13">
<span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp; ① 执行前先定义一个输入缓冲区，缓冲区内第一个字节定义为允许最多输入的字符个数，字符个数应包括回车符0DH在内，不能为&ldquo;0&rdquo;值。第二个字节保留，在执 行程序完毕后存入输入的实际字符个数。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数，则缓冲区其他 单元自动清0。若实际输入的字符个数大于定义的字符个数，其后输入的字符丢弃不用，且响铃示警，一直到输入回车键为止。整个缓冲区的长度等于最大字符个数 再加2。 <br />
</span></p>
<p><span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp; ② 应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。</span></p>
</blockquote>
<p><strong>7．返回DOS操作系统（4CH号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式： <span style="color: rgb(255, 0, 255);">   MOV      AH, 4CH<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
&nbsp;&nbsp;&nbsp; 功能：终止当前程序的运行，并把控制权交给调用的程序，即返回DOS系统，屏幕出现DOS提示符，如&ldquo;C: \ &gt;&rdquo;，等待DOS命令。</p>
</blockquote>
<p><strong>8．直接输入、输出单字符（6号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式：    <span style="color: rgb(255, 0, 255);">MOV      DL, 输入/输出标志 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 06H<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
&nbsp;&nbsp;&nbsp; 功能：执行键盘输入操作或屏幕显示输出操作，但不检查Ctrl＋Break组合键是否按下。执行这两种操作的选择由DL寄存器中的内容决定。</p>
<p>
<span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp; ① 当(DL)＝0FFH时，执行键盘输入操作。若标志ZF＝0，AL中放入字符的ASCII码；若标志ZF＝1，表示无键按下。这种调用用来检测键盘是否有键按下，但不等待键盘输入。 <br />
</span></p>
<p><span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp; ② 当(DL)&ne;0FFH时，表示将DL中内容送屏幕显示输出。</span></p>
</blockquote>
<p><strong>9．检查键盘的工作状态（0BH号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式：    <span style="color: rgb(255, 0, 255);">MOV      AH, 0BH<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
&nbsp;&nbsp;&nbsp; 功能：检查是否有键盘输入，若有键按下，则使AL＝0FFH，若无键按下，则AL＝00H。对于利用键盘操作退出循环或使程序结束之类的操作来说，这种调用是很方便实用的。</p>
</blockquote>
<p><strong>10．设置系统日期（2BH号功能调用）</strong></p>
<blockquote class="STYLE13 STYLE16">
<p>格式：    <span style="color: rgb(255, 0, 255);">MOV      CX,  年号 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      DH, 月号 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      DL, 日期 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 2BH<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p>
&nbsp;&nbsp;&nbsp; 功能：设置有效的年、月、日。当AL＝0时，设置成功；当AL＝0FFH时，设置失败。</p>
</blockquote>
<p><strong>11．设置系统时间（2DH号功能调用）</strong></p>
<blockquote>
<p class="STYLE16">格式：    <span style="color: rgb(255, 0, 255);">MOV      CH,  小时 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      CL, 分 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      DH, 秒 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV      AH, 2DH<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT        21H</span></p>
<p class="STYLE16">
&nbsp;&nbsp;&nbsp; 功能：设置有效的时间。当AL＝0时，设置成功；当AL＝0FFH时，设置失败。</p>
</blockquote>
<p class="STYLE16">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b014%ef%bc%9ados%e5%8a%9f%e8%83%bd%e8%b0%83%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[13]：子程序设计</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b013%ef%bc%9a%e5%ad%90%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b013%ef%bc%9a%e5%ad%90%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:43:53 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=474</guid>
		<description><![CDATA[&#160;

过程调用指令有段内调用（近调用）和段间调用（远调用）之分。

与之对应，过程返回指令也有段内返回（近返回）和段间返回（远返回）之分。

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b013%ef%bc%9a%e5%ad%90%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1/" title="汇编学习笔记[13]：子程序设计">Read More: 878 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>过程调用指令有段内调用（近调用）和段间调用（远调用）之分。</p>
<p>与之对应，过程返回指令也有段内返回（近返回）和段间返回（远返回）之分。</p>
<p>过程有远近类型之分。</p>
<p><strong>1. 过程调用指令</strong></p>
<p>首先把子程序的返回地址（即CALL指令的下一条指令的地址）压入堆栈，以便执行完子程序后返回调用程序（主程序）</p>
<p>（1）&nbsp;段内直接调用</p>
<p><span style="color: #ff00ff">CALL DST</span></p>
<p>具体操作：&nbsp;</p>
<p>SP &lt;= SP &#8211; 2</p>
<p>[SP] &lt;= IP</p>
<p>IP &lt;= IP +disp</p>
<p><span id="more-474"></span></p>
<p>（2）&nbsp;段内间接调用</p>
<p><span style="color: #ff00ff">CALL OPRD</span></p>
<p>具体操作：</p>
<p>SP &lt;= SP &#8211; 2</p>
<p>[SP] &lt;= IP</p>
<p>IP &lt;= （OPRD）</p>
<p>该指令只把返回地址的偏移部分压入堆栈保存</p>
<p>OPRD是16位通用寄存器操作数，则把寄存器的内容送IP，若OPRD是字寄存器操作数，则把字存储单元的内容送IP</p>
<p>（3）&nbsp;段间直接调用</p>
<p><span style="color: #ff00ff">CALL 过程名</span></p>
<p>具体操作：</p>
<p>SP &lt;= SP -2</p>
<p>[SP] &lt;= CS</p>
<p>SP &lt;= SP &#8211; 2</p>
<p>[SP] &lt;= IP</p>
<p>IP &lt;= 过程入口地址的偏移</p>
<p>CS &lt;= 过程入口地址的段值</p>
<p>（4）段间间接调用</p>
<p><span style="color: #ff00ff">CALL OPRD</span></p>
<p>OPRD是双字存储器操作数</p>
<p>具体操作：</p>
<p>SP &lt;= SP -2</p>
<p>[SP] &lt;= CS</p>
<p>SP &lt;= SP &#8211; 2</p>
<p>[SP] &lt;= IP</p>
<p>IP &lt;= OPRD的低字值</p>
<p>CS &lt;= OPRD的高字值</p>
<p>&nbsp;</p>
<p><strong>2. 过程返回指令</strong></p>
<p>（1）段内返回指令</p>
<p><span style="color: #ff00ff">RET</span></p>
<p>具体操作：</p>
<p>IP &lt;= [SP]</p>
<p>SP &lt;= SP+2</p>
<p>（2）段间返回指令</p>
<p><span style="color: #ff00ff">RET</span></p>
<p>具体操作</p>
<p>IP &lt;= [SP]</p>
<p>SP &lt;= SP+2</p>
<p>CS &lt;= [SP]</p>
<p>SP &lt;= SP+2</p>
<p>（3）段内带立即数返回指令</p>
<p><span style="color: #ff00ff">RET 表达式</span></p>
<p>IP &lt;= [SP]</p>
<p>SP &lt;= SP+2</p>
<p>SP &lt;= SP+data</p>
<p>先从堆栈弹出一个字作为返回地址，再额外根据data修改堆栈指针。</p>
<p>（4）段间带立即数返回指令</p>
<p><span style="color: #ff00ff">RET 表达式</span></p>
<p>先从堆栈弹出两个字，分别送到指令指针IP和代码段寄存器CS</p>
<p>再额外修改堆栈指针，即把表达式的结果加到SP</p>
<p>&nbsp;</p>
<p><strong>3. 过程定义语句</strong></p>
<p><span style="color: #ff00ff">过程名 PROC [NEAR |　FAR]</span></p>
<p><span style="color: #ff00ff">　　　　　&#8230;</span></p>
<p><span style="color: #ff00ff">　　　　　&#8230;</span></p>
<p><span style="color: #ff00ff">过程名 ENDP</span></p>
<p><span style="color: #ff0000">默认类型为NEAR</span>，过程名亦有段值，偏移和类型三个属性</p>
<p><span style="color: #ff0000">过程名的类型就是过程的类型</span></p>
<p>&nbsp;</p>
<p><strong>4. 主程序与子程序间的参数传递</strong></p>
<p>（1）利用寄存器传递参数</p>
<p>适用于传递的参数较少的情况</p>
<p>（2）利用约定存储单元传送参数</p>
<p>可用于参数较多的情况</p>
<p>（3）堆栈传递参数</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b013%ef%bc%9a%e5%ad%90%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[12]：源程序组织</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b012%ef%bc%9a%e6%ba%90%e7%a8%8b%e5%ba%8f%e7%bb%84%e7%bb%87/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b012%ef%bc%9a%e6%ba%90%e7%a8%8b%e5%ba%8f%e7%bb%84%e7%bb%87/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 13:02:47 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=472</guid>
		<description><![CDATA[1. 符号定义语句

（1）等价语句EQU

符号名 EQU 表达式

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b012%ef%bc%9a%e6%ba%90%e7%a8%8b%e5%ba%8f%e7%bb%84%e7%bb%87/" title="汇编学习笔记[12]：源程序组织">Read More: 624 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><strong>1. 符号定义语句</strong></p>
<p>（1）等价语句EQU</p>
<p><span style="color: #ff00ff">符号名 EQU 表达式</span></p>
<p>如：</p>
<p>COUNT EQU 100 ；符号COUNT就代表常数100</p>
<p>BUFF EQU 4*COUNT &ldquo;How are you?&rdquo;</p>
<p>MOVE EQU MOV&nbsp; ；原有的MOV也可使用</p>
<p><span style="color: #ff0000">等价语句不另给符号分配存储单元；定义的符号不能与其他符号相同，也不能重新被定义。</span></p>
<p>（2）等号语句(=)</p>
<p><span style="color: #ff00ff">符号名＝表达式</span></p>
<p>如：XX=10</p>
<p><span style="color: #ff0000">用等号语句定义的符号可被重新定义</span></p>
<p>（3）定义符号名语句</p>
<p><span style="color: #ff00ff">符号名 LABEL 类型</span></p>
<p>其中的类型也是TYPE相关的类型</p>
<p>定义由符号名指定的符号，使该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同，使该符号的类型为参数所规定的类型。</p>
<p>如 BUFFER LABEL WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; BUFF DB 100DUP(0)</p>
<p>BUFFER的类型是WORD，段属性和偏移属性与BUFF相同</p>
<p><span id="more-472"></span></p>
<p><strong>2. 段定义语句</strong></p>
<p>（1）段开始和结束语句</p>
<p><span style="color: #ff00ff">段名 SEGMENT [定位类型] [组合类型] [&lsquo;类型&rsquo;]</span></p>
<p><span style="color: #ff00ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&#8230;</span></p>
<p><span style="color: #ff00ff">段名 ENDS</span></p>
<p>（2）段使用设定语句</p>
<p><span style="color: #ff00ff">ASSUME 段寄存器：段名[，段寄存器：段名......]</span></p>
<p>指出各程序段与段寄存器之间的对应关系</p>
<p>其中段名有一个特殊的关键字：<span style="color: #ff0000">NOTHING</span>，表示某个段寄存器不再与任何段有对应关系</p>
<p>（3）ORG语句</p>
<p><span style="color: #ff00ff">ORG 数值表达式</span></p>
<p>使用地址计数器来保存当前正在汇编的指令或者变量的地址偏移</p>
<p>另外，汇编语言用符号&ldquo;$&rdquo;表示地址计数器的值，如</p>
<p>ORG $+8 ；表示跳过8个字节的存储区</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b012%ef%bc%9a%e6%ba%90%e7%a8%8b%e5%ba%8f%e7%bb%84%e7%bb%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[11]：变量和标号</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b011%ef%bc%9a%e5%8f%98%e9%87%8f%e5%92%8c%e6%a0%87%e5%8f%b7/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b011%ef%bc%9a%e5%8f%98%e9%87%8f%e5%92%8c%e6%a0%87%e5%8f%b7/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 10:30:06 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=470</guid>
		<description><![CDATA[&#160;

1. 变量和标号的属性

变量表示的存储单元中存放的是数值；标号表示的存储单元中存放的是指令代码。

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b011%ef%bc%9a%e5%8f%98%e9%87%8f%e5%92%8c%e6%a0%87%e5%8f%b7/" title="汇编学习笔记[11]：变量和标号">Read More: 704 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><strong>1. 变量和标号的属性</strong></p>
<p>变量表示的存储单元中存放的是<span style="color: rgb(255,0,0)">数值</span>；标号表示的存储单元中存放的是<span style="color: rgb(255,0,0)">指令代码</span>。</p>
<p>二者都具有以下三种属性：</p>
<p>（1）段值：对应存储单元所在的段的段值</p>
<p>（2）偏移：对应存储单元的起始地址的段内偏移</p>
<p>（3）类型：变量的类型主要是字节，字和双字；标号的类型是要是指NEAR（段内标号），FAR（段间标号）</p>
<p><span id="more-470"></span></p>
<p><strong>2. 析值操作符</strong></p>
<p>也称数值回送操作符，要主的析值操作符及使用格式：</p>
<p><span style="color: #ff00ff">SEG/OFFSET/TYPE 变量或标号名</span></p>
<p><span style="color: #ff00ff">LENGTH/SIZE 变量名</span></p>
<p>（1）SEG： 返回变量所在段的段值</p>
<p>（2）OFFSET：返回变量或标号的偏移</p>
<p>（3）TYPE：返回变量或标号的类型，类型用数值表示，常用的类型和对应的数值：</p>
<p>字节（BYTE） ：1&nbsp;&nbsp;&nbsp;&nbsp; 字（WORD）：2&nbsp;&nbsp;&nbsp; 双字（DWORD）：4</p>
<p>近（NEAR）： －1&nbsp;&nbsp;&nbsp; 远（FAR）： －2</p>
<p><span style="color: rgb(255,0,0)">变量的类型值的对应类型的变量所占的字节数</span>，标号的类型值没有实际的物理意义</p>
<p>（4）LENGTH：返回利用DUP定义的数组中元素的个数</p>
<p><span style="color: rgb(255,0,0)">如果没有使用DUP，返回1<br />
</span></p>
<p><span style="color: rgb(255,0,0)">如果嵌套使用DUP，返回最外层的重复数</span></p>
<p>（5）SIZE：返回利用DUP定义的数组占用的字节数，因此：</p>
<p>SIZE 变量 ＝ （LENGTH 变量）* （TYPE 变量）</p>
<p>&nbsp;</p>
<p><strong>3. 属性操作符</strong></p>
<p>为了提高访问变量，标号和一般存储器操作数的灵活性，汇编语言提供了属性操作符，达到按指定属性访问的目的。</p>
<p>操作符：PTR</p>
<p>如在语句：MOV [SI] 1 中，无法确定给SI指向的存储单元中送字还是字节</p>
<p>MOV WORD PTR [SI] 1；指明字类型</p>
<p>MOV BYTE PTR [SI] 1 ；指明字节类型</p>
<p><span style="color: rgb(255,0,0)">PTR是最常用的合成操作符，用在地址表达式前，用于指定或临时改变变量和标号的类型。</span></p>
<p>格式：&nbsp;&nbsp; 类型 PTR 地址表达式</p>
<p>类型可以是TYPE中的类型</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b011%ef%bc%9a%e5%8f%98%e9%87%8f%e5%92%8c%e6%a0%87%e5%8f%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[10]：数据定义语句</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b010%ef%bc%9a%e6%95%b0%e6%8d%ae%e5%ae%9a%e4%b9%89%e8%af%ad%e5%8f%a5/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b010%ef%bc%9a%e6%95%b0%e6%8d%ae%e5%ae%9a%e4%b9%89%e8%af%ad%e5%8f%a5/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 09:58:54 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=464</guid>
		<description><![CDATA[&#160;

数据定义语句是最常用的伪指令语句，一般格式：

[变量名] 数据定义符 表达式[，表达式，...，表达式][；注释]

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b010%ef%bc%9a%e6%95%b0%e6%8d%ae%e5%ae%9a%e4%b9%89%e8%af%ad%e5%8f%a5/" title="汇编学习笔记[10]：数据定义语句">Read More: 608 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>数据定义语句是最常用的伪指令语句，一般格式：</p>
<p><span style="color: rgb(255, 0, 255);">[变量名] 数据定义符 表达式[，表达式，...，表达式][；注释]</span></p>
<p>&nbsp;</p>
<p><strong>1. 定义字节数据项</strong></p>
<p>数据定义符是DB，如</p>
<p>COUNT DB 100</p>
<p>&nbsp;</p>
<p><strong>2. 定义字数据项</strong></p>
<p>数据定义符是DW，如</p>
<p>FLG DW 1FCDH，100，－1</p>
<p><span id="more-464"></span></p>
<p><strong>3. 定义双字数据项</strong></p>
<p>数据定义符是DD，如</p>
<p>VEC DD 4，12334567H，0</p>
<p>&nbsp;</p>
<p><strong>4. 定义没有初值的数据项</strong></p>
<p>用？来表示不预置对应就是的初值，仅仅给变量分配存储单元，如：</p>
<p>INBUFF DB 5，？，？，8，5</p>
<p>留出第2个和第3个字节的位置</p>
<p>&nbsp;</p>
<p><strong>5. 定义字符串</strong></p>
<p>用DB也可以定义字符串，字符串用单引号或双引号括起来。如：</p>
<p>MESS DB &ldquo;HELLO！&rdquo;&nbsp;&nbsp;&nbsp;&nbsp; ；相当于：</p>
<p>MESS DB &ldquo;H&rdquo;，&ldquo;E&rdquo;，&ldquo;L&rdquo;，&ldquo;L&rdquo;，&ldquo;O&rdquo;，&ldquo;！&rdquo;</p>
<p><span style="color: rgb(255, 0, 0);">注意区别 MESS1 DB &ldquo;AB&rdquo; 和 MESS2 DW &ldquo;AB&rdquo;<br />
</span></p>
<p><span style="color: rgb(255, 0, 0);">MESS1 ＝ 4241H， MESS2 ＝ 4142H</span></p>
<p>&nbsp;</p>
<p><strong>6. 定义其他类型数据项</strong></p>
<p>可以定义8字节数据项和10字节数据项，数据定义符分别是DQ，DT，如：</p>
<p>DT 0 </p>
<p>DQ ？</p>
<p>&nbsp;</p>
<p><strong>7. 重复操作符DUP</strong></p>
<p>据数组或数据缓冲区定义的需要，可以使用DUP，如</p>
<p>BUFFER DB 8DUP（0）&nbsp; ；相当于：</p>
<p>BUFFER DB 0，0，0，0，0，0，0，0</p>
<p>并且DUP<span style="color: rgb(255, 0, 0);">允许嵌套</span></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b010%ef%bc%9a%e6%95%b0%e6%8d%ae%e5%ae%9a%e4%b9%89%e8%af%ad%e5%8f%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[9]：表达式</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b09%ef%bc%9a%e6%95%b0%e5%80%bc%e8%a1%a8%e8%be%be%e5%bc%8f/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b09%ef%bc%9a%e6%95%b0%e5%80%bc%e8%a1%a8%e8%be%be%e5%bc%8f/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 09:33:04 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=462</guid>
		<description><![CDATA[&#160;

先提一下几个概念



<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b09%ef%bc%9a%e6%95%b0%e5%80%bc%e8%a1%a8%e8%be%be%e5%bc%8f/" title="汇编学习笔记[9]：表达式">Read More: 1093 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><strong>先提一下几个概念</strong></p>
<ul>
<li>汇编程序语句的类别：<span style="color: rgb(255, 0, 0);">指令语句</span>和<span style="color: rgb(255, 0, 0);">伪指令语句</span><br />
    指令语句有着与其对应的机器指令，而伪指令没有，只是指示汇编程序如何汇编源程序，包括符号的定义，变量的定义，段的定义，等<br />
    &nbsp;</li>
<li>语句的形式（指令语句与伪指令语句格式相似）：<br />
    指令语句： [标号：] 指令助记符 [操作数（，操作数）] [；注释]<br />
    伪指令语句：[名字] 伪指令定义符（参数&#8230;, 参数）[；注释]<br />
    &nbsp;</li>
<li>标号和名字一般最多由<span style="color: rgb(255, 0, 0);">31</span>个字母，数字及规定的特殊字符（? @_ $）等组成，<span style="color: rgb(255, 0, 0);">且不能用数字开头</span><br />
    &nbsp;</li>
<li>表达式在汇编语言中有两种：<span style="color: rgb(255, 0, 0);">数值表达</span>式及<span style="color: rgb(255, 0, 0);">地址表达式</span></li>
</ul>
<p>&nbsp;</p>
<p><span id="more-462"></span></p>
<p><strong>一、数值表达式</strong></p>
<p><strong>1. 常数</strong></p>
<p>（1）十进制数</p>
<p>以D结尾，如1234D</p>
<p>在表示十进制数时一般不加后缀D， 但汇编语言提供改变基数的伪指令RADIX</p>
<p>如 RADIX 16，那么这时候不加后缀，默认为16进制数。</p>
<p>（2）十六进制数</p>
<p>以H结尾，如1234H</p>
<p>凡是以字母A－F开头的十六进制数，必须在前面加一个0，如0FFFFH</p>
<p>（3）二进制数</p>
<p>由0，1组成，B结尾， 如0010100B</p>
<p>（4）八进制数</p>
<p>0－7组成，Q结尾，如123Q</p>
<p>（5）字符串常数</p>
<p>用引号括起来的一个或多个字符，串常数的值是包括在绰号中的字符的ASCII代码值，串常数与整常数有时候可以交替使用。</p>
<p>&nbsp;</p>
<p><strong>2. 算术运算符</strong></p>
<p>包括：+，－，*， / 和MOD（取余）</p>
<p>&nbsp;</p>
<p><strong>3. 关系运算符</strong></p>
<p>包括： 等（EQ），不等（NE），小于（LT），大小（GT），小于等于（LE），大于等于（GE）</p>
<p>运算结果是一个数字值，若关系不成立，则结果为0，否则结果为0FFFFH</p>
<p>&nbsp;</p>
<p><strong>4. 逻辑运算符</strong></p>
<p>包括与（AND），或（OR），异或（XOR），非（NOT），还包括逻辑左移（SHL）和逻辑右移（SHR）</p>
<p>逻辑运算的结果是数值</p>
<p>&nbsp;</p>
<p><strong>5. 在数值表达式中使用的操作符</strong></p>
<p>包括：HIGH，LOW，LENGTH，SIZE，OFFSET，SEG，TYPE，WIDTH，MASK</p>
<p>HIGH/LOW 数值表达式</p>
<p>结果是数值表达式的高/低8位</p>
<p>&nbsp;</p>
<p><strong>6. 运算符和操作符的优先级</strong></p>
<p>（1）圆括号，尖括号，方括号，圆点符，LENGTH，SIZE，WIDTH，MASK，其中尖括号使用于记录中，圆点使用于结构中</p>
<p>（2）PTR，OFFSET，SEG，TYPE，THIS，冒号，冒号用于段跨越前缀</p>
<p>（3）*，/，MOD，SHL，SHR</p>
<p>（4）HIGH，LOW</p>
<p>（5）+，－</p>
<p>（6）EQ，NE，LT，LE，GT，GE</p>
<p>（7）NOT</p>
<p>（8）AND</p>
<p>（9）OR，XOR</p>
<p>（10）SHORT</p>
<p>&nbsp;</p>
<p><strong>二、地址表达式</strong></p>
<p>&nbsp;</p>
<p>包括单个的标号，变量（对应直接寻址方式）和有方括号挺直的基址或变址寄存器</p>
<p><span style="color: rgb(255, 0, 0);">在一个存储器地址上加或减一个数字量，结果仍为存储器地址 如MOV AX，VARW+4，是指变量VARW的偏移+4为偏移的存储单元，而不是VARW的内容+4！</span></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b09%ef%bc%9a%e6%95%b0%e5%80%bc%e8%a1%a8%e8%be%be%e5%bc%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[8]：转移指令</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b08%ef%bc%9a%e8%bd%ac%e7%a7%bb%e6%8c%87%e4%bb%a4/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b08%ef%bc%9a%e8%bd%ac%e7%a7%bb%e6%8c%87%e4%bb%a4/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 06:35:13 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=459</guid>
		<description><![CDATA[&#160;

1. 无条件转移指令

（1）无条件段内直接转移指令

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b08%ef%bc%9a%e8%bd%ac%e7%a7%bb%e6%8c%87%e4%bb%a4/" title="汇编学习笔记[8]：转移指令">Read More: 876 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><strong>1. 无条件转移指令</strong></p>
<p>（1）无条件段内直接转移指令</p>
<p><span style="color: #ff00ff">JMP 标号</span></p>
<p>JMP IP+地址差</p>
<p>使控制无条件地转移到标号地址处</p>
<p>段内无条件直接转移指令中的地址差可用一个字节表示，也可以用一个字表示</p>
<p>如果用字节表示就称<span style="color: rgb(255,0,0)">短转移</span></p>
<p>如果用字表示就称<span style="color: rgb(255,0,0)">近转移</span></p>
<p>段内近跳：JMP NEAR PTR PROG</p>
<p>段内短跳：JMP SHORT QUEST</p>
<p>（2）无条件段内间接转移指令</p>
<p><span style="color: #ff00ff">JMP OPRD</span></p>
<p>无条件地转移到OPRD的内容给定的目标地址处</p>
<p><span id="more-459"></span>（3）无条件段间直接转移指令</p>
<p><span style="color: #ff00ff">JMP FAR PTR 标号</span></p>
<p>无条件段间直接转移指令的具体动作是把指令中包含的目标地址的段值和偏移分别置入CS和IP</p>
<p>这种在指令中直接包含转移目标地址的转移方式称为<span style="color: rgb(255,0,0)">绝对转移</span></p>
<p>&nbsp;</p>
<p>（4）无条件段间间接转移指令</p>
<p><span style="color: #ff00ff">JMP OPRD</span></p>
<p>使控制无条件地转移到由操作数OPRD的内容给定的目标地址处。</p>
<p><span style="color: rgb(255,0,0)">OPRD必须是双字存储单元</span></p>
<p>双字存储单元的低字内容送IP，高字内容送CS</p>
<p>&nbsp;</p>
<p><strong>2. 条件转移指令</strong></p>
<p><span style="color: rgb(255,0,0)">所有的条件转移都只是段内转移<br />
</span></p>
<p><span style="color: rgb(255,0,0)">条件转移指令不影响标志位</span></p>
<p>有符号数间的比较关系G（&gt;），E（＝），L（&lt;）</p>
<p>无符号数间的比较关系A（&gt;），E（=），B（&lt;）</p>
<p>比较两数是否相等：CMP AX，BX 若AX＝BX，则ZF＝0</p>
<p>要比较AX和BX的大小：CMP AX，BX</p>
<p>当OF＝0（没有溢出），若SF＝0，则a&gt;b；否则a&lt;b</p>
<p>当OF＝1（产生溢出），若SF＝0，则a&lt;b；否则a&gt;b</p>
<p>&nbsp;</p>
<p><strong>3. 循环指令</strong></p>
<p>与条件转移指令类似，仅属于段内转移</p>
<p>循环指令不影响标志位</p>
<p>（1）计数循环指令LOOP</p>
<p><span style="color: #ff00ff">LOOP 标号</span></p>
<p>使CX的值减1，如果结果不等于0，则转移到标号，否则顺序执行。</p>
<p>相当于：</p>
<p>DEC CX</p>
<p>JNZ 标号</p>
<p><span style="color: rgb(255,0,0)">在调用LOOP时，CX要先赋初值，最多可循环65536次</span></p>
<p>（2）等于/全零循环指令LOOPE/LOOPZ</p>
<p><span style="color: #ff00ff">LOOPE/LOOPZ 标号</span></p>
<p>使CX减1，当相等或为0时，（且零标志ZF＝1），那么转移到标号，否则顺序执行。</p>
<p>（3）不等于/非零循环LOOPNE/LOOPNZ</p>
<p><span style="color: #ff00ff">LOOPE/LOOPZ 标号</span></p>
<p>与LOOPE，LOOPZ刚好相反</p>
<p>（4）跳转指令JCXZ</p>
<p><span style="color: #ff00ff">JCXZ 标号</span></p>
<p>当CX的值等于0的时候转移到标号，否则顺序执行</p>
<p>通常用在循环的开始，在循环次数为0的时候跳过循环体</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b08%ef%bc%9a%e8%bd%ac%e7%a7%bb%e6%8c%87%e4%bb%a4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[7]：移位指令</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b07%ef%bc%9a%e7%a7%bb%e4%bd%8d%e6%8c%87%e4%bb%a4/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b07%ef%bc%9a%e7%a7%bb%e4%bd%8d%e6%8c%87%e4%bb%a4/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 05:34:12 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=457</guid>
		<description><![CDATA[&#160;

1. 算术左移或逻辑左移指令SAL/SHL

SAL OPRD，m

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b07%ef%bc%9a%e7%a7%bb%e4%bd%8d%e6%8c%87%e4%bb%a4/" title="汇编学习笔记[7]：移位指令">Read More: 397 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><strong>1. 算术左移或逻辑左移指令SAL/SHL</strong></p>
<p><span style="color: #ff00ff">SAL OPRD，m</span></p>
<p><span style="color: #ff00ff">SHL OPRD，m</span></p>
<p>SAL/SHL执行相同的操作，把操作数OPRD左移m，每移动一位，右边用0补足一位，移出的最高位进入标志位CF</p>
<p>每左移一次，相当于原数X2</p>
<p>&nbsp;</p>
<p><strong>2. 算术右移指令SAR</strong></p>
<p><span style="color: #ff00ff">SAR OPRD，m</span></p>
<p>使操作数右移m位，同时每移一位，<span style="color: rgb(255,0,0)">左边的符号位保持不变</span>，移出的最低位进入标志位CF</p>
<p>算术右移一位相当于除以2</p>
<p>&nbsp;</p>
<p><span id="more-457"></span><strong>3. 逻辑右移指令SHR</strong></p>
<p><span style="color: #ff00ff">SHR OPRD，m</span></p>
<p>使操作数右移m位，同时每移一位，<span style="color: rgb(255,0,0)">左边用0补足</span>，移出的最低位进入标志位CF</p>
<p>&nbsp;</p>
<p><strong>4. 循环移位指令</strong></p>
<p>（1）循环左移ROL</p>
<p><span style="color: #ff00ff">ROL OPRD，m</span></p>
<p>（2）循环右移ROR</p>
<p><span style="color: #ff00ff">ROR OPRD，m</span></p>
<p>（3）带进位的循环左移RCL</p>
<p><span style="color: #ff00ff">RCL OPRD，m</span></p>
<p>（4）带进位的循环右移RCR</p>
<p><span style="color: #ff00ff">RCR OPRD，m</span></p>
<p>以上指令中：m为移位次数，为1或CL。</p>
<p>这些指令只影响CF和OF</p>
<p>如果是8位的操作数，对于不带进位的，移8位后能复原，带进位的，移动9位后能复原。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b07%ef%bc%9a%e7%a7%bb%e4%bd%8d%e6%8c%87%e4%bb%a4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[6]：逻辑运算指令</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b06%ef%bc%9a%e9%80%bb%e8%be%91%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b06%ef%bc%9a%e9%80%bb%e8%be%91%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 05:13:00 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=455</guid>
		<description><![CDATA[&#160;

1. 否操作指令NOT

NOT OPRD

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b06%ef%bc%9a%e9%80%bb%e8%be%91%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/" title="汇编学习笔记[6]：逻辑运算指令">Read More: 341 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><strong>1. 否操作指令NOT</strong></p>
<p><span style="color: #ff00ff">NOT OPRD</span></p>
<p>把OPRD取反，再回送给OPRD</p>
<p>对标志位没有影响</p>
<p>&nbsp;</p>
<p><strong>2. 与操作指令AND</strong></p>
<p><span style="color: #ff00ff">AND OPRD1，OPRD2</span></p>
<p>OPRD1和OPRD2执行与操作，结果送到OPRD1</p>
<p>执行后，CF＝OF＝0，标志PF，ZF，SF反映运算结果，AF未定义</p>
<p><span style="color: rgb(255,0,0)">某个操作数自身与，值不变，可使进位标志CF＝0</span></p>
<p><span id="more-455"></span></p>
<p><strong>3. 或操作指令OR</strong></p>
<p><span style="color: #ff00ff">OR OPRD1 OPRD2</span></p>
<p>标志位同与运算指令</p>
<p><span style="color: rgb(255,0,0)">某个操作数自身或，值不变，可使进位标志CF＝0</span></p>
<p>&nbsp;</p>
<p><strong>4. 异或操作指令XOR</strong></p>
<p><span style="color: #ff00ff">XOR OPRD1 OPRD2</span></p>
<p>标志位同与运算指令</p>
<p><span style="color: rgb(255,0,0)">某个操作数自身异或，值不变，可使进位标志CF＝0</span></p>
<p>与0异或，不变，与1异或，取反。</p>
<p>&nbsp;</p>
<p><strong>5. 测试指令TEST</strong></p>
<p><span style="color: #ff00ff">TEST OPRD1 OPRD2</span></p>
<p>指令与AND类似，但结果不回送</p>
<p>指令执行后，ZF，PF，SF反映运算结果，CF＝OF＝0</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b06%ef%bc%9a%e9%80%bb%e8%be%91%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>汇编学习笔记[5]：乘除运算指令</title>
		<link>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b05%ef%bc%9a%e5%8a%a0%e5%87%8f%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/</link>
		<comments>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b05%ef%bc%9a%e5%8a%a0%e5%87%8f%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 04:39:13 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[汇编]]></category>
		<category><![CDATA[汇编学习笔记]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=450</guid>
		<description><![CDATA[&#160;

1. 乘法指令

在乘法指令中，一个操作数总是隐含在寄存器AL（8位）或AX（16位）中

<span class="readmore"><a href="http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b05%ef%bc%9a%e5%8a%a0%e5%87%8f%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/" title="汇编学习笔记[5]：乘除运算指令">Read More: 647 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><strong>1. 乘法指令</strong></p>
<p>在乘法指令中，一个操作数总是隐含在寄存器AL（8位）或AX（16位）中</p>
<p>另一个操作数可采用除立即寻址之外的任一寻址方式</p>
<p>（1）无符号数乘法指令MUL</p>
<p><span style="color: #ff00ff">MUL OPRD</span></p>
<p><span style="color: rgb(255,0,0)">两个8位数相乘得16位放在AX中，两个16位数相乘得32位，高位字放在DX，低位字存放AX中。</span></p>
<p>若乘积高半部分不等于0，则CF＝1，OF＝1，否则CF＝OF＝0</p>
<p>（2）有符号数乘法指令IMUL</p>
<p><span style="color: #ff00ff">IMUL OPRD</span></p>
<p>把乘数和被乘数均作为有符号数对待</p>
<p>操作与MUL类似</p>
<p>如果乘积的高半部分不是低半部分的符号扩展，则CF＝OF＝1，否则CF＝OF＝0</p>
<p><span id="more-450"></span></p>
<p><strong>2. 除法指令</strong></p>
<p>被除数总是隐含在AX（除数是8位）或DX和AX（除数是16位）中，寻址方式同乘法指令。</p>
<p>（1）无符号数除法指令DIV</p>
<p><span style="color: #ff00ff">DIV OPRD</span></p>
<p>16位： AX / OPRD（8位） ＝ AL（商） &#8230; AH（余数）</p>
<p>32位：DXAX / OPRD（16位） ＝ AX（商）&#8230; DX（余数）</p>
<p><span style="color: rgb(255,0,0)">若除数为0，或在8位数除时商超过8位，或16位时商超过16位，则认为是溢出，引起0号中断。</span></p>
<p>（2）有符号数除法指令IDIV</p>
<p><span style="color: #ff00ff">IDIV OPRD</span></p>
<p>把被除数和除数作为有符号数，操作与DIV类似</p>
<p><span style="color: rgb(255,0,0)">当除数为0，或商太大（(8位)&gt;127，(16位)&gt;32767），或商太小（(8位)&lt;-127，(16位)&lt;-32767），引起0号中断</span></p>
<p>&nbsp;</p>
<p><strong>3. 符号扩展指令</strong></p>
<p>不影响标志位</p>
<p>（1）字节转换为字指令CBW</p>
<p><span style="color: #ff00ff">CBW</span></p>
<p>把AL中的符号扩展到AH</p>
<p>AL&gt;0，则（AH）＝00H；若AL&gt;0，则（AH）＝FFH</p>
<p>（2）字转换为双字指令CWD</p>
<p><span style="color: #ff00ff">CWD</span></p>
<p>把AX中的符号到DX</p>
<p>类似CBW。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/%e6%b1%87%e7%bc%96/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b05%ef%bc%9a%e5%8a%a0%e5%87%8f%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
