汇编语言程序设计-8-汇编语言快速查阅

news2024/11/14 14:41:36

8. 汇编语言快速查阅

文章目录

  • 8. 汇编语言快速查阅
    • 常用资料
    • 寄存器含义
    • 标志寄存器的含义
    • Debug的使用
    • 汇编语法

本章列出一些需要经常查阅的知识点。


常用资料

  • 参考视频:烟台大学贺利坚老师的网课《汇编语言程序设计系列专题》,或者是B站《汇编语言程序设计 贺利坚主讲》,大家一起看比较热闹。

  • 中文教材:《汇编语言-第3版-王爽》(课程使用)、《汇编语言-第4版-王爽》(最新版)。

  • 老师的博客:《迂者-贺利坚的专栏-汇编语言》

  • 检测点答案参考:《汇编语言》- 读书笔记 - 各章检测点归档

  • 《汇编语言指令大全》(Github、我的百度网盘)——根据字母表排序。

  • 《BIOS和DOS中断大全—中国科学技术大学》,另外我加上了目录。

寄存器含义

8086CPU中的16个寄存器:

  • 通用寄存器:AX(ah/al)、BX(bh/bl)、CX(ch/cl)、DX(dh/dl)
  • 变址寄存器:SI、DI
  • 指针寄存器:SP、BP
  • 指令指针寄存器:IP
  • 段寄存器:CS、SS、DS、ES
  • 标志寄存器:PSW

其中

  • CS:IP 表示要执行的指令地址
  • SS:SP 表示栈指针所在地址

标志寄存器的含义

  本节介绍8086CPU中的标志寄存器 FLAGS,也称为程序状态字。标志寄存器可用于存储相关指令的某些执行结果、为CPU执行相关指令提供行为依据、控制CPU的相关工作方式等。FLAGS 寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。有含义的位如下图所示:

表8-1 8086CPU中的标志寄存器
标志位含义值为1值为0
OF溢出标志(Overflow Flag)OV(Overflow)NV(No Overflow)
DF方向标志(Direction Flag)DN(Down)UP
IF中断标志(Interrupt Flag)EI(Enable Interrupts)DI(Disable Interrupts)
TF陷阱标志(Trap Flag)--
SF符号标志(Sign Flag)NG(Negative)PL(Positive)
ZF零标志(Zero Flag)ZR(Zero)NZ(Not Zero)
AF辅助进位标志(Auxiliary Carry Flag)AC(Auxiliary Carry)NA(No Auxiliary carry)
PF奇偶标志(Parity Flag)PE(Parity Even)PO(Parity Odd)
CF进位标志(Carry Flag)CY(Carry)NC(No Carry)
图5-2 debug中的状态寄存器
  • OF-溢出标志(Overflow Flag):将运算当作有符号数运算,若结果溢出则OF=1、无溢出则OF=0。
  • DF-方向标志(Direction Flag):在串处理指令中,控制每次操作后si,di的增减。具体见“5.14节-DF标志和串传送指令”。
  • IF-中断标志(Interrupt Flag):控制硬件中断的响应。1表示启用硬件中断,CPU可以响应由外部设备产生的中断请求;0禁用硬件中断,CPU忽略外部设备的中断请求。示例见“6.13节-外设连接与中断-sti/cli”。
  • TF-陷阱标志(Trap Flag):控制单步调试。1启用单步模式,每执行一条指令后,CPU会产生一个单步中断(INT 1),允许调试程序检查CPU状态;0禁用单步模式,CPU正常执行指令,不会在每条指令后产生中断。详见“6.8节-单步中断”。
  • SF-符号标志(Sign Flag):运算指令执行后,将结果视为有符号数(补码),结果为负数则SF=1、非负数则SF=0。
  • ZF-零标志(Zero Flag):运算指令执行后,计算结果是否为0。结果为0则ZF=1、结果非0则ZF=0。
  • AF-辅助进位标志(Auxiliary Carry Flag):用于在二进制运算过程中检测从低四位(即低半字节)到高四位(高半字节)的进位或借位情况。它主要用于支持BCD(Binary-Coded Decimal,二进制编码十进制)运算。1表示低四位有向高四位的进位/借位,0表示没有。
  • PF-奇偶标志(Parity Flag):运算指令执行后,结果的所有二进制位中1的个数。偶数则PF=1,奇数则PF=0。
  • CF-进位标志(Carry Flag):将运算当作无符号数运算,有向更高位的进位或借位则CF=1、没有则CF=0。

