汇编语言期末复习不挂科——知识点总结(1)

在这里插入图片描述

合法标识符

标识符最多由31个字母,数字及规定的特殊字符(?@ _ $)等组成,不能用数字开头

关键字不能作为标识符

常见的偏移量伪指令

Even、Align、org

Even 偶对齐伪指令 本伪指令下面的内存变量从下一个偶地址单元开始分配

Align NUM,NUM必须是2的幂

ORG 数值表达式,本伪指令下面的内存变量从该“数值表达式”所指定的偏移量开始分配。

重复说明符

count DUP(表达式,表达式…)

例如:BUFFER DB 100DUP(?),重复100个?

LEA指令和OFFSET的联系与区别

相同:都是取偏移指令的操作

注意事项:1.lea、offset指令的源操作数必须是内存操作数

2.lea、offset指令的目的操作数必须是16位寄存器

3.lea指令不影响状态标志寄存器内容。

区别:4.offset指令的源操作数不能是下标(类似数组),lea可以。

5.offset在汇编时生效,lea在指令执行时才生效。

内存变量和标号的属性

1.类型属性操作符:TYPE是返回该变量所占字节数,或标号的远近类型。在这里插入图片描述

2.长度属性操作符:LENGTH是针对内存变量的操作符,它返回重复操作符DUP中的重复数。如果有嵌套的DUP,只返回最外层的重复数。如果没有DUP,则返回1

3.容量属性操作符:SIZE是针对内存变量的操作符

SIZE(变量)=LENGTH变量×TYPE变量

强制属性操作符

数据类型 PTR 地址表达式

例如:MOV byte ptr[BX],1H

存储单元别名操作符

操作符THIS的一般格式为:<变量名>equ this <类型>

<变量名>DB|DW|DD <表达式>

例如:WBUFFER EQU THIS WORD

BUFFER DB 20DUP(?)

进制伪指令RADIX

.RADIX exp 伪指令前面要用点开始,exp的值必须是[2,16]内的一个整数

.radix 8

B1 DB 10,11,12 这三个数是八进制

等价语句

符号名 EQU 表达式 ,其作用是用左边的符号名来代表右边的表达式

例如:GREETING EQU ‘How are you!’

在该定义之后,就可以使用符号GREETING 来代表字符串‘How are you!’

指令系统


指令系统是CPU指令的集合,CPU除了具有计算功能的指令外,还有一些实现其他功能的指令,也有为某种特殊的应用而增设的指令。

指令按其功能分成以下几大类:数据传送指令、标志位操作指令、算术运算指令、逻辑运算指令、移位操作指令、位操作指令、比较运算指令、循环指令、转移指令、条件设置字节指令、字符串操作指令、ASCII-BCD码运算调整指令和处理器指令等。

数据传送指令

  • 传送指令MOV

格式如下:MOV Reg/Mem,Reg/Mem/Imm

寄存器Reg 存储器Mem 立即数Imm


注意:①两个操作数的数据类型要相同,要同为8位、16位

②两个操作数不能同时为段寄存器,

③代码段寄存器CS不能为目的操作数,但可作为源操作数

④立即数不能直接传给段寄存器

⑤立即数不能作为目的操作数

⑥指令指针IP,不能作为MOV指令的操作数

⑦两个操作数不能同时是存储单元

在这里插入图片描述

  • 传送—— 填充指令

是把位数短的数据传送给位数长的目的操作数

MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm

MOVSX用符号位填充,MOVZX用0来填充

  • 交换指令XCHG

XCHG Reg/Mem,Reg/Mem

作用是交换两个寄存器,寄存器不能是段寄存器,两个操作数不能同时为内存变量

  • 取有效地址指令LEA

指令LEA是把一个内存变量的有效地址送给指定的寄存器,格式:LEA Reg,Mem

LEA指令和OFFSET的联系与区别

相同:都是取偏移指令的操作

注意事项:1.lea、offset指令的源操作数必须是内存操作数

2.lea、offset指令的目的操作数必须是16位寄存器

3.lea指令不影响状态标志寄存器内容。

区别:4.offset指令的源操作数不能是下标(类似数组),lea可以。

5.offset在汇编时生效,lea在指令执行时才生效。

  • 取段寄存器指令

LDS/LES Reg,Mem

该组指令的功能是把内存单元的一个低字传送给指令中指定的16位寄存器,把随后的一个高字传给相应的段寄存器。

若Reg是16位寄存器,那么Mem必须是32位指针

  • 进栈操作

