-
Notifications
You must be signed in to change notification settings - Fork 25
/
ch18s02.html
3 lines (3 loc) · 3.66 KB
/
ch18s02.html
1
2
3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>2. x86的寄存器</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch18.html" title="第 18 章 x86汇编程序基础" /><link rel="prev" href="ch18s01.html" title="1. 最简单的汇编程序" /><link rel="next" href="ch18s03.html" title="3. 第二个汇编程序" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. x86的寄存器</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch18s01.html">上一页</a> </td><th width="60%" align="center">第 18 章 x86汇编程序基础</th><td width="20%" align="right"> <a accesskey="n" href="ch18s03.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2769794"></a>2. x86的寄存器</h2></div></div></div><p>x86的通用寄存器有<code class="literal">eax</code>、<code class="literal">ebx</code>、<code class="literal">ecx</code>、<code class="literal">edx</code>、<code class="literal">edi</code>、<code class="literal">esi</code>。这些寄存器在大多数指令中是可以任意选用的,比如<code class="literal">movl</code>指令可以把一个立即数传送到<code class="literal">eax</code>中,也可传送到<code class="literal">ebx</code>中。但也有一些指令规定只能用其中某个寄存器做某种用途,例如除法指令<code class="literal">idivl</code>要求被除数在<code class="literal">eax</code>寄存器中,<code class="literal">edx</code>寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在<code class="literal">eax</code>寄存器中(覆盖原来的被除数),余数保存在<code class="literal">edx</code>寄存器中。也就是说,通用寄存器对于某些特殊指令来说也不是通用的。</p><p>x86的特殊寄存器有<code class="literal">ebp</code>、<code class="literal">esp</code>、<code class="literal">eip</code>、<code class="literal">eflags</code>。<code class="literal">eip</code>是程序计数器,<code class="literal">eflags</code>保存着计算过程中产生的标志位,其中包括<a class="xref" href="ch14s03.html#number.addminus">第 3 节 “整数的加减运算”</a>讲过的进位标志、溢出标志、零标志和负数标志,在intel的手册中这几个标志位分别称为CF、OF、ZF、SF。<code class="literal">ebp</code>和<code class="literal">esp</code>用于维护函数调用的栈帧,在<a class="xref" href="ch19s01.html#asmc.funccall">第 1 节 “函数调用”</a>详细讨论。</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch18s01.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch18.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch18s03.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">1. 最简单的汇编程序 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 3. 第二个汇编程序</td></tr></table></div></body></html>