没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论





格式:pdf 资源大小:326.0KB 页数:14


























【汇编语言开发文档】汇编语言:比较指令、
跳转指令、JCC 的使用
这篇文章主要介绍了汇编语言:比较指令、跳转指令、JCC 的使用,文中通过示
例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
的朋友们下面随着小编来一起学习学习吧。
一、JMP 指令:修改 EIP 当前运行的下一条指令
JMP 寄存器/立即数
目标类似: mov EIP,寄存器/立即数
CALL 指令: 调用函数 CALL 地址 A/寄存器
等价:
PUSH 地址 B ;保存 call 的下一条指令地址,压栈,作为返回
值,
MOV EIP,地址 A/寄存器 ; 将函数首地址作为 EIP
RET 指令:
等价:LEA ESP,[ESP+4] ; esp = esp + 4
MOV EIP,[ESP-4] ;和 CALL 相反,将 CALL 指令的下一条指
令地址赋值给 EIP;
二、比较指令
CMP R/M,R/M/IMM
该指令是比较两个操作数,实际上,它相当于 SUB 指令,但是相减的结果并不
保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数
相等的时候,零标志位置 1。
TEST 指令:指令格式:TEST R/M,R/M/IMM
该指令在一定程序上和 CMP 指令是类似的(类似 and),两个数值进行与
操作,结果不保存,但是会改变相应标志位.
常见用法:用这个指令,可以确定某寄存器是否等于 0。(观察 ZF)
三、JCC 指令 16 种跳转

JE, JZ
结果为零则跳转(相等时跳转)
ZF=1
JNE, JNZ
结果不为零则跳转(不相等时跳转)
ZF=0
JS
结果为负则跳转
SF=1
JNS
结果为非负则跳转
SF=0
JP, JPE
结果中 1 的个数为偶数则跳转
PF=1
JNP, JPO
结果中 1 的个数为偶数则跳转
PF=0
JO
结果溢出了则跳转
OF=1
JNO
结果没有溢出则跳转
OF=0
JB, JNAE
小于则跳转 (无符号数)
CF=1
JNB, JAE
大于等于则跳转 (无符号数)
CF=0
JBE, JNA
小于等于则跳转 (无符号数)
CF=1 or ZF=1
JNBE, JA
大于则跳转(无符号数)
CF=0 and ZF=0
JL, JNGE
小于则跳转 (有符号数)
SF≠ OF

比较指令之后,一般都会有分支判断。
根据标志位进行判断,下一步的分支。
四、思考
1、CALL 执行时堆栈有什么变化?EIP 有变化吗?
Call 执行时,保存了 cal 函数首地址到 EIP,同时将 Call 函数的首地址压栈;
2、RET 执行时堆栈有什么变化?EIP 有变化吗?
和 Call的过程相反,将前面 Call的下一条指令地址,从堆栈中取出来作为 EIP。
3、使用汇编指令修改标志寄存器中的某个位的值,实现 JCC 的十六种跳转.
不允许在 OD 中通过双击的形式修改标志寄存器.
要通过汇编指令的执行去影响标志位,能用 CMP 和 TEST 实现的优先考虑.
见上面的表格;
虽然 jmp 指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86 条件
跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句。
条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像
setcc 指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失
败,CPU 忽略该条件跳转指令而继续执行下一条指令。条件跳转指令有一个限制:
目标标号的位置必须在跳转指令本身附近 32768 字节范围内,这通常对应着
8000~32000 条机器指令。一般情况下不会超过这种限制。
用自己的话总结:条件跳转指令是指 jz,jg..等等指令,这些指令跳转方式是根据
标志位的状态进行跳转,而设置这些标志的常见指令为 cmp 和 test 指令,所以
他们经常搭配使用(应该是必须的)。即跳转指令前一行要吗有 cmp 指令要吗
有 test 指令。
汇编标志位:
JNL, JGE
大于等于则跳转 (有符号数)
SF=OF
JLE, JNG
小于等于则跳转 (有符号数)
ZF=1 or SF≠ OF
JNLE, JG
大于则跳转(有符号数)
ZF=0 and SF=OF

标志名 标志 1 标志 0
OF (溢出标志) OV NV
DF (方向标志) UP DN
IF (中断标志) DI EI
SF (符号标志位) PL NG
ZF (零标志) NZ ZR
AF (辅助进位标志位) NA AC
PF (奇偶标志) PO PE
CF (进位标志) NC CY
反汇编窗口,对应的标志位(双击后面的数字可改变其状态)
Test 和 cmp 指令的区别

test 属于逻辑运算指令
Test 对两个参数(目标,源)执行 AND 逻辑操作,并根据结果设置标志寄存器,结果
本身不会保存。
举例:
Test 的一个非常普遍的用法是用来测试一方寄存器是否为空:
test ecx, ecx
jz somewhere
如果 ecx 为零,设置 ZF 零标志为 1,Jz 跳转
--------------------------------------------
CMP 属于算术运算指令
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
cmp 实际上是只设置标志不保存结构的减法,并设置 Z-flag(零标志).
举例:
Cmp eax, 2; 如果 eax-2=0 即 eax=2 就设置零标志为 1
Jz ****; 如果设置了零标志就跳转
============================================
得出的结论
test 逻辑与运算结果为零,就把 ZF(零标志)置 1;
cmp 算术减法运算结果为零,就把 ZF(零标志)置 1.
指
令
描 述
条 件
别 名
相 反 指
令
JC
如果进位位被置位则跳转
进位标志=1
JB,JNAE
JNC
JNC
如果进位位没有置位则跳转
进位标志=0
JNB,JAE
JC
JZ
如果 0 标志被置位则跳转
0 标志=1
JE
JNZ
剩余52页未读,继续阅读
资源评论


青少年编程作品集
- 粉丝: 4808
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- [天津]框架结构厂房钢筋工程施工工艺.doc
- 第一篇宝石学基础第五、六章宝石的物理性质.doc
- 计算机专业的学习心得体会.doc
- 已改框架结构设计2.doc
- 河北苏中提高断桥铝合金窗保温层防渗施工一次合格率.doc
- 网络安全知识方案.docx
- 电大《机电控制及可编程序控制器技术》课程设计研究报告.doc
- 新项目启动会管理操作指引.doc
- 常用金属材料重量计算公式-造价必备知识.docx
- 总经理助理岗位职责.doc
- 某市污水处理管网工程顶管施工方案.doc
- 北京某会议中心挖土工程安全技术交底.doc
- 通信个人年终工作总结(五篇).docx
- 湘潭大剧院空调系统设计说明书.doc
- 陕西省西安市某办公楼的空调系统设计.pdf
- 合理利用网络-做文明上网高中生.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
