3.汇编中的标志位

这周主要学习的是转移指令的相关知识和原理。

  1. offset在和汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。
  2. jmp是无条件转移指令,可以只修改IP,也可以同时修改CS和IP。
  3. CPU在执行jmp指令的时候不需要转移的目的地址,机器码中包含的的是转移的位移。
  4. Ret指令用栈中的数据,修改IP的内容,从而实现近转移。

Ret=POP  IP

Retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。

Retf=POP IP     POP CS

 

  1. CPU执行call指令时,进行两步操作:
  2. 将当前的IP或CS和IP压入栈中(call下一个指令的IP)
  3. 转移

 

  1. mul乘法指令:

(1)两个相乘的数要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认在AX 中,另一个放在16位reg或内存字单元中。

(2 )结果:如果是8位乘法,结果默认放在AAX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放。

 

  1. 几个重要的标志寄存器

ZF   零标志位      如果结果为0,那么zf=1;如果结果不为0,那么zf=0

PF   奇偶标志位    如果1的个数为偶数,pf=1;如果为奇数,那么pf=0

SF   符号标志位    如果结果为负,sf=1;如果非负,sf=0

CF   进位标志位    在进行无符号运算的时候,它记录向更高有效位的进位  

OF   溢出标志位    在进行有符号运算的时候,超过机器所能表示的范围称为溢出

DF   方向标志位    在串处理指令中,控制每次操作后si、di的增减

 

  1. adc是带进位加法指令(adc  ax,bx 实现的功能是ax=ax+bx+cf)

sbb是带借位减法指令(sbb  ax,bx 实现的功能是ax=ax-bx-cf )

 

  1. cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果,仅仅根据计算结果对标志寄存器进行设置。

指令cmp  ax,bx的逻辑含义是比较ax和bx中的值,如果执行后:

zf=1,说明ax=bx

zf=0,说明ax≠bx

cf=1,说明ax<bx

cf=0,说明ax≥bx

cf=0并且zf=0,说明ax>bx

cf=1或zf=1,说明ax≤bx

 

  1. 检测比较结果后的条件转移指令

指令                含义           检测的相关标志位

jcxz                短转移               cx=0

je                等于则转移             zf=1

jne             不等于则转移             zf=0

jb                 低于则转移            cf=1

jnb            不低于则转移           cf=0

ja             高于则转移             cf=0且zf=0

jna            不高于则转移           cf=1或zf=1

 

         

 

 

时间: 2024-10-13 20:42:43

3.汇编中的标志位的相关文章

汇编--常用汇编指令与标志位关系

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

TCP协议中的标志位

TCP/IP协议通常放在一起来说,但是它们是两个不同的协议,所起的作用也不一样. IP协议是用来查找地址的,对应于网际互联层. TCP协议是用来规范传输规则的,对应着传输层. IP协议只负责找到地址,具体传输的工作交给TCP来完成. TCP在传输之前会进行三次沟通,一般称为“三握手”:传输数据断开的时候需要进行四次沟通,一般称为“四挥手”. 要理解这个过程首先需要理解TCP中的两个序号和三个标志位的含义: seq:sequence number的缩写,表示所传数据的序号.TCP传输时每一个字节都

汇编 影响标志位的运算

今天翘了毛概课,在宿舍里盖着小毛毯做汇编作业,遇到一个题目是给出一组指令,问每一步指令完成后,标志位是什么 什么运算会改变标志位呢?在网上查了查 (1)加法指令:ADD.ADC.INC.XADD除了INC不影响CF标志位外,都影响条件标志位. CF.ZF.SF.OF CF最高位是否有进位 DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0. (2)减法指令:SUB.SBB.DEC.NEG.CMP.CMPXCHG.CMPXCHG8B 前六种除了DEC不影响CF标志外都影响标志位.CM

汇编-寄存器数据的存储与变化-算术运算对标志位的影响

实验3:寄存器数据的存储与变化-算术运算对标志位的影响 1.项目设计 将操作数放在2000H和2001H两个单元中,编程进行以下的算术运算 ,并记录标志位的状态. (1)41H+3BH,结果放在2002H单元中; (2)41H+5AH,结果放在2003H单元中; (3)AFH+7EH,结果放在2004H单元中; (4)E3H+1DH,结果放在2005H单元中; (5)41H-3BH,结果放在2006H单元中: (6)3BH-41H,结果放在2007H单元中: 2.项目实施 (1)写出指令代码段,

常用汇编指令及其影响的标志位

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

16位汇编中的伪指令

汇编中的伪指令(基于汇编编译器MASM讲解) 一丶什么是伪指令,以及作用 首先我们用汇编开发效率低,如何才能开发效率高,甚至开发速度比C语言或这个高级语言快 答案: 伪指令 什么是伪指令 伪指令是汇编编译器提供的,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写,那么这些汇编编译器则会自动帮我们补全 比如昨天的代码: ;调用开始,把参数压栈 m

汇编标志位简介

标志(Flag)用于反映指令执行结果或控制指令执行形式,是汇编语言程序设计中必须特别注意的一个方面.许多指令执行之后将影响有关的标志位,同时不少指令的执行要利用某些标志.因此我们在学习使用汇编语言的过程中必须了解标志位. 一.状态标志 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位.如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0. 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位

64位汇编第二讲——64位汇编中局部变量使用及抬栈方法29171230

一.纯写64位汇编时局部变量处理和参数寄存器保存位置 纯写64位汇编和用VS2013写64位C代码生成的汇编会有一些格式上的区别,VS2013写64位C代码生成的汇编中是没用到栈基址寄存器rbp的,但是纯写汇编时只要申明了参数和使用了@LOCAL定义的局部变量,就会用到rbp.且看如下例子:1)用C写64位程序空函数生成的汇编代码, ;C代码 void FunTest2() { } ;汇编代码 000000013F753290 40 57 push rdi 000000013F753292 5F

在模块中如何去写输出标志位的程序

在给标志信号命名时,标志位命名为...._sig表示,,比如shift_done_sig 表示...的标志位在程序中怎么写输出标志位 两种方法: 1.先不带标志位仿真,判断输入到输出需要几个时钟   然后如果立刻输出的话那就只能延长输出时间去空出一段时间给标志位电平变化的时间,通过寄存器在时序模块中不断使用非阻塞赋值来延时.在延时的这段时间标志位可以赋值为低,最后输出数据的那个时钟赋值为高,这样就产生了标志位高低电平变换,可给后面的模块拿来判断前一个模块是否完成输出. 2.还有一种方法 如果状态