汇编基础学习9

文章转自 http://www.mcany.cn/article/284.htm

博主 没落的残阳

 

这节我们来讲解下“标志位”。  因为无论何时,当程序执行算术运算时都有可能发生因溢出而导致的错误。。 高级语言并不侦测溢出错误。。 这导致我们往往很难发现BUG。 于此相反,在汇编语言中由于执行每步操作后,检查cpu的状态值。因为(因此)可以很好的控制溢出错误。。。
     所以从以上我们得到结论: “标志位”标示的是我们的cpu的状态值。。。
  

   今天我们讲解的是算术运算的影响的标志,例如ADD SUB INC DEC指令影响的标志。


    那么ADD SUB  INC DEC指令我在这里大致的介绍下。。

   1.ADD 指令将同尺寸的源操作数和目的操作数相相加结果返回给目的操作数。举个例子

    ADD EAX, EBX   那么就等于 EAX  =  EAX + EBX
  
   2.SUB指令将源操作数从目的操作数中减掉,结果同样返回目的操作数。 举个例子

    SUB EAX, EBX    那么就等于 EAX = EAX - EBX

   3.INC DEC指令是将 从操作数中加一或者减1,它只有一个操作数

    例如 INC EAX = EAX + 1        DEC EAX  = EAX - 1


标志位:

1.    首先讲解下“零标志”和 “符号标志”。“零标志” 它的标志位标示是“ZF”,它一般是当算术运算指令的目的操作数被赋以零值的时候,零标志就被相应的设置。。 它是非常有用的,因为很多的跳转指令是检查零标志位,从而进行跳转的。。

     举个例子:
     mov ecx, 1h
     sub ecx, 1h  
   注意此时目的操作数变为0了,那么相应的零标志位就被赋值。此时ZF = 1。 在之前我已经说过 计算机内存是以二进制形式存储数据的,二进制的基数是2.它能标示的也就是"0", "1"
。一般我们把0标示布尔类型的fasle   1标示布尔类型的true 。 因为我们大千世界,往往要发生很多不可预料的事情。那么就需要做出判断。此时假设我们的计算机只有1来标示,那么它就是畅通无阻的,根本就不能判断了。

      

    说了这么多,到底是想表达什么呢。 我只是想说在计算中内存中我们的数据只有两种标示状态1 和 0 。 那么ZF置于1,标示此时操作数结果“的确(真)”是0。  如果ZF置于0,因为0标示false,那么就标示操作数结果“不是(假)”0 。

    在举个例子
    mov eax, 2h
    sub eax, 1h
    此时目的操作数结果eax = 1h ,所以此时ZF标志位 = 0  。 表示目的结果不是0。


    但是我们举的例子都是无符号整数,那么有符号整数是如何影响标志位的呢。。因为有时候需要判断我们的运算结果 目的操作数 到底是否是负数。 因为负数代表的就是有符号了。例如eax = -1h  "-"就是负数的符号标示。 那么我们的符号标志位 是“SF”,如果我们的目的操作数的结果是有符号值的话,那么SF = 1  。

   举例
   mov  eax, -2h
   sub  eax, 1h
   此时因为我们的目的操作数eax寄存器的结果是有符号数值,所以此时SF = 1,标示“的确(真)” 是有符号。呵呵这样理解大家好理解。。
  
  相应的  
  
   mov  eax, -2h
   add  eax, 2h
   此时因为eax寄存器的值是无符号的。所以此时SF =0, 嘿,注意没。eax 结果是0的。所以此时ZF = 1
    



2.接下来讲解“进位标志”。
进位标志一般用于(无符号算术运算) 。

“ 只有当cpu执行无符号算术运算的时候,进位标志才有意义”。 如果无符号加法运算结果对目的操作数而言太大(或者太小)而无法容纳时候,进位标志将被设置。。举例

   MOV AX,9FFF
   ADD AX,9FFF
   此时因为ax = 9FFF+9FFF = 13FFE, 因为ax寄存器是eax寄存器的低16位寄存器,所以只能容纳2个字节也就是只能“3FFE”,那么此时最高位的1将抛弃,此时我们的进位标志CF = 1, 表示“的确(真)进位”。

   例如
   mov ax, 0030h
   add ax, 3333h
   此时ax = 3363h,此时目的操作数结果是2个字节,所以并美誉发生进位操作。此时CF就表示0 。



总结: 这些标志位只有两个状态那就是 "0"->假    "1" -> 真。  例如ZF = 1 ,标示运算结果“真”的为0。 ZF为0 标示运算结果不为0。

这些标志位,大家不用刻意的去记。等用的多了自然就记住了。 不过你如果想记。那么你可以这样。。 例如 ZF = Zero Flags 零标志
SF = Sign Flags 符号标志  这样记得时候就好多了。直接把相应的单词拼写出来,然后写的时候值用各个单词的首字母即可。。 好今天的课程就讲这么多。下节课我们来讲解其他的标志位,以及一些跳转指令所依据的标志位的状态(也是非常重要的,因为在做免杀遇到一些分之语句,有时我们需要通过标志位来判断该怎么修改)

源码地址: https://pan.quark.cn/s/a4b39357ea24 欧姆龙触摸屏编程软件MPTST 5.02是专门为欧姆龙品牌的工业触摸屏而研发的编程解决方案,它赋予用户在直观界面上构建、修改以及排错触摸屏应用程序的能力。 该软件在工业自动化领域具有不可替代的地位,特别是在生产线监视、设备操控以及人机互动系统中发挥着核心作用。 欧姆龙MPTST(Machine Process Terminal Software Touch)5.02版本配备了多样化的功能,旨在应对不同种类的触摸屏项目要求。 以下列举了若干核心特性:1. **图形化编程**:MPTST 5.02采用图形化的编程模式,允许用户借助拖拽动作来设计屏幕布局,设定按钮、滑块、指示灯等组件,显著简化了编程流程,并提升了工作效率。 2. **兼容性**:该软件能够适配欧姆龙的多个触摸屏产品线,包括CX-One、NS系列、NJ/NX系列等,使用户可以在同一个平台上完成对不同硬件的编程任务。 3. **数据通信**:MPTST 5.02具备与PLC(可编程逻辑控制器)进行数据交互的能力,通过将触摸屏作为操作界面,实现生产数据的显示与输入,以及设备状态的监控。 4. **报警与事件管理**:软件中集成了报警和事件管理机制,可以设定多种报警标准,一旦达到预设条件,触摸屏便会展示对应的报警提示,助力操作人员迅速做出响应。 5. **模拟测试**:在设备实际连接之前,MPTST 5.02支持用户进行脱机模拟测试,以此验证程序的正确性与稳定性。 6. **项目备份与恢复**:为了防止数据遗失,MPTST 5.02提供了项目文件的备份及还原功能,对于多版本控制与团队协作具有显著价值。 7. **多语言支持**:针对全球化的应...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值