程序的机器级表示一(数据访问和操作指令)

目录

 

一、程序执行 

 二、数据类型

1.IA32支持的数据类型和格式:

2.IA32的寄存器组织:

3.计算机中的算盘就是加法器:

三、访问信息 

1.寻址方式:

2.操作指令


一、程序执行 

  • 条件码是CPU根据运算结果由硬件设置的位,体现当前指令执行结果的各种状态信息,是程序分支和程序循环的依据 

 

 反汇编:

  • objdump -d code.o
  • gdb p     disassemble sum     x/11xb sum 查看从sum函数地址开始的11个字节

 二、数据类型

1.IA32支持的数据类型和格式:

  • long double实际长度为80位,但分配96位=12B(按4B对齐) 

基本操作:

  • 运算类指令:对寄存器或内存数据操作
  • 传送类指令:数据:寄存器<=>内存
  • 控制类指令:分支/循环,有/无条件跳转

2.IA32的寄存器组织:

 

 6个条件标志

– OF、SF、ZF、CF各是什么标志(条件码)?   溢出、符号、零、进位/借位

– AF:辅助进位标志(BCD码运算时才有意义)

– PF:奇偶标志
 
3个控制标志
 
– DF(Direction Flag):方向标志(自动变址方向是增还是减)
 
– IF(Interrupt Flag):中断允许标志 (仅对外部可屏蔽中断有用)
 
– TF(Trap Flag):陷阱标志(是否是单步跟踪状态)

 

3.计算机中的算盘就是加法器:

重要认识1:计算机中所有运算都基于加法器实现!

重要认识2:加法器不知道所运算的是带 符号数还是无符号数。

重要认识3:加法器不判定对错,总是取低n位作为结果,并生成标志信息。
 

 

三、访问信息 

1.寻址方式:

操作数类型:①立即数$0x400 ②寄存器 %eax ③内存地址(%eax)

类型:

lea 寻址:
leal (%eax,%eax,2), %eax       t \leftarrow x+x*2
 
 

2.操作指令

数据传送指令

操作数:第一个是源,第二个是目的。

IA32的限制:

  • 传送指令两个操作数不能同时指向存储器位置
  • 将一个值从存储器一个位置复制到另一个位置:①源值加载到寄存器 ②寄存器写入目的位置

算术逻辑指令:

①加载有效地址:lea

 

  • 可以为后面的存储器引用产生指针,将有效地址写人到目的操作数。
  • 以简洁地描述普通的算术操作.

②一元操作和二元操作

  • 一元:既是源又是目的,可以是一 个寄存器,也可以是一个存储器位置
  •  二元:第二个操作数既是源又是目的。第一个操作数可以是立即数、寄存器或是存储器位置。第二个操作数可以是寄存器或是存储器位置。两个操作数不能同时是存储器位置

③移位操作

  • 移位量+要移位的数
  • 移位量可以是一个立即数,或者放在单字节寄存器元素 %cl
  • SAR算术右移 SHR逻辑右移(补前置0)

④特殊的算术操作

  •  imull 指令称为“双操作数”乘法指令,可以用于两个不同的乘法操作。
  • 无符号数乘法 (mull), 补码乘法(imull) 。这两条指令都要求一个参数必须在寄存器%eax 中,而另一个作为指令的源操作数给 出
  • 乘积存放在寄存器%edx (高 32 位)和%eax (低 32 位)中。
  •  idivl 有符号除法指令将寄存器 %edx (高 32 位)和 %eax (低32 位)中的 64 位数作为被除数,而除数作为指令的操作数给出。指令将商存储在寄存器 %eax 中,将余数存储在寄存器 %edx 中。
  • cltd 指令将 %eax 符号扩展到 %edx

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值