8086 汇编笔记(十):标志寄存器

前言

一、ZF 标志

Zero Flag,零标记位。用于记录相关指令执行后,其结果是否为 0。如果结果为 0,则 ZF=1,如果结果非 0,则 ZF=0 

mov ax,1
sub ax,1    ;ZF = 1
mov ax,2
sub ax,1    ;ZF=0

二、PF 标志

Parity Flag,奇偶标记位。它用于记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数。如果1的个数为偶数,则pf=1,如果为奇数,则pf=0 

mov al,1
add al,10    ;PF=0
mov al,1
or al,2        ;PF=1

三、SF 标志

Sign Flag,符号标记位。它用于记录相关指令执行后,其结果是否为负。如果结果为负,则SF=1,如果结果非负,则SF=0

四、CF 标志

Carry Flag,进位标志位。一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值 

mov al 98H
add al,al    ;执行后:(a1)=30H,CF=1,CE 记录了从最高有效位向更高位的进位值

五、OF 标志

Overflow Flag,溢出标志位。在进行有符号数运算的时候,如果计算结果超出了机器所能表示的范围则发生溢出,此时OF=1。否则,OF=0。

注意区分CF和OF的区别:CF是对无符号数运算有意义的标志位,OF是对有符号数运算有意义的标志位

六、abc 指令

adc是带进位加法指令,它利用了CF位上记录的进位值。

指令格式:

adc 操作对象1,操作对象2

功能:操作对象1=操作对象1+操作对象2+CF 

比如指令 adc ax,bx 实现的功能是:(ax)= (ax)+ (bx)+ CF 

mov ax 1
add ax,ax
adc ax,3    ;ax=5

七、sbb 指令

sbb是带借位减法指令,它利用了CF位上记录的错位值。

指令格式:

sbb 操作对象1,操作对象2

功能:操作对象1=操作对象1-操作对象2-CF 

sbb指令和adc指令是基于同样的思想设计的两条指令,在应用思路上和adc指令类似

八、cmp 指令

cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响

指令格式:

cmp 操作对象1,操作对象2

功能:计算操作对象 1 - 操作对象 2 但并不保存结果,仅仅根据计算结果对标志寄存器进行设置

利用 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)

利用 cmp ah,bh 指令对两个有符号数ah和bh进行比较,由于有符号数的比较较为复杂,主要是考虑到溢出的特殊情景,我们分类讨论:

(1) 如果 sf = 1 并且 of = 0

of = 0 说明没有溢出,并且 sf = 1 说明逻辑上真正的结果为负数。所以 (ah) < (bh)。

(2) 如果 sf = 1 并且 of = 1

of = 1 说明存在溢出,针对补码求和来说,如果结果非0并且产生溢出,正确的逻辑结果符号与实际的结果符号必然相反。 sf = 1 说明实际结果为负,那么正确的逻辑结果应该为正。所以 (ah) > (bh)。

(3) 如果 sf = 0 并且 of = 1

of = 1 说明存在溢出,针对补码求和来说,如果结果非0并且产生溢出,正确的逻辑结果符号与实际的结果符号必然相反。 sf = 0说明实际运算结果必然不小于0,因为存在溢出所以实际运算结果必不等于0,所以实际运算结果必然大于0,进而推导出正确的逻辑运算结果必然小于0。所以 (ah) < (bh)。

(4) 如果 sf = 0 并且 of = 0

of = 0 说明没有溢出,并且 sf = 0,说明逻辑上真正的结果为非负数。所以 (ah) ≥ (bh)。

(5) 如果 zf = 1

这种情形比较简单。此时 (ah) = (bh)。

九、检测比较结果的条件转移指令

“转移”指的是它能够修改IP,而“条件”指的是它可以根据某种条件,决定是否修改IP。比如,jcxz就是一个条件转移指令,它可以检测cx中的数值,如果 (cx) = 0,就修改IP,否则什么也不做。所有条件转移指令的位移都是 [-128, 127](即它们都是短转移)。

jcxz是根据寄存器cx的值来判断是否转移,除此之外还存在其他条件转移指令,大多数条件转移指令都检测标志寄存器相关标志位,根据检测的结果来决定是否修改IP。

下表列出了常用的根据无符号数的比较结果进行转移的条件转移指令:

指令含义检测的相关标志位备注
je等于则转移zf = 1e 表示 equal
jne不等于则转移zf = 0ne 表示 not eauql
jb低于则转移cf = 1b 表示 below
jnb不低于则转移cf = 0nb 表示 not blow
ja高于则转移cf = 0 且 zf = 0a 表示 above
jna不高于则转移cf = 1 或 zf = 1na 表示 not above

