当前位置: 首页 > news >正文

选择语句的机器级表示

无条件转移指令--jmp

格式:

jmp <地址> #pc无条件跳转到<地址>

<地址>可以由常数直接给出:jmp 5

<地址>可以来自于寄存器:jmp eax

<地址>可以来自于主存 :jmp [999]

<地址>可以用“标号”锚定:jmp NEXT

100 mov eax,7
104 mov ebx,6
108 jmp 116
112 mov ecx,ebx
116 mov ecx,eax

如果用以上的方法直接jmp,如果地址不再从100开始,而是从200开始,就会导致程序报错

因此我们设置一个锚点 NEXT:

 mov eax,7mov ebx,6jmp NEXTmov ecx,ebxNEXT:  #如果再汇编语言里看到这个冒号,名字是可以自己取的mov ecx,eax

条件转移指令

功能 汇编指令 解释
相等时跳转 je <地址> Jump when equal 当a==b时跳转
不相等时跳转 jne <地址> Jump when not equal 当a !=b时跳转
当大于时跳转 jg <地址> jump when greater than
当大于等于时跳转 jge <地址> jump when greater than or equal to
当小于时跳转 jl <地址> jump when less than
当小于等于时跳转 jle <地址> jump when less than or equal to

使用上面任意一条指令之前,一般都会先使用cmp指令

功能 汇编指令 解释
比较a和b当大小 cmp a,b Compare

先对比这两个值,如果【】那么进行跳转

if (a>b)
{c=a;
}
else{c=b;
}
mov eax,7 #把数字7放入寄存器
mov ebx,6
cmp eax,ebx #比较7和6的大小
jg NEXT #如果7大于6 那么转到next
mov ecx,ebx #否则把b的值赋给c
jmp END #立刻无条件结束,防止走到next
NEXT:
mov ecx,eax #当7大于6的时候 让把a的值赋给c
END:

cmp指令的底层原理

硬件视角:通过cmp指令 比较a和b,实际上是用a-b

相减的结果会记录在程序状态字寄存器中(PSW) 标志寄存器

PSW有几个比特位记录上次的运算结果,

进位/借位标志CF,最高位有进位/错位时CF=1

零标志ZF,运算结果为0时,ZF=1

符号标志SF,运算结果为负,SF=1

溢出标志OF,运算结果有溢出,OF=1

功能 汇编指令 解释 标识
相等时跳转 je <地址> Jump when equal 当a==b时跳转 zf==1
不相等时跳转 jne <地址> Jump when not equal 当a !=b时跳转 zf==0
当大于时跳转 jg <地址> jump when greater than zf==0&&sf==of
当大于等于时跳转 jge <地址> jump when greater than or equal to sf==of
当小于时跳转 jl <地址> jump when less than sf!=of
当小于等于时跳转 jle <地址> jump when less than or equal to Sf!=of||zf==1
http://www.rkmt.cn/news/6105.html

相关文章:

  • 深入解析:numpy学习笔记
  • Nginx auth_request 模块使用
  • Mac上的Markdown学习
  • 第二篇:playwright初步解析
  • 技术交流社区基础防诈指南
  • 技术群高级防骗指南
  • 集训游记
  • TQ322数字PIR使用笔记
  • 使用Apache做web服务器时无法断点续传的怎么办?
  • 基于python3的http文件服务器
  • sql server2008大批量插入数据
  • HCIP—Eth-Trunk
  • 一个还不错的,简单的,前端vue2后台框架
  • 2025暑假集训总结lh
  • ET框架的 阻止 ddos 设计,软路由
  • cURL调试功能磁盘空间耗尽导致拒绝服务漏洞分析
  • mysql常用函数,数据处理效率提升实战指南
  • Mysql索引失效场景
  • 农田水利综合信息管理平台
  • 【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!
  • 2D变换——坐标系
  • P13693 [CEOI 2025] Equal Mex 题解
  • 力扣46题 全排列
  • 达成调用libchdb.a静态连接库中的未公开导出函数
  • Redis常用命令
  • .NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
  • 事件轮循机制EventLoop
  • 大模型与知识图谱驱动测试公开课
  • 上位机项目展示
  • 美化自己的Github主页-Github profile页面仓库使用指南