汇编语言程序设计基础知识二
五、顺序结构
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:源操作数
| 格式 | 说明 | 对标志位的影响 | |
|---|---|---|---|
| MOV | MOV dest,src | 将源操作数(字节或字)传送到目标操作数中 | 没有 |
| PUSH | PUSH src | 堆栈指针先减2,再将源操作数存入,(必须是字数据)(src必须是字类型) | 没有 |
| POP | POP dest | 先将栈顶中存放的字数据存入dest中,再将堆栈指针加2 (dest必须是字类型) | 没有 |
| XCHG | XCHG dest,src | 交换(同一条指令中,数据类型必须一致) | 没有 |
| XLAT | XLAT | 换码(查表)指令,BX和AL内容之和指出的内存字节单元的内容放到AL中 | 没有 |
| LEA | LEA dest,src | 取有效地址,将源操作数地址的偏移量,即有效地址传送到dest中(dest可以是任一16位通用寄存器,但不能是IP和段寄存器) | 没有 |
| LDS | LDS dest,src | 加载数据段寄存器,将src指出的连续两个字的内容,高位字为段地址送入DS,低位字为偏移量送入dest | 没有 |
| LES | LES dest,src | 加载附加段寄存器,将src指出的连续两个字的内容,高位字为段地址送入ES,低位字为偏移量送入dest | 没有 |
5、算术运算指令
| 格式 | 说明 | 对标志位的影响 | |
|---|---|---|---|
| ADD | ADD dest,src | 加法,结果存入目标操作数中 | CF、OF、AF、PF、SF、ZF |
| ADC | ADC dest,src | 带进位的加法,结果存入目标操作数中,dest = dest + src + CF,主要用于多字节相加 | CF、OF、AF、PF、SF、ZF |
| INC | INC dest | 增一指令 | |
| SUB | SUB dest,src | 减法:dest = dest - src | CF、OF、AF、PF、SF、ZF |
| SBB | SBB dest,src | 带进位的减法,dest = dest - src - CF,主要用于多字节相减 | CF、OF、AF、PF、SF、ZF |
| DEC | DEC dest | 自减 | 不影响CF,其与都影响 |
| NEG | NEG dest | 取补指令 | CF、OF、AF、PF、SF、ZF |
| CMP | CMP dest,src | 从目标操作数中减去源操作数,但结果不储存,只保存对标志位的影响 | CF、OF、AF、PF、SF、ZF |
6、逻辑操作指令
| 格式 | 说明 | 对标志位的影响 | |
|---|---|---|---|
| NOT | NOT dest | 对每一位求反 | 没有 |
| AND | AND dest,src | 逻辑与,一个数与自己进行逻辑与,可以用来影响标志位;可以借助某个指定的操作数来将另一个操作数中的某个位清零 | CF、OF、AF、PF、SF、ZF |
| OR | OR dest,src | 逻辑或,可以用来是操作数中的某些位置位 | CF、OF、AF、PF、SF、ZF |
| XOR | XOR dest,src | 异或,可用来使操作数中的某些位取反 | CF、OF、AF、PF、SF、ZF |
| TEST | TEST 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 | 取反 | |
|---|---|---|---|
| CF | CLC | STC | CMC |
| DF | CLD | STD | |
| IF | CLI | STI |
9、简单的I/O功能调用
六、分支结构程序
1、转移指令
1.1、无条件转移指令
JMP targ
不影响标志位,可以转到内存中存放的任何程序段,targ可以是直接标号、寄存器间接寻址、存储器间接寻址
1.2、条件转移指令
根据执行该指令前CPU中状态标志位的状态决定程序执行的流程
在比较玩两个数的大小后根据比较的结果决定是否进行转移,实际是测试不同的标志位
1.2.1、单条件转移指令
| 条件转移指令 | |
|---|---|
| CF = 1 | JC |
| CF = 0 | JNC |
| ZF = 1 | JZ/JE |
| ZF = 0 | JNZ/JNE |
| SF = 1 | JS |
| SF = 0 | JNS |
| OF = 1 | JO |
| OF = 0 | JNO |
| PF = 1 | JP/JPE |
| PF = 0 | JNP/JPO |
1.2.2、带符号数和无符号数的条件转移指令
条件:使用前用过CMP、SUB、SBB指令
| 无符号数 | 标志位 | 带符号数 | 标志位 | |
|---|---|---|---|---|
| A < B | JB | CF=1 | JL | SF xor OF = 1 |
| A <= B | JBE | CF=1||ZF=1 | JLE | ((SF xor OF)|| ZF)=1 |
| A > B | JA | CF=0||ZF=0 | JG | ((SF xor OF)||ZF)=0 |
| A >= B | JAE | CF=0 | JGE | SF xor OF = 0 |
| A = B | JE | ZF=1 | JE | ZF=1 |
| A != B | JNE | ZF=1 | JNE | ZF=1 |
相关文章:
汇编语言程序设计基础知识二
五、顺序结构 1、程序设计的步骤 1、分析问题 2、建立数据模型 3、设计算法 4、编制程序 5、上机调试 2、流程图的应用 3、程序的基本控制结构 1、顺序结构:程序顺序执行,不发生跳转 2、分支结构:程序在执行过程中发生跳转 3、循环…...
一文详解!Robot Framework Selenium UI自动化测试入门篇
目录 前言: 自动化框架的选择 测试环境的搭建 导入Selenium2Library包 关键字是什么? 创建测试用例 前言: 自动化测试的重要性越来越受到人们的重视,因为它可以提高测试效率、降低测试成本并减少人为错误的出现。为了满足这…...
Java 9 模块化系统详解
Java 9 模块化系统详解 一、简介1. 引入模块化系统原因2. 模块化系统带来的优势和挑战3. 模块化关键概念 二、模块化基础1. 模块化源代码结构规范2. 模块定义与描述符3. 打包可执行模块 三、模块化系统的高级特性1. 模块发现与解决依赖2. 模块化升级与替换3. 模块化动态访问 四…...
Windows定时执行Python脚本
在Linux环境下我们可以使用crontab工具来定时的执行脚本,可以很轻松的管理各个虚拟环境下的py文件在Windows上可以使用任务计划程序来定时执行我们的脚本 关于这个的基本使用可以查看我前面的博客 https://blog.csdn.net/wyh1618/article/details/125725967?spm10…...
数据科学简介:如何使用 Pandas 库处理 CSV 文件
部分数据来源:ChatGPT 什么是 CSV 文件? CSV ( Comma Separated Values)文件是一种常见的文本文件格式,它通常用于存储结构化数据,因为它可以轻松地转换成电子表格,如Excel。 CSV 文件是以逗号作为分隔符的表格数据。文件中的每行代表一个记录,每列代表一个属性。例如…...
面试专题:java多线程(2)-- 线程池
1.为什么要用线程池? 线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处: 降低资源消…...
Linux文件权限及用户管理
文件权限 在Linux中,每个文件和目录都有一组权限,这些权限决定了哪些用户可以访问文件或目录,以及他们可以进行什么样的操作。权限分为三类: 所有者权限:这些权限适用于文件或目录的所有者。 组权限:这些…...
以AI为灯,照亮医疗放射防护监管盲区
相信绝大部分人都有在医院拍X光片的经历,它能够让医生更方便快速地找出潜在问题,判断病人健康状况,是医疗诊断过程中的常见检查方式。但同时X射线也是一把双刃剑,它的照射量可在体内累积,对人体血液白细胞有杀伤力&…...
Golang单元测试详解(一):单元测试的基本使用方法
Golang 单元测试 Golang 中的单元测试是使用标准库 testing 来实现的,编写一个单元测试是很容易的: 创建测试文件:在 Go 项目的源代码目录下创建一个新的文件(和被测代码文件在同一个包),以 _test.go 为后…...
数据库的序列
目录 一、序列是什么 二、序列的用途 二、创建序列 三、查看、修改、删除序列 四、使用序列 (1)在插入语句中使用 (2)不在插入语句中使用 五、使用序列的例子 一、序列是什么 数据库对象分为:用户、视图、索引…...
2022年回顾
年总写完了(已持续多年),顺便写个小的回顾。 寻找属于自己的方向 无论当前干啥,大多数都不是真正适合你的,但是,你又不能不做下去,那么,持续的寻找适合的,就是一种解开…...
40亿个QQ号,限制1G内存,如何去重?
40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的。 想要实现这个功能,可以借助位图。 使用位图的话&a…...
【django】django的orm的分组查询
前言:django当中分组查询如何实现? 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是一款常用的关系型数据库管理系统,本文将介绍MySQL5.8在Windows下的安装配置教程。 1. 软件下载地址 免安装版下载地址:https://dev.mysql.com/downloads/mysql/安装版下载地址:https://dev.mysql.com/downloads/installer/ 2. 免安…...
Flask or FastAPI? Python服务端初体验
1. 引言 最近由于工作需要,又去了解了一下简单的python服务搭建的相关工作,主要是为了自己开发的模型或者工具给同组的人使用。之前介绍的针对于数据科学研究比较友好的一个可以展示的前端框架Streamlit可以说是一个利器。不过,随着ChatGPT的…...
《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记
写在前面的话:此系列文章为笔者学习计算机组成原理时的个人笔记,分享出来与大家学习交流。使用教材为唐朔飞第3版,笔记目录大体与教材相同。 网课 计算机组成原理(哈工大刘宏伟)135讲(全)高清_…...
Linux:apache网页优化
Linux:apache网页优化 一、Apache 网页优化二、网页压缩2.1 检查是否安装 mod_deflate 模块2.2 如果没有安装mod_deflate 模块,重新编译安装 Apache 添加 mod_deflate 模块2.3 配置 mod_deflate 模块启用2.4 检查安装情况,启动服务2.5 测试 m…...
涨点技巧:注意力机制---Yolov8引入Resnet_CBAM,CBAM升级版
1.计算机视觉中的注意力机制 一般来说,注意力机制通常被分为以下基本四大类: 通道注意力 Channel Attention 空间注意力机制 Spatial Attention 时间注意力机制 Temporal Attention 分支注意力机制 Branch Attention 1.1.CBAM:通道注意力和空间注意力的集成者 轻量级…...
solr教程
一:安装配置 下载完成之后,解压solr文件,解压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等库进行网络爬虫开发,其中Jsoup提供了HTML解析和DOM操作的功能,HttpClient则提供了HTTP协议的支持。你可以通过使用这些库,构建网络爬虫程序来爬取指定网站的数据。需要注意的是,应该遵守网站的…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...
python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...