PUSH Reg/Mem

  • 出栈操作

POP Reg/Mem

  • 转换指令XLAT

无操作数,但有两个隐含操作数BX和AL

指令格式如下:XLAT/XLATB,其功能是把BX的值作为内存字节数首地址,下标为AL的数组元素的值传送给AL

FLAG寄存器

  • ZF标志,零标志:计算结果为0置1,不为0置0

  • PF标志,奇偶标志:计算结果二进制数有奇数个1还是偶数个1,奇数个1写0,偶数个1写1

  • SF标记,符号标记:运算结果为正,置0;为负,置1

  • CF标志,进位标志:最高位是否有进位或错误,有置1,没有置0

  • OF标志,溢出标志:8位数是否超过-128到127,是溢出置1

  • AF标志,辅助进位标志,低4位是否向高4位进位或借位,是置1,否置0

算术运算指令


加法指令

1.ADD加法指令:把源操作数的值加到目的操作数

2.ADC带进位加指令:把源操作数和进位标志CF一起加到目的操作数

3.INC指令:操作数的值加1

4.交换加指令XADD:先交换两个操作数的值,在镜像加法运算

减法指令

1.SUB减法指令:从目的操作数中减去源操作数

2.SBB带借位减法:把源操作数和标志位CF的值从目的操作数中一起减去

3.DEC减法:把源操作数的值减去1

4.求补指令NEG:改变操作数的正负号

乘法指令

MUL指令:隐含目的操作数,把源操作数和AL(AX)的值相乘保存到AX(DX+AX)中

除法指令

DIV指令:在这里插入图片描述

类型转换指令


系统提供了四条数据类型转换指令:CBW、CWD、CWDE、CDQ

CBW字节转换为字指令:隐含操作数AH和AL,其功能是用AL的符号位去填充AH

CWD字转换为双字指令:隐含操作数DX和AX,其功能是用AX的符号位去填充DX

逻辑运算指令


逻辑与指令

指令格式:AND Reg/Mem,Reg/Mem/Imm

在这里插入图片描述

逻辑或指令

指令格式:OR Reg/Mem,Reg/Mem/Imm

在这里插入图片描述

逻辑非

指令格式:NOT Reg/Mem

在这里插入图片描述

在这里插入图片描述

TEST指令

格式:TEST Reg/Mem,Reg/Mem/Imm

功能是对两个操作数进行逻辑与运算,但结果不送至目的操作数,只是影响状态标志

作用是检测一些条件是否满足,但又不希望改变操作数,即使用于检查一个字节或字中的某些特定位是否有一位为1

移位指令


1.SHL指令(逻辑左移)

相当于将数倍增

在这里插入图片描述

2.SHR指令(逻辑右移)

将一个无符号数向右移动,左边出现空位补0,右边低位移至CF

在这里插入图片描述

3.SAL指令(算术左移)

SAL指令同SHL,实际上SHL和SAL是同一条指令的两种助记符,它们执行的操作完全一样。

4.SAR指令(算术右移)

SAR类似于SHR,SAR同SHR的区别是:SHR连同符号位一起右移,左边最高位出现的空位补0;而SAR右移时符号位不动,左边出现的空位补上符号位的值。

其中值得注意的一点是:如果目的操作数是负数,且其中具有1的位数移出后,则SAR指令产生的结果与用整数IDIV指令产生的结果不一样。

例如:-5经SAR右移之后得-3,IDIV之后为-2

5.ROL指令(循环左移)

功能:每执行一次,把最高位移到最低位,同时还把最高位移到CF

在这里插入图片描述

6.ROR指令(循环右移)

与ROL指令类似

在这里插入图片描述

7.RCL指令(通过进位循环左移)

RCL指令对目的操作数1字节或字中的各位循环左移,进位标志CF被看作目的操作数的“一部分”。每执行一次,CF的值循环移入目的操作数的低位,而目的操作数的最高位移入CF。

在这里插入图片描述

8.RCR指令(通过进位循环右移)

RCR与RCL类似,

在这里插入图片描述

比较指令CMP

功能:用第二个操作数去减第一个操作数,并根据所得的差设置有关标志位,为随后的条件转移指令提供条件,但并不保存该差,所以不会改变指令中的操作数。

循环指令

CX寄存器中存放循环次数,一般循环跳转是,CX先减1,后判断CX是否为0

LOOP 标号

在这里插入图片描述

相等或为零循环指令

LOOPE/LOOPZ 标号

在这里插入图片描述

在这里插入图片描述

LOOPNE/LOOPNZ 标号

