当前位置: 首页 > news >正文

汇编语言程序设计基础知识二

五、顺序结构

1、程序设计的步骤

1、分析问题

2、建立数据模型

3、设计算法

4、编制程序

5、上机调试

2、流程图的应用

3、程序的基本控制结构

1、顺序结构:程序顺序执行,不发生跳转

2、分支结构:程序在执行过程中发生跳转

3、循环结构:程序重复执行多次

4、数据传送指令

对于双操作数的要求:

(以MOV指令为例)

MOV 寄存器,立即数

MOV 寄存器,寄存器

MOV 寄存器,内存单元

MOV 内存单元,寄存器

MOV 内存单元,立即数

不能两个操作数都是内存单元

CS不能用作目标操作数

IP寄存器不能做操作数

用BX、SI、DI间接寻址时,默认的段寄存器为DS

立即数不能做目标操作数

立即数不能直接送入段寄存器

源操作数与目标操作数数据类型必须相同

段寄存器之间不能互相传送

dest:目标操作数

src:源操作数

格式说明对标志位的影响
MOVMOV dest,src将源操作数(字节或字)传送到目标操作数中没有
PUSHPUSH src堆栈指针先减2,再将源操作数存入,(必须是字数据)(src必须是字类型)没有
POPPOP dest先将栈顶中存放的字数据存入dest中,再将堆栈指针加2 (dest必须是字类型)没有
XCHGXCHG dest,src交换(同一条指令中,数据类型必须一致)没有
XLATXLAT换码(查表)指令,BX和AL内容之和指出的内存字节单元的内容放到AL中没有
LEALEA dest,src取有效地址,将源操作数地址的偏移量,即有效地址传送到dest中(dest可以是任一16位通用寄存器,但不能是IP和段寄存器)没有
LDSLDS dest,src加载数据段寄存器,将src指出的连续两个字的内容,高位字为段地址送入DS,低位字为偏移量送入dest没有
LESLES dest,src加载附加段寄存器,将src指出的连续两个字的内容,高位字为段地址送入ES,低位字为偏移量送入dest没有

5、算术运算指令

格式说明对标志位的影响
ADDADD dest,src加法,结果存入目标操作数中CF、OF、AF、PF、SF、ZF
ADCADC dest,src带进位的加法,结果存入目标操作数中,dest = dest + src + CF,主要用于多字节相加CF、OF、AF、PF、SF、ZF
INCINC dest增一指令
SUBSUB dest,src减法:dest = dest - srcCF、OF、AF、PF、SF、ZF
SBBSBB dest,src带进位的减法,dest = dest - src - CF,主要用于多字节相减CF、OF、AF、PF、SF、ZF
DECDEC dest自减不影响CF,其与都影响
NEGNEG dest取补指令CF、OF、AF、PF、SF、ZF
CMPCMP dest,src从目标操作数中减去源操作数,但结果不储存,只保存对标志位的影响CF、OF、AF、PF、SF、ZF

6、逻辑操作指令

格式说明对标志位的影响
NOTNOT dest对每一位求反没有
ANDAND dest,src逻辑与,一个数与自己进行逻辑与,可以用来影响标志位;可以借助某个指定的操作数来将另一个操作数中的某个位清零CF、OF、AF、PF、SF、ZF
OROR dest,src逻辑或,可以用来是操作数中的某些位置位CF、OF、AF、PF、SF、ZF
XORXOR dest,src异或,可用来使操作数中的某些位取反CF、OF、AF、PF、SF、ZF
TESTTEST dest,src将两个操作数进行逻辑与,但不改变两个操作数的原始值,并将CF和OF置零CF、OF、AF、PF、SF、ZF

7、移位操作指令

逻辑移位(SHL、SHR)

逻辑移位指令 dest,cnt

cnt可以为1,但如果大于1,则需要存放到CL中,再进行移位

执行移位指令时,一位一移,过程中源操作数的最高位发生过变化,OF为1,否则为0

左移时,最高位送入CF,右移时,最低位送入CF

不带进位循环移位(EOL、ROR)

带进位循环移位(RCL、RCR)

8、状态标志位操作指令

清0置1取反
CFCLCSTCCMC
DFCLDSTD
IFCLISTI

9、简单的I/O功能调用

六、分支结构程序

1、转移指令

1.1、无条件转移指令

JMP targ

不影响标志位,可以转到内存中存放的任何程序段,targ可以是直接标号、寄存器间接寻址、存储器间接寻址

