机器指令:cpu能直接识别并遵照执行的指令,用二进制编码表示,由操作码,操作数组成,编码只含二进制0或1
机器语言:用二进制编码组成的机器指令的集合和一组使用机器指令的规则
汇编语言:对机器指令中的操作码用英文单词的缩写描述(助记符),对操作数用符号、变量、常量描述
汇编语言是一种符号语言。汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编”,这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序
汇编语言由以下三类指令组成
l在书写不同进位计数制数时,常常在尾部用一个字母来表示该数是什么进位计数制的数。结尾用B(2进制数)、O(8进制数)、D(10进制数)、H(16进制数)、缺省为十进制数。
十进制转换为二进制:
对于十进制的小数部分除了可以使用降幂法也可采用乘法,即不断乘2,并计下整数,而小数部分再乘2,直到结果为0为止。

十进制转换为十六进制:、
对于十进制数的小数部分除了可以使用降幂法也可采用乘法,即不断乘16,并计下整数,而小数部分再乘16,直到结果为0为止
十六进制的乘法例子:

数的补码的具体操作是:
正数不变,负数则用绝对值取反+1

字符的表示:

基本逻辑运算:
16位结构的CPU具有以下几方面的结构特征:
CPU对内存的读写操作

通用数据寄存器
地址寄存器
段寄存器、
指令指针寄存器
8086CPU的工作过程
CS和IP的内容提供了CPU要执行指令的地址
堆栈
根据不同用途,接口中的寄存器端口分为以下三类
CPU与I/O接口中端口的信息传输也都是通过数据总线进行的
系统工作过程
常用DOS命令
在Win7系统中执行汇编
21H号中断是Dos提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能
汇编语言程序设计需要采用系统的各种功能程序
功能调用的格式通常按照如下4个步骤进行
计算机中的指令由操作码和操作数组成
8086汇编语言指令的一般格式为:【标号:】指令助记符 【操作数】 【;注释】
立即寻址方式:操作数就在指令中,紧跟在操作码之后,操作数作为指令的一部分存放在代码段
寄存器寻址方式:操作数就是寄存器中的值,指令中给出寄存器名
直接寻址方式:操作数的有效地址EA就在指令中,机器默认段地址在DS中



寄存器间接寻址方式:操作数的有效地址在寄存器中,只允许使用BX、BP、SI和DI寄存器


寄存器相对寻址方式:操作数的有效地址是一个寄存器和位移量之和


基址变址寻址方式:操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和

相对基址变址寻址方式:操作数的有效地址是一个基址寄存器和一个变址寄存器以及一个位移量之和

8086汇编语言指令的一般格式为:【标号】 指令助记符 【操作数】 【;注释】
8086指令系统可以分为5组
数据传送指令
通用数据传送指令
MOV 传送

双操作数指令的规定


PUSH 进栈

POP 出栈


XCHG 交换

累加器专用传送指令
其中I/O端口是CPU与外设传送数据的接口,单独编址,不属于内存,端口地址范围0000~FFFFH,这组指令只限于AX,AL累加器
IN;从I/O端口输入


OUT;向I/O端口输出


XLAT;换码(查表)

地址传送指令
LEA有效地址送寄存器指令

LDS指针送寄存器和DS指令


LES指针送寄存器和ES指令


标志寄存器传送指令

算术运算指令
类型扩展指令

加法指令

ADD加法指令


ADC带进位加法指令


INC 加1指令


减法指令
SUB减法指令

SBB带借位减法指令

DEC减1指令

NEG求补指令

可以看出,NEG指令实际上就是求数X的相反数,即求0-X,只有当X=0时,CF=0,其它情况CF=1
CMP比较指令

CMP指令虽作减法,但不回送结果,只是产生标志位,为程序员比较两个数的大小提供判断依据
乘法指令
MUL无符号数乘法指令

IMUL带符号数乘法指令

