汇编语言程序设计基础知识二
五、顺序结构
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协议的支持。你可以通过使用这些库,构建网络爬虫程序来爬取指定网站的数据。需要注意的是,应该遵守网站的…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