1.2、条件转移指令

根据执行该指令前CPU中状态标志位的状态决定程序执行的流程

在比较玩两个数的大小后根据比较的结果决定是否进行转移,实际是测试不同的标志位

1.2.1、单条件转移指令
条件转移指令
CF = 1JC
CF = 0JNC
ZF = 1JZ/JE
ZF = 0JNZ/JNE
SF = 1JS
SF = 0JNS
OF = 1JO
OF = 0JNO
PF = 1JP/JPE
PF = 0JNP/JPO
1.2.2、带符号数和无符号数的条件转移指令

条件:使用前用过CMP、SUB、SBB指令

无符号数标志位带符号数标志位
A < BJBCF=1JLSF xor OF = 1
A <= BJBECF=1||ZF=1JLE((SF xor OF)|| ZF)=1
A > BJACF=0||ZF=0JG((SF xor OF)||ZF)=0
A >= BJAECF=0JGESF xor OF = 0
A = BJEZF=1JEZF=1
A != BJNEZF=1JNEZF=1

相关文章:

汇编语言程序设计基础知识二

五、顺序结构 1、程序设计的步骤 1、分析问题 2、建立数据模型 3、设计算法 4、编制程序 5、上机调试 2、流程图的应用 3、程序的基本控制结构 1、顺序结构&#xff1a;程序顺序执行&#xff0c;不发生跳转 2、分支结构&#xff1a;程序在执行过程中发生跳转 3、循环…...

一文详解!Robot Framework Selenium UI自动化测试入门篇

目录 前言&#xff1a; 自动化框架的选择 测试环境的搭建 导入Selenium2Library包 关键字是什么&#xff1f; 创建测试用例 前言&#xff1a; 自动化测试的重要性越来越受到人们的重视&#xff0c;因为它可以提高测试效率、降低测试成本并减少人为错误的出现。为了满足这…...

Java 9 模块化系统详解

Java 9 模块化系统详解 一、简介1. 引入模块化系统原因2. 模块化系统带来的优势和挑战3. 模块化关键概念 二、模块化基础1. 模块化源代码结构规范2. 模块定义与描述符3. 打包可执行模块 三、模块化系统的高级特性1. 模块发现与解决依赖2. 模块化升级与替换3. 模块化动态访问 四…...

Windows定时执行Python脚本

在Linux环境下我们可以使用crontab工具来定时的执行脚本&#xff0c;可以很轻松的管理各个虚拟环境下的py文件在Windows上可以使用任务计划程序来定时执行我们的脚本 关于这个的基本使用可以查看我前面的博客 https://blog.csdn.net/wyh1618/article/details/125725967?spm10…...

数据科学简介:如何使用 Pandas 库处理 CSV 文件

部分数据来源:ChatGPT 什么是 CSV 文件? CSV ( Comma Separated Values)文件是一种常见的文本文件格式,它通常用于存储结构化数据,因为它可以轻松地转换成电子表格,如Excel。 CSV 文件是以逗号作为分隔符的表格数据。文件中的每行代表一个记录,每列代表一个属性。例如…...

面试专题:java多线程(2)-- 线程池

1.为什么要用线程池&#xff1f; 线程池提供了一种限制和管理资源&#xff08;包括执行一个任务&#xff09;。 每个线程池还维护一些基本统计信息&#xff0c;例如已完成任务的数量。 这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处&#xff1a; 降低资源消…...

Linux文件权限及用户管理

文件权限 在Linux中&#xff0c;每个文件和目录都有一组权限&#xff0c;这些权限决定了哪些用户可以访问文件或目录&#xff0c;以及他们可以进行什么样的操作。权限分为三类&#xff1a; 所有者权限&#xff1a;这些权限适用于文件或目录的所有者。 组权限&#xff1a;这些…...

以AI为灯,照亮医疗放射防护监管盲区

相信绝大部分人都有在医院拍X光片的经历&#xff0c;它能够让医生更方便快速地找出潜在问题&#xff0c;判断病人健康状况&#xff0c;是医疗诊断过程中的常见检查方式。但同时X射线也是一把双刃剑&#xff0c;它的照射量可在体内累积&#xff0c;对人体血液白细胞有杀伤力&…...

Golang单元测试详解(一):单元测试的基本使用方法

