cmp 字节 汇编_汇编 常用指令 cmp jmp call ret
cmp 指令
功能相当于减法指令 只是不保存结果
不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果
CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 无符号)
无符号的 cmp
指令 cmp ax,bx 执行后
即(ax - bx 执行)
1 zf=1 ax 等于 bx 结果为0
2 zf=0 ax 不等于 bx 结果不为0
3 cf=1 ax 小于 bx 有借位
4 cf=0 ax 大于等于 bx 木有借位
5 cf=0且zf=0 ax 大于 bx 木有借位 并且结果不为0
6 cf=1或zf=1 ax 小于等于 bx 有借位则小 结果为0则等
有符号的 cmp
我们必须在查看sf(得知实际结果的正负)的同时还要查看of(得知有木有溢出)
就可以得知逻辑上真正结果的正负了 同时也可以知道比较的结果
指令 cmp ah,bh 执行后
即(ah - bh 执行)
相等不相等 直接看zf 与无符号的运算一样。。
1 sf=1 of=0 木有溢出 结果为负 实际结果=逻辑真正结果 所以 ah
2 sf=1 of=1 有溢出 溢出导致实际结果为负 则逻辑真正结果必然为正 ah>bh
3 sf=0 of=1 有溢出 溢出导致实际结果为正 则逻辑真正结果必然为负 ah
4 sf=0 of=0 木有溢出 结果为正 实际结果=逻辑真正结果 所以 ah>bh
jmp指令
无条件转移的指令 可以值修改ip 也可以同时修改 cs 和ip
jmp 指令一般要给出两点信息
1 转移的目的地址
2 转移的距离(段间转移 段内短转移 段内近转移)
根据位移转移的时候 如果越界了 汇编编译器会报错
位移转移的意义: 方便程序段在内存中的浮动装配
1 根据位移进行转移的jmp指令
jmp short 标号(转到标号处执行指令)
实现的是 :段内短转移 ip修改范围(-128-127)
功能: 实现 ip=ip+8位位移(标号处-jmp指令后的第一个字节的地址)
注释 short 就是说 8位位移
jmp near 标号(段内近转移) 与 段内短转移 原理一样
不过是 16 位位移 ip=ip+16位位移
2 转移目的地址在标号中的jmp指令
jmp far ptr 标号 :实现的是 段间远转移
功能: cs=标号所在的段的段地址
ip=标号在段中的偏移地址
3 转移地址在寄存器中的jmp指令
jmp 16位reg
功能 ip=(16位reg) 汇编解释:mov ip,寄存器中的值
而jmp word ptr [bx]是 跳到 (将bx的中值作为偏移地址) 的地方
4 转移地址在内存中的jmp指令 (有两种格式)
1 jmp word ptr 内存单元地址(段内转移)
功能 : 内存单元中存放着一个字 是转移的目的偏移地址
内存单元地址 可以是 任意一种寻址方式给出
2 jmp dword ptr 内存单元地址(段间转移)
功能 从内存单元中开始存放着两个字
高地址[bx+2]的字是 目的 cs
低地址[bx] 的字是 目的 ip
5 所有的条件转移指令都是短转移 (jmp信息是 位移,不是目的地址)
(jcxz,je,jne,ja,jna,jb,jnb等等)
jcxz 标号
相当于 if((cx)==0) jmp short 标号;
je,jne,ja,jna,jb,jnb 是根据flag寄存器的某些标志位进行判断的
紧挨他们前边的指令不一定去影响标志位
他们只根据当前的 标志位 去判断
cmp ax,bx
je 标号 ;相不相等 判断zf
6 所有的循环指令都是短转移(jmp信息是 位移,不是目的地址)
loop 标号
loop指令实现
解释 (cx)--
if((cx)!=0) jmp short 标号;
call ret 都是转移指令
都是修改ip 或 同时修改cs和ip
ret 指令 用栈中的数据 修改 ip 的内容 实现近转移
相当于 pop ip
retf指令 用栈中的数据 修改cs和ip的内容 实现远转移
相当于 pop ip pop cs
ret;可能是近返回,也可能是远返回
retn ;近返回指令
在近类型的子程序中,返回指令RET是近返回,其功能是把栈顶之值弹出到指令指针寄存器IP中,SP会被加2
retf ;远返回指令
在远类型的子程序中,返回指令RET是远返回,其功能是:先弹出栈顶之值到IP中,再弹出栈顶之值到CS之中,SP总共会被加4
ret 6;子程序返回后,(SP)←(SP) + 6
如果返回指令后面带有立即数(其值通常为偶数),则表示在得到返回地址之后,SP还要增加的偏移量,它不是类似于高级语言中子程序的返回值
call指令 (不能实现短转移 其他转移和jmp指令是一样的)
cpu在执行call时 进行两步操作
1 将当前ip和cs压入栈中
2 转移
call指令的几种形式 (详见jmp指令)
1 call 标号
相当于
push ip
jmp near ptr标号
2 call far ptr 标号
相当于
push cs
push ip
jmp far ptr 标号
3 call 16位寄存器
相当于
push ip
jmp 16位寄存器
4 call word ptr 内存单元地址
相当于
push ip
jmp word ptr 内存单元地址
5 call dword ptr 内存单元地址
相当于
push cs
push ip
jmp dword ptr 内存单元地址
call 与 ret 实现子程序的机制
子程序的框架
assume cs:code
code segment
main:
:
call sub1 ;调用子程序sub1
:
:
mov ax,4c00h
int 21h
sub1:
: ;子程序sub1的开始
:
call sub2 ;调用子程序sub2
:
:
ret ;子程序返回
sub2:
: ;子程序sub2的开始
:
ret ;子程序返回
code ends
end main
未完待续。。。
cmp 字节 汇编_汇编 常用指令 cmp jmp call ret相关推荐
- 汇编——操作符和常用指令
操作符 操作符分为四大类,算数操作符.关系操作符.数值回送操作符和属性操作符. 算数操作符 加减乘除和求模,这个就不说了. 注:这里指的是[sp+8]这样的加法,而不是我们的add指令. 关系运算符 ...
- cmd指令大全指令_汇编语言常用指令大全
MOV 指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器 ...
- VUE指令篇_不常用指令
标题没错,就是几个不常用指令,T_T,先来说一下什么是指令,vue的指令是指以 v- 为前缀,具有特殊含义.拥有特殊功能的特性,可以直接使用data中的数据 1.v-pre v-pre的作用是跳过这个 ...
- cmp 字节 汇编_汇编 – x86 CMP指令差异
题 以下两个x86指令之间的(非平凡)差异是什么? 39 /r CMP r/m32,r32 Compare r32 with r/m32 3B /r CMP r32,r/m32 Compare r/m ...
- ARM汇编寄存器和常用指令详解
文章目录 AAPCS关于ARM寄存器的定义 寄存器 R0~R12 通用寄存器 R13-SP(Stack Pointer) 栈寄存器 R14-LR(Link Register) 链接寄存器 R15-PC ...
- 汇编语言的C状态寄存器,汇编指令-状态寄存器、cmp、test、jz等指令详细说明
一.状态寄存器 首先看看:状态寄存器(即标志寄存器) PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成, 如下所示 ...
- 汇编指令 - 状态寄存器、cmp、test、jz等指令
一.状态寄存器 首先看看:状态寄存器(即标志寄存器) PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成, 如下所示 ...
- java字节码和汇编指令_汇编代码和字节码有什么区别?
在寻找源代码,字节码,汇编代码,机器代码,编译器,链接器,解释器,汇编器以及所有其他含义之间的各种差异时,我仅对字节码和汇编代码之间的差异感到困惑. 特别是,这篇维基百科文章中描述CIL的介绍使我感到 ...
- 汇编指令-CMP、TEQ
cmp:(compare)指令进行比较两个操作数的大小 格式: cmp oprd1,oprd2 比较oprd1和oprd2操作数,然后通过助记符来实现想要的判断. teq: (test equ ...
最新文章
- AI一分钟 | 豪华太空酒店预计2022年前开业;彭蕾卸任蚂蚁金服董事长,井贤栋接任;京东推出一秒能写千条文案的AI系统
- PHPCMS V9 采集实例
- SAP UI5 应用开发教程之十五 - 对话框和 Fragments 的使用方式
- python缺少标准库_Python 实现自动导入缺失的库
- mysql innodb的索引基本入门
- mysql8.0.20安装教程linux_Linux下安装mysql-8.0.20的教程详解
- iOS9 App Thinning(应用瘦身)功能介绍 1
- 乔布斯的简历120万被拍卖,HR看了想打人……
- mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解
- MultiCD: 构建多重引导 CD 映像
- 论文阅读-VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
- c 语言中字符串中r,R语言字符串管家--stringr包案例解析
- 066-PHP通过函数名调用函数
- Oracle学习之建表
- 计算机学校用的哪种ps,经常用ps用什么配置电脑
- Wine 专区上线!PS 等榜单前 6 都在这
- Android记录20-获取缓存大小和清除缓存功能
- Jetson Nano Micro SD卡 备份 + 烧录
- Stream.count
- 2021 年教师资格证科目二教育知识与能力 简答题