微机原理常用汇编指令

基本知识:8086/8088各寄存器的使用
1.数据寄存器:AX,BX,CX,DX,都可以拆分为_L与_H使用,即将16位的通用寄存器分为低八位和高八位使用(如AL、AH)

2.地址指针寄存器:
SP:堆栈指针寄存器,内容为栈顶偏移地址
BP:基址指针寄存器,常用于访问内存时存放内存单元偏移地址

3.变址寄存器:
SI、DI,常用于指令间的变址寻址或间接寻址

4.段寄存器:
CS:16位代码段,8086/8088复位后只有CS值不为0,为FFFFH
DS:16位数据段
ES:16位附加段
SS:16位堆栈段

5.控制寄存器
IP:指令指针寄存器,内容为下一条要执行指令的偏移地址
FLAGS:标志寄存器
控制标志:CF(进位标志)、PF(奇偶标志)、AF(辅助进位标志(第四位的进位情况))、ZF(零标志)、SF(符号标志)、OF(溢出标志)
状态标志:TF(跟踪标志)、IF(中断标志)、DF(方向标志)

存储器编址规则
指令地址:CSX10H+IP
堆栈操作地址:SSX10H+SP
操作数地址:DS(ES)X10H+偏移地址

常用指令意义与规则

1.数据传递指令MOV
格式:MOV reg,reg
使用规则:
①不允许将IP作为目的寄存器
②不允许mem<-mem,不允许seg<-seg
③立即数不允许作为目的数
④不允许立即数传给段寄存器
⑤源操作数与目的操作数类型要一致

2.常用运算指令

指令 格式 功能
ADD ADD AX,BX 将BX中数值与AX中数值相加,结果放在AX中
ADC ADC AX,BX 带进位的加法(会加上CF的值),常用于高位加法
INC INC AX 加一指令,不影响标志位
SUB SUB AX,BX 将AX与BX相减结果送入AX中
SBB SBB AX,BX 带借位减法(会减去CF值),常用于高位减法
DEC DEC AX 减一指令
AAA AAA 非压缩BCD码调整指令(调整为标准二进制)

3.比较指令与转移指令

指令 格式 功能
CMP CMP AX,BX 结果为AX-BX的值,但不赋给AX,而是改变标志位ZF、OF、CF
JMP JMP A1 无条件跳转至A1处
JB/JC JB A1 小于或CF=1则跳转至A1处
JNB/JAE/JNC JNB A1 大于等于或CF=0则跳转至A1处
JP/JPE JP A1 奇偶标志PF=1则转A1
JNP/JPO JNP A1 奇偶标志PF=0则转A1
JZ/JE JZ A1 为零或ZF=1则转A1
JNZ/JNE JNZ A1 不为零或ZF=0则转A1
JS JS A1 SF=1则转A1
JNS JNS A1 SF=0则转A1
JO JO A1 OF=1则转A1
JNO JNO A1 OF=0则转A1
JA JA A1 CF=0且ZF=0,则高于时转A1(无符号数)
JNA/JBE JNA A1 CF=1或ZF=1,则低于时转A1(无符号数)
JG JG A1 SF⊕OF=0且ZF=0,则大于时转A1(有符号数)
JGE JGE A1 SF⊕OF=0或ZF=1,则大于或等于时转A1
JL JL A1 SF⊕OF=1且ZF=0,则小于时转A1
JLE JLE A1 SF⊕OF=1或ZF=1,则小于等于时转A1

4.循环指令

指令 格式 功能
LOOP LOOP A1 使CX自减,若CX为0则跳转至标志位A1处继续执行
LOOPZ LOOPZ A1 使CX自减,若CX不为零且ZF=1则跳转至A1处继续执行
LOOPNZ LOOPNZ A1 使CX自减,若CX不为零且ZF=0则跳转至A1处继续执行
JCXZ JCXZ A1 若CX为零,则跳转至A1处继续执行

5.逻辑指令

指令 格式 功能
NEG NEG AX 求补指令,使该数变为绝对值相等,符号相反的另一数
AND AND AX,FEH 逻辑与,常用于指定位的保留与舍弃
OR OR AX,BX 逻辑或,常用于两操作数的组合
NOT NOT AX 逻辑非
XOR XOR AX,AX 逻辑异或,常用于寄存器清零

6.变量操作指令
定义一个变量:PDATA DW 20 DUP(?),其中”PDATA“为变量名,也称之为所定义的数据区首地址

数据定义伪指令:DB(定义字节,16位,两个存储空间),DW(定义字,216位,四个存储空间),DD(定义双字,2216位,八个存储空间),DT(定义10字节,1016位,20个存储空间)

数据存储规则:若数据为字节型,则按存储单元由小到大存,若数据为字型,则应该高位存高位,低位存低位。此外,若存入的数为负数,则应该存其补码。(例如将DW定义的-5D存入编址为0000H的空间处,则在0000H处存FB,在0001H处存FF,也即-5D在存储单元中存的是FFFBH)

表达式DUP的用法:DUP用于定义重复的数据单元,如DB N DUP(重复数据),表示定义了N个字节类型的重复数据

指令 格式 功能
OFFSET MOV SI,OFFSET PDATA 将PDATA的偏移地址传入SI
SEG MOV AX,SEG PDATA 将PDATA的段基址(段首地址除10H)存入AX
TYPE MOV BL,TYPE PDATA 将PDATA的类型值送BL
LENGTH MOV BH,LENGTH PDATA 求PDATA的项数
SIZE MOV CL,SIZE,PDATA 求所占存储单元数
EQU COUNT EQU $-BUF 等值指令,即COUNT=$-BUF
ORG ORG 2000H 设置$的值为表达式的值

7.地址相关指令

指令 格式 功能
LEA LEA AX,[BX] 传偏移地址
LDS LDS AX,[BX] 传地址指针,传给reg与DS
LES LES AX,[BX] 传地址指针,传给reg与ES

8.移位指令
注意只有移动一位时可以直接写,超过一位要先将移动位数写入寄存器,再用该寄存器作为移位的源操作数,移位对象作为目的操作数。

指令 格式 功能
SAL/SHL SAL AX,1 将AX中存的数算数/逻辑左移一位,最高位送CF,最低位补零
SAR SAR AX,1 将AX中存的数算数右移一位,最高位补原最高位值,最低位送CF
SHR SHR AX,1 将AX中存的数逻辑右移一位,最高位补零,最低位送CF
ROL ROL AX,1 将AX中存的数循环左移一位,最高位送CF,最低位由原最高位传入
ROR ROR AX,1 将AX中存的数循环右移一位,最低位送CF,最高位由原最低位传入
RCL RCL AX,1 将AX中存的数带进位循环左移一位,最高位送CF,最低位由CF值传入
RCR RCR AX,1 将AX中存的数带进位循环右移一位,最低位送CF,最高位由CF值传入


9.堆栈指令

指令 格式 功能
PUSH PUSH AX 入栈指令,BL->SP,BH->SP-1,SP=SP-2
POP POP AX 出栈指令,BL<-SP,BH<-SP-1,SP=SP+2
物联沃分享整理
物联沃-IOTWORD物联网 » 微机原理常用汇编指令

发表评论