Golang 单元测试 Golang 中的单元测试是使用标准库 testing 来实现的&#xff0c;编写一个单元测试是很容易的&#xff1a; 创建测试文件&#xff1a;在 Go 项目的源代码目录下创建一个新的文件&#xff08;和被测代码文件在同一个包&#xff09;&#xff0c;以 _test.go 为后…...

数据库的序列

目录 一、序列是什么 二、序列的用途 二、创建序列 三、查看、修改、删除序列 四、使用序列 &#xff08;1&#xff09;在插入语句中使用 &#xff08;2&#xff09;不在插入语句中使用 五、使用序列的例子 一、序列是什么 数据库对象分为&#xff1a;用户、视图、索引…...

2022年回顾

年总写完了&#xff08;已持续多年&#xff09;&#xff0c;顺便写个小的回顾。 寻找属于自己的方向 无论当前干啥&#xff0c;大多数都不是真正适合你的&#xff0c;但是&#xff0c;你又不能不做下去&#xff0c;那么&#xff0c;持续的寻找适合的&#xff0c;就是一种解开…...

40亿个QQ号,限制1G内存,如何去重?

40亿个unsigned int&#xff0c;如果直接用内存存储的话&#xff0c;需要&#xff1a; 4*4000000000 /1024/1024/1024 14.9G &#xff0c;考虑到其中有一些重复的话&#xff0c;那1G的空间也基本上是不够用的。 想要实现这个功能&#xff0c;可以借助位图。 使用位图的话&a…...

【django】django的orm的分组查询

前言&#xff1a;django当中分组查询如何实现&#xff1f; annotate from myapp import models from django.db.models.functions import TruncMonth from django.db.models import Count,Avg# 分组 values 就是取值作用 model.Book.objects.values(month).annotate(countCo…...

MySQL5.8在Windows下下载+安装+配置教程

MySQL是一款常用的关系型数据库管理系统&#xff0c;本文将介绍MySQL5.8在Windows下的安装配置教程。 1. 软件下载地址 免安装版下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/安装版下载地址&#xff1a;https://dev.mysql.com/downloads/installer/ 2. 免安…...

Flask or FastAPI? Python服务端初体验

1. 引言 最近由于工作需要&#xff0c;又去了解了一下简单的python服务搭建的相关工作&#xff0c;主要是为了自己开发的模型或者工具给同组的人使用。之前介绍的针对于数据科学研究比较友好的一个可以展示的前端框架Streamlit可以说是一个利器。不过&#xff0c;随着ChatGPT的…...

《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记

写在前面的话&#xff1a;此系列文章为笔者学习计算机组成原理时的个人笔记&#xff0c;分享出来与大家学习交流。使用教材为唐朔飞第3版&#xff0c;笔记目录大体与教材相同。 网课 计算机组成原理&#xff08;哈工大刘宏伟&#xff09;135讲&#xff08;全&#xff09;高清_…...

Linux:apache网页优化

Linux&#xff1a;apache网页优化 一、Apache 网页优化二、网页压缩2.1 检查是否安装 mod_deflate 模块2.2 如果没有安装mod_deflate 模块&#xff0c;重新编译安装 Apache 添加 mod_deflate 模块2.3 配置 mod_deflate 模块启用2.4 检查安装情况&#xff0c;启动服务2.5 测试 m…...

涨点技巧:注意力机制---Yolov8引入Resnet_CBAM,CBAM升级版

1.计算机视觉中的注意力机制 一般来说,注意力机制通常被分为以下基本四大类: 通道注意力 Channel Attention 空间注意力机制 Spatial Attention 时间注意力机制 Temporal Attention 分支注意力机制 Branch Attention 1.1.CBAM:通道注意力和空间注意力的集成者 轻量级…...

solr教程

一&#xff1a;安装配置 下载完成之后&#xff0c;解压solr文件&#xff0c;解压tomcat 1.1 在tomcat安装solr,并且建立solrCore 把solr5.5目录下的server/solr-webapp/webapp 重命名为solr,并且放置到tomcat/webapp的目录下。 打开tomcat/webapp/solr/WEB-INF/web.xml新建…...

基于java语言编写的爬虫程序

Java语言可以使用Jsoup、HttpClient等库进行网络爬虫开发&#xff0c;其中Jsoup提供了HTML解析和DOM操作的功能&#xff0c;HttpClient则提供了HTTP协议的支持。你可以通过使用这些库&#xff0c;构建网络爬虫程序来爬取指定网站的数据。需要注意的是&#xff0c;应该遵守网站的…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...