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相关推荐

  1. 汇编——操作符和常用指令

    操作符 操作符分为四大类,算数操作符.关系操作符.数值回送操作符和属性操作符. 算数操作符 加减乘除和求模,这个就不说了. 注:这里指的是[sp+8]这样的加法,而不是我们的add指令. 关系运算符 ...

  2. cmd指令大全指令_汇编语言常用指令大全

    MOV 指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器 ...

  3. VUE指令篇_不常用指令

    标题没错,就是几个不常用指令,T_T,先来说一下什么是指令,vue的指令是指以 v- 为前缀,具有特殊含义.拥有特殊功能的特性,可以直接使用data中的数据 1.v-pre v-pre的作用是跳过这个 ...

  4. cmp 字节 汇编_汇编 – x86 CMP指令差异

    题 以下两个x86指令之间的(非平凡)差异是什么? 39 /r CMP r/m32,r32 Compare r32 with r/m32 3B /r CMP r32,r/m32 Compare r/m ...

  5. ARM汇编寄存器和常用指令详解

    文章目录 AAPCS关于ARM寄存器的定义 寄存器 R0~R12 通用寄存器 R13-SP(Stack Pointer) 栈寄存器 R14-LR(Link Register) 链接寄存器 R15-PC ...

  6. 汇编语言的C状态寄存器,汇编指令-状态寄存器、cmp、test、jz等指令详细说明

    一.状态寄存器 首先看看:状态寄存器(即标志寄存器) PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成, 如下所示 ...

  7. 汇编指令 - 状态寄存器、cmp、test、jz等指令

    一.状态寄存器 首先看看:状态寄存器(即标志寄存器) PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成, 如下所示 ...

  8. java字节码和汇编指令_汇编代码和字节码有什么区别?

    在寻找源代码,字节码,汇编代码,机器代码,编译器,链接器,解释器,汇编器以及所有其他含义之间的各种差异时,我仅对字节码和汇编代码之间的差异感到困惑. 特别是,这篇维基百科文章中描述CIL的介绍使我感到 ...

  9. 汇编指令-CMP、TEQ

    cmp:(compare)指令进行比较两个操作数的大小   格式: cmp oprd1,oprd2   比较oprd1和oprd2操作数,然后通过助记符来实现想要的判断. teq: (test equ ...

最新文章

  1. AI一分钟 | 豪华太空酒店预计2022年前开业;彭蕾卸任蚂蚁金服董事长,井贤栋接任;京东推出一秒能写千条文案的AI系统
  2. PHPCMS V9 采集实例
  3. SAP UI5 应用开发教程之十五 - 对话框和 Fragments 的使用方式
  4. python缺少标准库_Python 实现自动导入缺失的库
  5. mysql innodb的索引基本入门
  6. mysql8.0.20安装教程linux_Linux下安装mysql-8.0.20的教程详解
  7. iOS9 App Thinning(应用瘦身)功能介绍 1
  8. 乔布斯的简历120万被拍卖,HR看了想打人……
  9. mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解
  10. MultiCD: 构建多重引导 CD 映像
  11. 论文阅读-VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
  12. c 语言中字符串中r,R语言字符串管家--stringr包案例解析
  13. 066-PHP通过函数名调用函数
  14. Oracle学习之建表
  15. 计算机学校用的哪种ps,经常用ps用什么配置电脑
  16. Wine 专区上线!PS 等榜单前 6 都在这
  17. Android记录20-获取缓存大小和清除缓存功能
  18. Jetson Nano Micro SD卡 备份 + 烧录
  19. Stream.count
  20. 2021 年教师资格证科目二教育知识与能力 简答题

热门文章

  1. Java 中字符串转整型和整型转字符串
  2. 微软我的世界1.6服务器,我的世界1.7.2服务器微软
  3. 还有人没尝过 Pinia 吗,请收下这份食用指南!
  4. 新闻报道类摄影如何处理人物肖像权? | 拍者手记
  5. 软件测试OA办公自动化系统测试方案
  6. 速卖通适合新卖家吗?速卖通平台有哪些优势
  7. 1024程序员节|去他的人傻钱多,码农的柔情,你永远不懂!
  8. Typora更改字体
  9. 公益联动|将爱传递 爱心义卖助力乡村孩子实现阅读梦
  10. 敷面膜的时候肌肤出现刺痛感,我过敏了吗?