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

简介: 汇编语言期末复习不挂科——知识点总结(二)


数据传送指令


传送指令MOV

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

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


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

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

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

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

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

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

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

image.png


传送—— 填充指令

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

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指令:


image.png

类型转换指令

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

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

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


逻辑运算指令

逻辑与指令

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

image.png

逻辑或指令

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

image.png

逻辑非

指令格式:NOT Reg/Mem

image.png

image.png

TEST指令

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

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

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


移位指令

1.SHL指令(逻辑左移)

相当于将数倍增

image.png


2.SHR指令(逻辑右移)

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

image.png

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

image.png

6.ROR指令(循环右移)

与ROL指令类似

image.png

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

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

image.png

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

RCR与RCL类似,

image.png

比较指令CMP

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


循环指令

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

LOOP 标号

image.png

相等或为零循环指令

LOOPE/LOOPZ 标号

image.png

image.png


LOOPNE/LOOPNZ 标号

image.png

image.png

循环计数器为零转指令

image.png

转移指令

1.无条件转移指令JMP

格式:JMP 标号

2.条件转移指令

image.png

image.png

image.png


字符串操作指令

字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是隐含指针DS:SI或ES:DI来指定的。

字符串操作指令可对内存单元按字节、字或双字进行处理,并能根据操作对象的字节数使变址寄存器SI和DI增减1、2、4.

具体规定如下:

(1)当DF=0时,变址寄存器SI(和DI)增加1、2、4

(2)当DF=1时,变址寄存器SI(和DI)减少1、2、4

实例:字符串输出

方法1:利用40号中断功能,BX=1,CX=输出字符个数,DS:DX指向要输出的串首

image.png

方法2:利用9号中断功能。DS:DX指向要输出的串首,一直输出到“$”结束。

image.png


字符串输入

方法:利用OAH号中断功能,DS:DX指向存入的首地址。其中,DS:DX内容是输入的最大字节数,是需要事先设置好的;DS:DX+1是实际输入的字节数,是输入成功后的返回值;DS:DX+2是真正的存入的内容首位置。

image.png

image.png

字符串操作指令


取字符串数据指令LODS

格式:LODS source ;source为字符串源地址

LODSB/LODSW ;字节/字

功能:LODS指令将SI指向的源串元素根据其地址表达式的属性来决定读取一个字节、字或双字,将其传送到AL,AX,同时根据DF和串的类型修改SI的内容使之指向串的下一个元素。

该指令不涉及目标串,故DI的值保持不变。一般使用LODS指令不加重复前缀。

image.png

-存字符串数据置零STOS

格式:STOS 内存地址 ;内存地址为目标字符串的目的地址

STOSB/STOSW ;字节/字

功能:STOS指令将累加器AL、AX或EAX的内容传送到由ES:DI所指向的目的串中,同时根据DF和串的类型修改DI以指向下一个串元素。

注意:LODS,STOS指令都不影响状态标志寄存器的状态。

image.png


字符串传送指令MOVS

格式:MOVS 目的串的目的地址;源字符串源地址

MOVSB/MOVSW ;字节/字

功能:MOVS指令是把DS:SI所指向的字节、字或双字传送给ES:DI所指向的内存单元,并根据标志位DF和串的类型修改寄存器DI和SI。指令的执行不影响任何标志位。

MOVS指令前可以加前缀REP成为REP MOVS,其作用如同以下的指令序列:

L:MOVS

LOOP L

image.png


字符串比较指令CMPS

格式:CMPS source,destination

CMPSB/SMPSW

CMPSD

功能:CMPS指令是把DS:SI和ES:DI指向的字节、字或双字的值相减,将结果反映到状态标志位上,而不送至任何一个操作数。同时修改SI和DI使之指向下一个元素。标志位AF,CF,OF,PF,SF和ZF反映了目的串和源串对应元素之间的关系。


字符串扫描指令SCAS

格式:SCAS destination ;destination 为扫描累加

SCASB/SCASW ;器值的字符串地址

SCASD ;字节/字

功能:SCAS指令从累加器AL,AX中减去由ES:DI指向的目标串中的元素,结果不送到任何地方,只改变状态标志位;同时,根据DF和串的类型修改DI,使之指向串的下一个元素。受影响的标志位包括AF,CF,OD,PF,SF和ZF.

十分重要:实现一个字符的输入AH=1INT21HAL=输入的字符实现一个字符的输出AH=2DL=输出的字符INT21H
目录
相关文章
|
4月前
|
存储 移动开发
单片机----汇编语言入门知识点
单片机----汇编语言入门知识点
59 2
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
汇编语言与微机原理 期末半开卷复习整理(下)
汇编语言与微机原理 期末半开卷复习整理(下)
133 0
汇编语言与微机原理 期末半开卷复习整理(下)
汇编语言与微机原理 期末半开卷复习整理(上)
汇编语言与微机原理 期末半开卷复习整理(上)
197 0
汇编语言与微机原理 期末半开卷复习整理(上)
汇编语言期末复习不挂科——知识点总结(一)
汇编语言期末复习不挂科——知识点总结
382 0
汇编语言期末复习不挂科——知识点总结(一)
|
4月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
91 1
|
4月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
204 0
|
2月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表

相关实验场景

更多