注意,条件转移指令通常与cmp指令配合使用。

十、DF 标志和串传送指令 

Direction Flag,方向标志位。在串传送指令中,控制每次操作后 si、di 的增减

df = 0 ,每次操作后 si、di 递增
df = 1 ,每次操作后 si、di 递减

movsb 指令

格式:

movsb

功能:将ds:si指向的内存单元中的字节送入es:di中,并根据标志寄存器df的值,将si和di递增或递减 

movsw 指令 

movsw 的功能是将 ds:si 指向的内存字单元中的字送入 es:di 中,然后根据标志寄存器df位的值,将 si和 di 递增 2 或递减 2 

rep 指令 

movsb 和 movsw 进行的是串传送操作中的一个步骤,一般来说,movsb 和 movsw 都配合 rep 配合使用,格式如下: 

rep movsb

功能:根据cx的值来决定是否重复执行 movsb操作 

cld 指令和 std 指令 

cld 指令:将标志寄存器的 df 位置设置为 0
std 指令:将标志寄存器的 df 位置设置为 1 

十一、pushf 和 popf 

pushf 的功能是将标志寄存器的值压栈,而 popf 是从栈中弹出数据,送入标志寄存器中。

pushf 和 popf 为直接访问标志寄存器提供了一种方法。

十二、标志寄存器在 Debug 中的表示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AutoCAD记录

esc&#xff1a;取消&#xff08;取消操作&#xff09; L空格&#xff1a;画直线 C空格&#xff1a;画圆 &#xff08;软件提供了圆的多种画法&#xff0c;其中包括与其他图形的切线&#xff09; A空格&#xff1a;画圆弧 tab&#xff1a;切换数据输入框&#xff08;如下图…

安卓手机APP开发_____通过设备管理政策增强安全性

安卓手机APP开发_____通过设备管理政策增强安全性 目录 概述 定义并声明政策 创建设备管理接收器 激活设备管理器 实现设备政策控制器 概述 设备管理弃用。部分管理员政策在由设备管理员调用时被标记为已弃用。 如需了解详情并查看迁移选项&#xff0c;请参阅 设备管理弃…

等保测评3级-技术测评要求 上

技术测评要求(S3A3G3) 等保测评3级技术评测要求 等级保护三级技术类测评控制点(S3A3G3)类别 序号 10. 11. 12. 13. 防雷 击 14. 15. 16. 防火 17. 18. 19. 防水 和防 潮 20. 21. 22. 测 评 内 容 应对介质分类标识&#xff0c; 存储在介质库或档案室中。 (G2) 应利用光、电等…

Renesas MCU之串口的发送接收功能实现

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 硬件介绍 2 FSP配置项目 2.1 项目参数配置 2.2 配置UART参数 3 功能实现 3.1 软件架构实现 3.2 UART接口函数 3.2.1 R_SCI_UART_Open() 3.2.2 R_SCI_UART_Close() 3.2.3 R_SCI_UART_Read() 3.2.4 R_SCI_UART_Writ…

java自学阶段二:JavaWeb开发50(Spring和Springboot学习)

Spring、Springboot基础知识学习 目录 学习目标Spring基础概念IOC控制反转DI依赖注入事务管理AOP面向切面编程Spring案例说明&#xff08;Postman使用、Restful开发规范、lombok、Restful、nginx了解&#xff09; 一&#xff1a;学习目标&#xff1a; 1&#xff09;了解Sprin…

如何解决chatgpt出现503 bad gateway的问题

昨日&#xff0c;ChatGPT官网挂了&#xff0c;也就是使用web网页端访问的用户&#xff0c;会出现 bad gateway 情况。我们去ChatGPT官方的监控查看&#xff0c;已经展示相关错误。 影响的范围有&#xff1a; 影响了 ChatGPT 所有计划的所有用户。影响包括所有与 ChatGPT 相关…

Spring ApplicationContext的getBean方法

Spring ApplicationContext的getBean方法 在Spring框架的ApplicationContext中&#xff0c;getBean(Class<T> requiredType)方法可以接受一个类类型参数&#xff0c;这个参数可以是接口类也可以是实现类。 使用接口类&#xff1a; 如果requiredType是一个接口&#xff0c…

React:Expected property name or ‘}‘ in JSON at position 1

代码&#xff1a; import { Form, Input, Button } from antd export default function FormCom() {function onFinish(a, b, c, d) {console.log(a, b, c, d)}const describe "{tip:请输入用户名}"return (<><Form onFinish{onFinish}><Form.Itemn…

如何利用langchian调用百度大模型API

