﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-小乌龟-随笔分类-Other Program</title><link>http://www.cppblog.com/xiaowugui/category/6507.html</link><description>没有什么不能承受的</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 06:50:05 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 06:50:05 GMT</pubDate><ttl>60</ttl><item><title>jmp指令用法总结</title><link>http://www.cppblog.com/xiaowugui/archive/2008/03/31/45851.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Mon, 31 Mar 2008 14:46:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2008/03/31/45851.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/45851.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2008/03/31/45851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/45851.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/45851.html</trackback:ping><description><![CDATA[<p>jmp指令用法总结：</p>
<p>1.直接用法(只能在Debug下使用的汇编指令):<br>jmp 段地址：偏移地址<br>功能：修改CS、IP的内容<br>例子：jmp 55BA:8<br>执行后：(CS)=55EAH, (IP)=0008H </p>
<p>2.根据标号进行转移的用法:<br>(1).转移的目的地址不在指令中，依据位移进行转移(段内转移)<br>&nbsp;a.jmp short 标号(IP的修改范围为-128至127)<br>&nbsp;功能：(IP)=(IP)+8位位移</p>
<p>&nbsp;b.jmp near ptr 标号(IP的修改范围为-32768至32767)<br>&nbsp;功能：(IP)=(IP)+16位位移</p>
<p>注：依据位移进行的转移是段内转移，位移=标号处的地址-jmp指令后的第一个字节的地址。</p>
<p>(2).转移的目的地址在指令中(段间转移)<br>jmp far ptr 标号<br>功能：用标号的段地址和偏移地址修改CS和IP<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (CS)=标号所在段的段地址;(IP)=标号所在段的偏移地址<br>例子：略<br>&nbsp; <br>3.转移地址在寄存器中的用法：<br>jmp 某一合法寄存器<br>功能：用寄存器中的值修改IP<br>例子：jmp ax<br>执行后：(IP)=(ax)<br>注意：合法寄存器是指通用寄存器。一个有趣的现象：jmp ip在debug下调试也是<br>错误的。字面上理解:(IP)=(IP)，但CPU并不支持</p>
<p>4.转移地址在内存中的用法：<br>(1).jmp word ptr 内存单元地址(段内转移)<br>功能：从内存单元地址出开始存放着一个字，是转移的目的偏移地址<br>例子：mov ax,0123H<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov [bx],ax<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp word ptr [bx]<br>执行后：(IP)=0123H</p>
<p>(2).jmp dword ptr 内存单元地址(段间转移)<br>功能：从内存单元地址处开始存放着两个字，高地址处的字是转移的目的段地址，低地址处是转移的目的偏移地址<br>例子：mov ax,0123H<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov [bx],ax<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov word ptr [bx+2],0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp dword ptr [bx]<br>执行后：(CS)=0, (IP)=0123H</p>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/45851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2008-03-31 22:46 <a href="http://www.cppblog.com/xiaowugui/archive/2008/03/31/45851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MOV和ADD指令用法总结</title><link>http://www.cppblog.com/xiaowugui/archive/2008/03/24/45318.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Mon, 24 Mar 2008 14:52:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2008/03/24/45318.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/45318.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2008/03/24/45318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/45318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/45318.html</trackback:ping><description><![CDATA[<p>mov指令非法情况：<br>1.两个操作数类型不一样<br>2.两个操作数不能都是存储器<br>3.段寄存器操作的一些限制<br>(1)段寄存器间不能传送<br>(2)立即数不能直接窜送给段寄存器<br>(3)修改CS的指令是jmp等转移指令<br></p>
<p>mov具体用法：</p>
<p>mov 寄存器，立即数</p>
<p>mov 寄存器，寄存器</p>
<p>mov 寄存器，内存单元<br>mov 内存单元，寄存器</p>
<p>mov 段寄存器，寄存器<br>mov 寄存器，段寄存器</p>
<p>mov 段寄存器，内存<br>mov 内存，段寄存器</p>
<p>mov word(byte) ptr 内存单元，立即数<br>注：以上寄存器都是指通用寄存器：ax,bx,cx,dx,sp,bp,si,di<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;立即数是存储在CPU的指令缓冲器中的<br></p>
<p>add指令用法： <br>add 寄存器，立即数</p>
<p>add 寄存器，寄存器</p>
<p>add 寄存器，内存单元<br>add 内存单元，寄存器</p>
<p>add word(byte) ptr 内存单元，立即数<br>注：add不支持任何段寄存器的操作。呵呵！以上总结都是基于8086CPU。<br></p>
<p>sub指令同add一样</p>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/45318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2008-03-24 22:52 <a href="http://www.cppblog.com/xiaowugui/archive/2008/03/24/45318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>