三刺激值计算公式_深入理解计算机系统之程序的机器级表示(三)

0b5591e79bd0d44e5a671ae0ac7a04d9.png

访问信息

熟识汇编的朋友一定知道,CPU指令是通过寄存器和存储器交互来完成的。

IA32 CPU包含一组存储32位值的寄存器。%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。如图所示。

525695f429c27fcff8951957aaea9b1f.png

这些寄存器用来存储整数数据和指针。

大多数情况下,前6个寄存器都可以看成通用寄存器。对他们的使用没有限制。另外对前3个寄存器(%eax,%ecx,%edx)的保存和恢复惯例不同于接下来的三个寄存器(%ebx,%edi和%esi)。最后两个寄存器(%ebp和%esp)保存着指向程序栈中重要位置的指针。只有根据栈管理的标准惯例才能修改这两个寄存器中的值。

如上图所示,字节操作可以独立的读或者写前4个寄存器的2个低位字节。类似的,字操作指令可以读或者写每个寄存器的低16位。

操作数指示符

大多数指令都有一个或多个操作数,指示出执行一个操作中要引用的源数据值以及放置结果的目标位置。IA32支持多种操作数格式。主要可分为三类。一 立即数。也就是常数值。用“$”后面跟标准c表示的整数。二 寄存器。表示某个寄存器的内容。三 存储器。根据计算的地址访问某个存储器位置。

f3ecf2bbab33d11d306bc99ee7fdf06f.png

如图所示,有多种不同的寻址模式。允许不同形式的存储器引用。Imm(Eb,Ei,s)其由4部分组成。立即数偏移Imm,一个基地址寄存器Eb,一个变址寄存器Ei和一个比例因子s。s可为1,2,4,8。有效地址的计算公式为Imm+R[Eb]+R[Ei].s。

数据传送指令

将数据从一个位置复制到另一个位置的指令是最频繁使用的指令。

3b67a2afcfe08ed3f7fde1bc40546a6d.png

mov类中的指令将源操作数的值复制到目的操作数中。源操作指定的值是一个立即数,存储在寄存器中或者存储器中。目的操作数指定一个位置要么是一个寄存器,要么是一个存储器地址。IA32加了一条限制,传送指令的两个操作数不能都指向存储器位置。

movs,movz指令都是将一个较小的源数据复制到较大的数据位置。高位用符号扩展或者零扩展进行填充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值