注:OF和CF在含义上几乎一致,但是OF针对有符号数运算、CF针对无符号数运算。
注:有符号数(补码)运算后,双符号位不同则为“溢出”;无符号数计算后,超出范围为“溢出”。——《计算机组成原理》
注:无符号数运算时,SF的值没有意义,但是运算结果仍然会影响SF。

  在8086CPU的指令集中,影响标志寄存器的大都是运算指令,进行逻辑或算术运算;比如 addsubmuldivincorand等。对标志寄存器没有影响的大都是传送指令,比如 movpushpop等。使用一条指令的时候,要注意这条指令的全部功能,其中包括执行结果对标记寄存器的哪些标志位造成影响。最后给出直接访问标志寄存器的方法:

  • pushf:将标志寄存器的值压栈。
  • popf:从栈中弹出数据,送入标志寄存器中。
  • debug模式下,直接使用 r指令可以查看标志寄存器的值。

注:inc不会影响进/借位标志位CF。

Debug的使用

更详细见“2.5节-Debug的使用”。

正常指令:

  • r:查看寄存器。
  • a:直接在内存中写入汇编指令。
  • u:将机器指令翻译成汇编指令。
  • d:查看内存数据。
  • e:覆写内存数据。
  • q:退出debug。

调试相关指令:

  • t(Trace):逐条指令执行,适合详细调试每个指令,相当于“单步执行-步进”
  • p(Procedure step):逐过程执行,适合调试过程中不想深入子过程,相当于“单步执行-步出”。比如会跳过循环。
  • g(Go):连续执行程序,适合运行程序到下一个断点或结束,也可以运行到指定地址。

汇编语法

  1. 数字没有后缀时,默认为十进制。比如 mov ax,12就是十进制的12,而非 0012H。
  2. 数据不能以字母开头,若有需要则需在前面加0。比如 mov ax,0ffffH
  3. 为防止编译错误,对于指令 mov al,[idata],最好加上段前缀,比如 mov al,ds:[idata]
  4. dw定义一个字、db定义一个字节、dd定义一个双字。
  5. 第一条指令标号约定俗成为 start,也可以换成别的字符,比如 begin
  6. 每个循环的标号命名不能相同。
  7. 汇编程序至少包含一个段,也就是代码段,所以无需给 CS 初始化赋值。但是其他段的段寄存器都需要初始化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1925612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue学习day08-v-model详解、sync修饰符、ref和$refs获取dom组件、Vue异步更新和$nextTick

25、v-model详解 (1)v-model原理 1)原理: v-model本质上是一个语法糖,比如:在应用于输入框时,就是value属性与input事件的合写。 2)作用 ①数据变,视图变 ②视图变&#xff0c…

【 C++ 】详解 (类和对象) 继承

继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构…

【Linux】Linux的账号和用户组

管理员的工作中,相当重要的一环就是【管理账号】。 因为整个系统都是你在管理,并且所有一般用户的账号申请,都必须要通过你的协助才行,所以你就必须要了解一下如何管理好一个服务器主机的账号。 在管理Linux主机的账号时&#xff…

Python应用开发——30天学习Streamlit Python包进行APP的构建(15):优化性能并为应用程序添加状态

Caching and state 优化性能并为应用程序添加状态! Caching 缓存 Streamlit 为数据和全局资源提供了强大的缓存原语。即使从网络加载数据、处理大型数据集或执行昂贵的计算,它们也能让您的应用程序保持高性能。 本页仅包含有关 st.cache_data API 的信息。如需深入了解缓…

AG32 的MCU与FPGA的主频可以达到568MHz吗

Customers: AG32/ AGRV2K 这个芯片主频和定时器最高速度是多少?用户期望 CPLD计时器功能0.1ns以下。 AGM RE: CPLD做不到 0.1ns的速率,这个需要10G以上的时钟。 那AGRV2K最高多少MHz呢? 一般200MHZ比较容易实现。 进一步说明&#xff1…

智慧校园服务监控功能

智慧校园系统中的服务监控功能,扮演着维护整个校园数字化生态系统稳定与高效运作的重要角色。它如同一位全天候的守护者,通过实时跟踪、分析并响应系统各层面的运行状况,确保教学、管理等核心业务流程的顺畅进行。 服务监控功能覆盖了智慧校园…

自动控制——变速积分的PID控制

变速积分的PID控制 PID控制(Proportional-Integral-Derivative Control)是工业控制中最常用的控制算法之一。标准的PID控制器由比例(P)、积分(I)和微分(D)三个部分组成,…

连锁直营店小程序赋能多店如何管理

