汇编总结-第二部分_2_数据处理

本文介绍了X86汇编中的数据处理,包括跳转指令的分类和使用,如短跳转、近跳转和远跳转。讲解了循环指令LOOP与ECX寄存器的关系,以及浮点数处理中FPU寄存器的运用和精度问题。此外,还阐述了FPU的状态和控制寄存器操作,以及字符串处理指令如MOVSB、MOVSW和MOVSL的使用,通过REP前缀实现重复操作。最后提到了条件重复指令和CMPS命令。
摘要由CSDN通过智能技术生成

关于流程控制的太过简单,所以就在这里简单介绍一下。后面写数据处理。

 

汇编之中想要转变位置只能使用类似C语言中goto的模式,也就是跳转指令

跳转指令分为下面3类。

·短跳转 偏移量128字节之内的跳转。

·近跳转 所有其余跳转

·远跳转 按段来跳转(可以清空流水线)

 

实际上偏移量128字节就说明了其控制偏移大小的是一个8位二进制所表示的范围。

C语言中的switch最多也只支持256个跳转,我估计可能和这类指令有关。

 

至于怎么跳转,一般的跳转,类似goto直接用jmp+标签跳转。

对于函数直接  call+地址标签就行了。Call和ret指令配合使用可以隐式操作栈(只保存关于寄存器的值)。

并且跳转改变EIP的值,也就是组成原理中的PC寄存器。

 

下面是循环。

LOOP命令。

其实循环所用的寄存器是ecx。用来控制循环的次数。每循环一次,自动递减一。

并且loop也是短跳转.只支持8位二进制的偏移量。

 

 

下面主要就是说明数据的部分了。

但整数部分没什么好说的。所以就只介绍浮点数相关的内容了。

 

之前介绍的寄存器都是通用的整数格式的寄存器。所以对于浮点数这种包含两个整数部分的数来说,就不太合适了。X86一共有8个浮点寄存器FPU。他们的大小都是80位的。

所以对于C语言中的浮点数运算来说,似乎都会有精度的丢失。我想这也是为什么对于浮点数要用相减判断差值小于多少来判断浮点数是否相等了。因为可能一部分运算在FPU中,一部分可能取出来计算存到通用寄存器之中了。那么存储在通用寄存器中的精度损失就很大了。

 

然后需要说明的就是FPU的结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值