首页 > 编程知识 正文

汇编符号标志,某机器字长16位,主存按字节编址

时间:2023-05-06 04:21:24 阅读:120282 作者:3071

第十一章标志寄存器8086CPU的标志寄存器为16位,其中存储的信息一般称为程序状态字(PSW:program status word )

本章的标志寄存器(以下简称flag )是我们学习的最重要的寄存器

flag寄存器按位发挥作用。 也就是说,每个位都有记录特定信息的特殊含义

8086CPU标志寄存器配置:

1.flag的1、3、4、12、13、14和15位合计7位未在8086CPU中使用,没有任何意义

另一方面,0、2、4、6、7、8、9、10、11的位都具有特殊的意义

2 .形象

11.1 ZF标志1.flag的第6位是ZF,零标志位。 zero flag在执行相关命令后,1 .结果为0,ZF=1 2 .结果不是0,ZF=02 .例如: mov ax、1 sub ax,如果执行1个命令后结果为0,则ZF=1 mov ax、2 sub ax 例如add、sub、mul、div、inc、or、and等。 他们大多是运算命令(逻辑运算或算术运算)。 某个指令的执行不影响标志寄存器。 例如,mov、push、pop等。 它们中许多人已经执行奇偶校验比特parity (平等意义) flag (其传送指令11.2 PF标志flag的第二个比特是PF )其记录指令之后,结果的所有二进制比特中1的个数为1 .偶数,PF=1 2)2.为奇数,PF

sf=1 2.结果为正,sf=0 sf标志为CPU的码数运算结果的记录,记录数据正负的sf标志以所有数为码数,但如果数据为无码数,则sf的值没有意义。 相关指令会影响其值,但3 .也就是说,如果CPU在执行add等指令时必须始终影响sf标志位的值,请假设指令执行的运算11.4 CF标志1.flag的第0位是CF。 进位标志位通常在进行无符号数运算时,记录从运算结果的最高位到jxdl的进位值。 或者,表示虚拟的更jxdl2.CPU不会从更jxdl的借位值中在运算时放弃进位值。 有特殊寄存器的位中记录的8086CPU使用flag的cf记录该进位值。 借位也一样。 (减法时)调试中的显示NC:no carry (无进位)、CY:carry yes (无符号时产生的结果11.5 OF标志flag的第11位(OV:overflow中有溢出)、NV )被编码这里的溢出,只是要注意2.cf和of的区别。 需要将机器码视为有符号的数时使用of。 需要将机器码视为无符号数时使用cf。 98~99为无符号数,cf=0为有符号数,98~99溢出。 of=1 11.6 adc标志adc是带进位的加法指令。 由cf中记录进位值1 .格式: adc操作对象1、操作对象22 .功能:操作对象1=操作对象1操作对象2 cf、例如adc ax、bx实现的功能是(ax () ) 如果cf是由sub指令设置的,则其他含义是如果借位值是由add指令设置的,则该含义是进位值5。 以下指令具有与add ax、bx相同的结果add al、bl adc ah、bh CPU提供adc指令的目的。 通过组合进行加法运算的第2阶段运算的adc命令和add命令,可以添加更大的数据【实验:编程计算1EF000H 201000H,结果为ax (高位16位)和bx (低位16位)】mov ax, jxdl和jxdl相加并存储在ax中,最后的cf 11.7 sbb标志sbb是一个借位减法命令,cf位记录的借位值1 .格式: sbb操作对象1,操作对象22 .功能:操作对象1=操作对象1 4.sbb和adc是基于同一思想设计的两条指令,在应用思路中与adc相似的11.8 cmp标志1.cmp是比较指令,功能相当于减法指令。 但是,如果执行不保存结果的2.cmp指令,则会影响标志寄存器。 其他相关指令通过识别这些受影响的标志寄存器,计算比较结果4.cmp指令格式: cmp操作对象1、操作对象25 .功能:操作对象1-操作对象2,但不保存结果,只基于计算结果可知cmp ax、ax进行[ax]-[ax]的运算,结果为0,但不保存在ax中,只有阴影

响flag的相关位 指令执行后 zf=1 ;结果为0 pf=1 ;结果的1的个数为偶数 sf=0 ;结果为正号 cf=0 ;结果没有产生进位或借位 of=0 ;结果没有溢出7.根据flag,判断cmp指令的结果(无符号数)

8.cmp既可以对无符号数进行比较,也可以对有符号数进行比较 cmp 操作数1,操作数2 ;操作数1、操作数2都是有符号数 1.of=0,说明没有溢出,逻辑上真正结果的正负=实际结果的正负 of=0,sf=1 则 操作数1比操作数2小 of=0,sf=0 则 操作数1比操作数2大 2.of=1,说明有溢出,逻辑上真正结果的正负与实际结果的正负相反 of=1,sf=1 则 操作数1比操作数2大 of=1,sf=0 则 操作数1比操作数2小 11.9 检测比较结果的条件转移指令 1.这些条件转移指令通常和cmp相配合使用2.因为cmp指令可以同时进行两种比较,无符号数和有符号数的比较 所以,这些转移指令也分为两种,即: 1.根据【无符号数】的比较结果进行转移的条件转移指令, 他们检测zf、cf的值 2.根据【有符号数】的比较结果进行转移的条件转移指令 他们检测sf、of和zf的值3.无符号比较,条件转移指令小结【无符号,6个】 1.je 等于则转移 zf=1 2.jne 不等于则转移 zf=0 3.jb 低于则转移 cf=1 【b表示below】 4.jnb 不低于则转移 cf=0 5.ja 高于则转移 cf=0,zf=0【a表示above】 6.jna 不高于则转移 cf=1或zf=1 11.10 DF标志和串传送指令 1.flag的第10位DF,方向标志位 在串处理指令(movsb,movsw)中,控制每次操作后si、di的增减 df=0:每次操作后si,di递增 df=1:每次操作后si,di递减2.格式:movsb3.功能:(以字节为单位传送) 1.((es)*16+(di))=((ds)*16+(si)) 2.如果df=0,则:(si)=(si)+1 (di)=(di)+1 如果df=1,则:(si)=(si)-1 (di)=(di)-1 3.功能文字描述 movsb的功能是将ds:si指向的内存单元中的字节 送入es:di中,然后根据标志寄存器df位的值, 将si和di递增或递减4.movsw 传送一个字5.movsb和movsw都和rep配合使用 格式:rep movsb rep的作用根据cx的值,重复执行后面的串传送指令6.cld指令和std指令 cld指令:将标志寄存器的df置为0【c:clear】 std指令:将标志寄存器的df置为1【s:set】 11.11 pushf和popf pushf:将标志寄存器的值压栈popf:从栈中弹出数据,送入标志寄存器中pushf和popf为直接访问标志寄存器提供了一种方法 11.12 标志寄存器在debug中的表示


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。