汇编语言程序设计基础知识二
五、顺序结构
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协议的支持。你可以通过使用这些库,构建网络爬虫程序来爬取指定网站的数据。需要注意的是,应该遵守网站的…...
73:L的程序安全:蓝队的规范防御
作者: HOS(安全风信子) 日期: 2026-03-26 主要来源平台: GitHub 摘要: 程序安全是防御的基石,通过规范的流程、自动化执行和可追溯设计构建可靠的安全防御体系。本文分享程序安全的核心价值、L的程序安全策略、技术实现…...
GHelper:华硕笔记本轻量级替代方案与性能优化指南
GHelper:华硕笔记本轻量级替代方案与性能优化指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, …...
Windows记事本CVE-2026-20841漏洞分析:从命令注入根因、全链路攻击链到企业级纵深防御的全维度深度复盘
在Windows系统的生态里,从来没有一款工具能像记事本一样,拥有长达40年的“绝对安全”共识。 从1985年Windows 1.0首次预装,到如今Windows 11的全版本覆盖,这个仅数百KB的纯文本编辑器,始终是全球用户记录备忘、清理格…...
RexUniNLU异常检测能力:识别虚假评论与垃圾内容
RexUniNLU异常检测能力:识别虚假评论与垃圾内容 1. 效果惊艳开场 打开任何一个内容平台,评论区总是最热闹的地方。但你可能不知道,每10条评论里,就有2-3条是机器生成的广告、水军刷的好评,或者是纯粹的垃圾信息。这些…...
Canvas Quest跨平台部署实践:从星图GPU到本地环境的迁移
Canvas Quest跨平台部署实践:从星图GPU到本地环境的迁移 1. 前言:为什么需要跨平台部署 最近遇到不少开发者朋友在问同一个问题:在星图GPU平台上跑得好好的Canvas Quest模型,怎么迁移到本地环境就各种报错?这其实是个…...
科哥二次开发Image-to-Video:性能提升39%,小白友好度大增
科哥二次开发Image-to-Video:性能提升39%,小白友好度大增 1. 项目背景与核心价值 Image-to-Video技术正在改变内容创作的方式,它能够将静态图片转化为生动的视频内容。然而,原始I2VGen-XL模型在实际应用中面临两大挑战ÿ…...
Go 协程池任务调度架构
Go 协程池任务调度架构:高并发任务的智慧引擎 在现代高并发编程中,Go语言的协程(goroutine)以其轻量级和高效性成为开发者的首选。无限制地创建协程可能导致资源耗尽,而协程池(goroutine pool)…...
传统信号处理与AI结合:FUTURE POLICE模型前端预处理技术详解
传统信号处理与AI结合:FUTURE POLICE模型前端预处理技术详解 最近在做一个语音相关的AI项目,发现直接把麦克风录到的原始音频丢给模型,效果总是不太理想。背景的键盘声、远处的谈话声,甚至是空调的嗡嗡声,都会让模型的…...
UE5伤害系统避坑指南:Damage Type没用好?你的Apply Damage可能白写了
UE5伤害系统深度解析:如何用Damage Type构建高扩展性战斗机制 在虚幻引擎5的游戏开发中,伤害系统是战斗机制的核心支柱。许多开发者习惯性地将注意力集中在Damage Amount这个数值上,却忽视了Damage Type这个能够赋予游戏深度和多样性的强大工…...
Mask2Former性能对比分析:R50到Swin-L各主干网络的优劣选择
Mask2Former性能对比分析:R50到Swin-L各主干网络的优劣选择 【免费下载链接】Mask2Former Code release for "Masked-attention Mask Transformer for Universal Image Segmentation" 项目地址: https://gitcode.com/gh_mirrors/ma/Mask2Former Ma…...
