汇编语言程序设计基础知识二
五、顺序结构
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协议的支持。你可以通过使用这些库,构建网络爬虫程序来爬取指定网站的数据。需要注意的是,应该遵守网站的…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
el-amap-bezier-curve运用及线弧度设置
文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...
MeanFlow:何凯明新作,单步去噪图像生成新SOTA
1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架,旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念,这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换,显…...