Baidu AI Cloud Qianfan Platform 使用LangChain进行聊天模型集成 概述 百度智能云的乾帆平台是一个一站式的大模型开发和服务运营平台&#xff0c;为企业开发者提供了包括文心一言&#xff08;ERNIE-Bot&#xff09;和第三方开源模型在内的多种模型。主要分为三类模型&#…

小程序真题合集

小程序真题合集 1. 微信小程序主要目录和文件的作用2. 微信小程序的生命周期函数2.1 应用&#xff08;App&#xff09;的生命周期2.2 小程序页面&#xff08;Page&#xff09;的生命周期 3. 微信小程序的登陆流程4. 微信小程序中路由跳转的方式5. 谈谈wxml与标准的html的异同6.…

【Linux】(六)—— vim编辑器

vim文件编辑器 Vim&#xff08;Vi Improved&#xff09;是一个高度可配置的文本编辑器&#xff0c;最初基于UNIX下的Vi编辑器发展而来&#xff0c;广泛用于程序开发和系统管理中。vim编辑器可以只通过终端命令即可编写修改文件&#xff0c;不需要和gedit一样需要打开类似于记事…

1V1音视频实时互动直播系统

李超老师的项目 先肯定分为两个两个端&#xff0c;一个是服务器端一个是客户端。客户端用于UI界面的显示&#xff0c;服务器端用于处理客户端发来的消息。 我们先搭建stun和turn服务器 首先介绍一下什么是stun协议&#xff0c; 它是用来干什么的&#xff1f; stun协议存在…

【深度学习】之 卷积(Convolution2D)、最大池化(Max Pooling)和 Dropout 的NumPy实现

1. 2D 卷积操作 import numpy as npdef conv2d(image, kernel, stride1, padding0):"""应用2D卷积操作到输入图像上。参数&#xff1a;- image: 输入图像&#xff0c;2D数组。- kernel: 卷积核&#xff0c;2D数组。- stride: 卷积步幅。- padding: 图像周围的零…

自动化迁移和更新物体检测XML数据集

引言 当处理大规模的图片数据集&#xff0c;尤其是在物体识别和计算机视觉领域时&#xff0c;有效管理和更新数据集变得非常重要。在本文中&#xff0c;我们将介绍一个简单的Python脚本&#xff0c;该脚本自动化了迁移和更新标注过的XML数据集的过程。 脚本概览 该脚本进行了…

vue3中多语言切换vue-i18n

安装 npm install vue-i18nnext 使用 一.在src中创建i18n文件夹&#xff08;文件名无所谓&#xff09; 在i18n下创建 en.ts zh.ts index.ts 分别写入下面代码 en.ts/js //en export default {message: {login: login} } zh.ts //zh export default {message: {login:…

Nginx网站服务【☆☆☆】

市面上常用Linux的web服务器&#xff1a;apache、Nginx。 apache与nginx的区别&#xff1f; 最核心的区别在于NGINX采用异步非阻塞机制&#xff0c;多个连接可以对应一个进程&#xff1b;apache采用的是同步阻塞多进程/线程模型&#xff0c;一个连接对应一个进程。apache美国…

MacOS 安装C语言版TensorFlow

文章目录 安装C语言版TensorFlow解压归档环境变量c_api.hC语言示例 安装C语言版TensorFlow 官方文档&#xff1a;https://tensorflow.google.cn/install/lang_c?hlzh-cnTensorFlow 提供了一个 C API&#xff0c;该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义&a…

从C到C++,C++入门(2)

在C入门篇&#xff08;1&#xff09;中&#xff0c;博主为大家简单介绍了什么是C&#xff0c;以及C中的关键字&#xff0c;命名空间&#xff0c;输入与输出和缺省参数的相关知识。今天就让我们继续一起学习C的基础知识点吧&#xff01;&#xff01; 1.函数重载 1.1函数重载的概…

经典的泡泡龙游戏源码免费下载

源码介绍 HTML5泡泡龙冒险小游戏是一款休闲网页游戏&#xff0c;游戏玩法是玩家从下方中央的弹珠发射台射出彩珠&#xff0c;多于3个同色珠相连则会消失。 源码下载 经典的泡泡龙游戏源码免费下载

C# WPF入门学习主线篇(六)—— TextBox常见属性和事件

欢迎回到C# WPF入门学习系列的第六篇。在前面的文章中&#xff0c;我们探讨了按钮&#xff08;Button&#xff09;的事件处理。今天&#xff0c;我们将继续学习另一个常用的WPF控件——TextBox。本文将介绍 TextBox 的常见属性和事件&#xff0c;并通过示例代码展示如何在实际应…