如商超便利店卖货线下场景,也有不少品牌以同城多店和多地开店经营为主,获取店铺周围客户和散流,如今线上重要性凸显,品牌电商发展是经营的重要方式之一,也是完善同城和外地客户随时便捷消费的方式之一。 多个门店管理…

Js 前置,后置补零的原生方法与补字符串 padStart及padEnd

在工作中,遇到了需要将不满八位的一个字符串进行后补0的操作,所以就在网上学习了关于js原生补充字符串的方法,然后用这篇博客记录下来。 目录 前置补充字符串 String.prototype.padStart() 后置补充字符串String.prototype.padEnd() 前置补…

OpenGL笔记十之Shader类的封装

OpenGL笔记十之Shader类的封装 —— 2024-07-10 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十之Shader类的封装1.运行2.目录结构3.main.cpp4.application4.1.CMakeLists.txt4.2.Application.h4.3.Application.cpp 5.assets5.1.shaders&#xf…

虚拟机:VMware功能,安装与使用

目录 一、虚拟机介绍 二、VMware 1.介绍 2.安装 (1)根据提示按步骤安装​编辑 (2)更改软件的安装地址​编辑 (3)根据自己的需求选择是否需要软件更新​编辑 (4)根据需求选择…

20240715 每日AI必读资讯

🌐 代号“ 草莓 ”,OpenAI 被曝研发新项目:将 AI 推理能力提至新高度 - OpenAI 公司被曝正在研发代号为“ 草莓 ”的全新项目,进一步延伸去年 11 月宣布的 Q* 项目,不断提高 AI 推理能力,让其更接近人类的…

27.数码管的驱动,使用74HC595移位寄存器芯片

PS:升腾A7pro系列FPGA没有数码管外设,因此以AC620FPGA为例展开实验。 (1)共阳极数码管和共阴极数码管示意图: AC620中的数码管属于共阳极数码管,段选端口(dp,g,f,e,d,c,b,a)低电平即可点亮led。人眼的视觉…

Flink CDC 同步表至Paimon 写数据流程,write算子和commit算子。

Flink CDC 同步表至Paimon 写数据流程,write算子和commit算子。(未吃透版) 流程图 一般基本flink cdc 任务同步数据至paimon表时包含3个算子,source、write、global commit。 source端一般是flink connector实现的连接源端进行获取数据的过程,本文探究的是 source算子获…

算法学习笔记(8.6)-编辑距离问题

目录 Question: 动态规划思路: 第一步:思考每轮的决策,定义状态,从而得到dp表 第二步:找出最优子结构,进而推导出状态转移方程 第三步:确定边界条件和状态转移顺序 代码实现&#xf…

BUUCTF逆向wp [FlareOn4]login

按老规矩先查壳&#xff0c;但本题是html文件&#xff0c;查壳会报错 在网上查了一下&#xff0c;可以用vscode查看源代码&#xff0c;我们用VS code打开。 <!DOCTYPE Html /> <html> <head> <title>FLARE On 2017</title> </head> <…

d3dcompiler_47.dll缺失怎么修复,一步步分析d3dcompiler_47.dll文件

d3dcompiler_47.dll缺失怎么修复&#xff1f;快速教大家解决出现d3dcompiler_47.dll问题的方法&#xff0c;一步步教大家快速有效的将丢失的d3dcompiler_47.dll如何修复。 一步步修复d3dcompiler_47.dll分析 1. 重新安装受影响的程序 如果是特定程序报告缺少d3dcompiler_47.d…

Vue实现滚动元素始终固定在最底部

1. 应用场景——聊天 在聊天的时候&#xff0c;展示聊天内容的元素是可以滚动的&#xff0c;通过上下滚动来查看过往消息。不过在首次打开聊天页面以及发送新消息时需要固定在滚动的最底部以及时展示最新的消息&#xff0c;这样才能获得比较好的用户体验。 效果&#xff1a; …

每日一练,java

目录 描述示例 总结 描述 题目来自牛客网 •输入一个字符串&#xff0c;请按长度为8拆分每个输入字符串并进行输出&#xff1b; •长度不是8整数倍的字符串请在后面补数字0&#xff0c;空字符串不处理。 输入描述&#xff1a; 连续输入字符串(每个字符串长度小于等于100) 输…

Wikijs 部署教程

以下是一个 Wikijs 部署的简单教程&#xff0c;涵盖了使用 Docker 和直接安装两种方式&#xff1a; 方法一&#xff1a; 使用 Docker (推荐) Docker 是一个方便快捷的方式来部署 Wikijs&#xff0c;它可以避免许多手动配置步骤。 安装 Docker: 按照 https://docs.docker.com/…