在这里插入图片描述

在这里插入图片描述

循环计数器为零转指令

在这里插入图片描述

转移指令

1.无条件转移指令JMP

格式:JMP 标号

2.条件转移指令

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-qfMNioc9-1715276224182)]

[外链图片转存中…(img-tlfhxyG9-1715276224183)]

[外链图片转存中…(img-OCBzhn1l-1715276224183)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言(各章知识点) 课程介绍 第1章 预备知识  1.1 汇编语言的由来及其特点   1 机器语言   2 汇编语言   3 汇编程序   4 汇编语言的主要特点   5 汇编语言的使用领域  1.2 数据的表示和类型   1 数值数据的表示   2 非数值数据的表示   3 基本的数据类型  1.3 习题 第2章 CPU资源和存储器  2.1 寄存器组   1 寄存器组   2 通用寄存器的作用   3 专用寄存器的作用  2.2 存储器的管理模式   1 16位微机的内存管理模式   2 32位微机的内存管理模式  2.3 习题 第3章 操作数的寻址方式  3.1 立即寻址方式  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址的寻址方式  3.9 操作数寻址方式的小结  3.10 习题 第4章 标识符和表达式  4.1 标识符  4.2 简单内存变量的定义   1 内存变量定义的一般形式   2 字节变量   3 字变量   4 双字变量   5 六字节变量   6 八字节变量   7 十字节变量  4.3 调整偏移量伪指令   1 偶对齐伪指令   2 对齐伪指令   3 调整偏移量伪指令   4 偏移量计数器的值  4.4 复合内存变量的定义   1 重复说明符   2 结构类型的定义   3 联合类型的定义   4 记录类型的定义   5 数据类型的自定义  4.5 标号  4.6 内存变量和标号的属性   1 段属性操作符   2 偏移量属性操作符   3 类型属性操作符   4 长度属性操作符   5 容量属性操作符   6 强制属性操作符   7 存储单元别名操作符  4.7 表达式   1 进制伪指令   2 数值表达式   3 地址表达式  4.8 符号定义语句   1 等价语句   2 等号语句   3 符号名定义语句  4.9 习题 第5章 微机CPU的指令系统  5.1 汇编语言指令格式   1 指令格式   2 了解指令的几个方面  5.2 指令系统   1 数据传送指令   2 标志位操作指令   3 算术运算指令   4 逻辑运算指令   5 移位操作指令   6 位操作指令   7 比较运算指令   8 循环指令   9 转移指令   10 条件设置字节指令   11 字符串操作指令   12 ASCII-BCD码调整指令   13 处理器指令  5.3 习题 第6章 程序的基本结构  6.1 程序的基本组成   1 段的定义   2 段寄存器的说明语句   3 堆栈段的说明   4 源程序的结构  6.2 程序的基本结构   1 顺序结构   2 分支结构   3 循环结构  6.3 段的基本属性   1 对齐类型   2 组合类型   3 类别   4 段组  6.4 简化的段定义   1 存储模型说明伪指令   2 简化段定义伪指令   3 简化段段名的引用  6.5 源程序的辅助说明伪指令   1 模块名定义伪指令   2 页面定义伪指令   3 标题定义伪指令   4 子标题定义伪指令  6.6 习题 第7章 子程序和库  7.1 子程序的定义  7.2 子程序的调用和返回指令   1 调用指令   2 返回指令  7.3 子程序的参数传递   1 寄存器传递参数   2 存储单元传递参数   3 堆栈传递参数  7.4 寄存器的保护与恢复  7.5 子程序的完全定义   1 子程序完全定义格式   2 子程序的位距   3 子程序的语言类型   4 子程序的可见性   5 子程序的起始和结束操作   6 寄存器的保护和恢复   7 子程序的参数传递   8 子程序的原型说明   9 子程序的调用伪指令   10 局部变量的定义  7.6 子程序库   1 建立库文件命令   2 建立库文件举例   3 库文件的应用   4 库文件的好处  7.7 习题 第8章 输入输出和中断  8.1 输入输出的基本概念   1 I/O端口地址   2 I/O指令  8.2 中断   1 中断的基本概念   2 中断指令   3 中断返回指令   4 中断和子程序  8.3 中断的分类   1 键盘输入的中断功能   2 屏幕显示的中断功能   3 打印输出的中断功能   4 串行通信口的中断功能   5 鼠标的中断功能   6 目录和文件的中断功能   7 内存管理的中断功能   8 读取和设置中断向量  8.4 习题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值