当前位置: 首页 > 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.wxhsa.cn/company.asp?id=5793

相关文章:

  • pip常用命令
  • 我的大学规划
  • 深入解析:numpy学习笔记
  • 理解 Linux 系统中的熵(Entropy)
  • Nginx auth_request 模块使用
  • 用nssm将minio和srs注册成服务
  • Mac上的Markdown学习
  • ubuntu 18.04安装mysql8.4.5
  • Radxa E20C 安装 OpenWrt
  • 第三篇:配置浏览器
  • 第二篇:playwright初步解析
  • 高性能计算-TensorCore-hgemm
  • 第一篇:Playwright-Python安装与调试
  • P13695 [CEOI 2025] theseus 题解
  • 《ESP32-S3使用指南—IDF版 V1.6》第三十八章 SPIFFS实验
  • 技术交流社区基础防诈指南
  • 神秘题
  • 技术群高级防骗指南
  • 集训游记
  • SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践
  • 2025/9/16 总结
  • Linux备份数据
  • np.argmax
  • TQ322数字PIR使用笔记
  • 使用Apache做web服务器时无法断点续传的怎么办?
  • Rust使用rbatis
  • 2025ICPC网络赛第一场(A,B,C,D,G,I,M)
  • Google Maps
  • 【TES600G】基于JFM7K325T FPGA+FT-M6678 DSP的全国产化信号处理平台
  • KMS激活Windows系统(win10)