汇编语言部分知识点整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8大通用寄存器:
EAX累加器常用、放数据
EBX基址寄存器常用、放地址
ECX计数器少用、多用于循环操作、控制循环次数egloop
EDX数据寄存器常用!放数据(要输出的字符串地址放在DX、字符的ASCII码放在DL里ESI 源变址寄存器放源操作数(数组或字符串)的地址即指向他
EDI目的变址寄存器放目的操作数(数组/字符串)的地址即指向他
EBP 基址指针寄存器一般不用,指向堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量
ESP堆栈指针寄存器指向栈顶的数据,在涉及堆栈操作的指令中自加自减,一般不能自主变化。
6大段寄存器:
CS 代码段,存放程序中的指令代码
SS 堆栈段,指明程序使用的堆栈区域
DS 数据段,存放当前运行程序所用的数据
ES 附加数据段特别的:专为处理数据串设计的串操作指令必须使用附加数据段作为其目的操作数的存放区域。
FS 附加数据段
GS 附加数据段
另外两个常用寄存器:
FLAGS状态寄存器:CF(进位)ZF(零)OF(溢出)PF(奇偶)SF(符号)
AF(调整一般不用)(DF IF)
IP 16位(EIP 32位)指令指针寄存器,专门用来存放将要执行的指令在主存中的位置。特别的EIP有自动增量功能。一般不能改,不可中断。但可以调整其指令执行顺序实现循环
MASM操作符:对常量、变量、地址等进行操作的关键字。
Eg:+ - * / offset(取得变量的偏移地址)
程序模板:
;example.asm in DOS
.model small
.486
.stack (可以没有)
.data (可以没有)
……;数据定义eg:msg db ‘hello,Sarah!54581415’
.code ;定义代码段
.startup ;程序执行开始,同时设置数据段寄存器DS指向程序的数据段
……;主程序eg:mov dx,offset msg ……等等
……
……
.exit ;程序执行结束,返回DOS
……;子程序(可以没有)
.end ;汇编结束
调用DOS操作系统功能:
Eg:mov ah,9 ;实现输出一个字符串(DX存放其字符串地址)
Int 21h
Eg:mov ah,2 ;实现输出一个字符(DL存放其ASCII码)
Int 21h
Eg:mov ah,0ah ;实现输入一个字符串(DX指向其首地址=’offset msg +2’)Int 21h
Eg:mov ah,1 ;实现输出一个字符串(AL存放输入字符的ASCII码)Int 21h ;调用指令,不可少!
编译连接:ML eg101.asm
运行:eg101.asm
常用的地址和类型操作符:
Mov bx,wvar[2]
Mov edx,$
Mov bx,offset x
Mov ax,word ptr bvar
Mov bx , type bvar
mov si, lengthof array
Mov di , sizeof array
数据寻址方式——如何访问操作数
1立即数寻址:立即数:已经随指令代码进入处理器的数据,可直接使用。
只用于源操作数;
2寄存器寻址:数据已经事先保存在处理器的寄存器里。
寄存器操作数(使用寄存器名表示他保存的数据。)可同时或单独用于目的/源操作数。
要保持前后类型一致(同样长度)。
3存储器寻址:数据还在主存中,需要通过[段基地址]:[偏移地址]
默认:一般数据在DS段寄存器;(有效地址EA——偏移地址下同)
读取指令在CS段寄存器;(EIP)
堆栈操作在SS段寄存器;(ESP)
EBP、ESP为基地址的数据访问在SS段寄存器;(有效地址EA)
串指令源操作数在DS段寄存器;(ESI)
(EDI)
[偏移地址]
32位有效地址=基址寄存器+(变址寄存器*比例)+位移量-32位基址寄存器均可;变址寄存器不能是ESP;比例=1/2/4/8字节;位移量是8/32位
16位有效地址=基址寄存器+变址寄存器+位移量
基址寄存器只能是BX/BP;变址寄存器只能是SI/DI;位移量是8/16位有符号
指令助记符reg , imm/reg/mem
指令助记符mem , imm/reg
指令汇总表:
程序结构:
顺序——按书写的前后顺序执行每条指令。
分支——首先利用CMP、TEXT、加减运算、逻辑运算等影响状态标志的指令形成条件,然后利用条件转移指令判断由标志表达的条件,并根据状态控制程序转移到不同的
循环