两个相乘的数必须长度相同
SRC不能是立即数
除法指令
DIV无符号数除法指令

IDIV带符号数除法指令

BCD码的十进制调整指令
前面所介绍的所有算术运算指令都是二进制数的运算,为便于十进制运算,计算机提供了十进制调整指令,在二进制数计算的基础上,给予十进制调制,直接得到十进制结果
BCD(8421码):用二进制编码表示十进制数

十进制数转换为BCD码:
压缩的BCD码调整指令主要有两条:
DAA;加法十进制调整指令


DAS;减法十进制调整指令


逻辑指令
AND;与指令

OR;或指令

NOT;非指令

XOR;异或指令

TEST;测试指令

移位指令
SHL;逻辑左移
SAL;算术左移
SHR;逻辑右移
SAR;算术右移
ROL;循环左移
ROR;循环右移
RCL;带进位循环左移
RCR;带进位循环右移

算术移位指令适用于带符号数运算,SAL用来乘以2,SAR用来除以2;逻辑移位指令适用于无符号数运算,SHL用来乘以2,SHR用来除以2
串操作指令
MOVS;串传送

CMPS;串比较

SCAS;串扫描

STOS;存入串

LODS;从串取

串操作指令每次处理的是字节或字,因此需要重复执行串操作指令才能处理完一个数据串

程序转移指令
无条件转移指令
JMP跳转指令:无条件转移到指令指定的地址去执行程序,转移的目标地址和本跳跳转指令在同一个代码段,则为段内转移;否则是段间转移。转移的目标地址在跳转指令中直接给出,则为直接转移;否则是间接转移
段内直接转移

段内间接转移

段间直接转移

段间间接转移

条件转移指令
条件转移指令根据上一条指令所设置的标志位来判别测试条件,从而决定程序转向,通常在使用条件转移指令之前,应有一条能产生标志位的前导指令,如CMP指令。汇编指令格式中,转向地址由标号表示,所有的条件转移指令都不影响标志位
根据单个条件标志的设置情况转移



测试CX寄存器的值为0则转移

比较两个无符号数,根据结果转移

比较两个带符号数,根据结果转移

循环指令

汇编语言程序的语句:指令、伪指令、宏指令
指令是在程序运行期间由计算机的CPU来执行的
伪指令:主要用来定义数据变量和程序结构。伪指令是在汇编程序对源程序进行汇编期间由汇编程序处理的操作
处理机选择伪指令:告诉汇编程序选择哪一种指令系统,默认选择8086指令系统
assume伪指令只是指定把某个段分配给哪个段寄存器,并不能把段地址装入段寄存器中,所以在代码段中,还必须把段地址装入相应的段寄存器中,通常用两条MOV指令完成这一操作,但是代码段不需要这样做,它在程序初始化的时候完成
简化的段定义伪指令

程序开始和结束伪指令

标号与变量区别
程序中默认的数据为十进制数。当数据第一位不是数字时,应在前面加0,负数均为补码形式存放。字符串用’‘括起来。’?'表示只分配存储单元,不存入数值
表达式赋值伪指令”EQU“和”=“

过程定义伪指令

当一个表达式中同时有几个运算符时,按运算符优先级顺序执行,汇编源程序时,汇编程序按照下列规则计算表达式的值:
汇编语言源程序有两类:
EXE文件除了程序本身,还有文件头
COM文件由本身的二进制代码组成,它没有EXE文件那样具有文件信息的标题区
并不是具有COM文件的源程序格式,就一定是COM文件,COM文件也是通过LINK连接程序产生,连接命令后面必须加上/T
如果同一目录中有两个文件,如PROG.EXE和PROG.COM,当键入PROG执行程序时,COM文件将被执行,键入PROG.EXE才能执行PROG.EXE
单分支结构程序

多分支程序
循环程序结构


计数循环程序
条件循环程序
上一篇:MySQL——进阶