微机原理常用汇编指令

基本知识: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.常用运算指令

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

3.比较指令与转移指令

指令格式功能
CMPCMP AX,BX结果为AX-BX的值,但不赋给AX,而是改变标志位ZF、OF、CF
JMPJMP A1无条件跳转至A1处
JB/JCJB A1小于或CF=1则跳转至A1处
JNB/JAE/JNCJNB A1大于等于或CF=0则跳转至A1处
JP/JPEJP A1奇偶标志PF=1则转A1
JNP/JPOJNP A1奇偶标志PF=0则转A1
JZ/JEJZ A1为零或ZF=1则转A1
JNZ/JNEJNZ A1不为零或ZF=0则转A1
JSJS A1SF=1则转A1
JNSJNS A1SF=0则转A1
JOJO A1OF=1则转A1
JNOJNO A1OF=0则转A1
JAJA A1CF=0且ZF=0,则高于时转A1(无符号数)
JNA/JBEJNA A1CF=1或ZF=1,则低于时转A1(无符号数)
JGJG A1SF⊕OF=0且ZF=0,则大于时转A1(有符号数)
JGEJGE A1SF⊕OF=0或ZF=1,则大于或等于时转A1
JLJL A1SF⊕OF=1且ZF=0,则小于时转A1
JLEJLE A1SF⊕OF=1或ZF=1,则小于等于时转A1

4.循环指令

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

5.逻辑指令

指令格式功能
NEGNEG AX求补指令,使该数变为绝对值相等,符号相反的另一数
ANDAND AX,FEH逻辑与,常用于指定位的保留与舍弃
OROR AX,BX逻辑或,常用于两操作数的组合
NOTNOT AX逻辑非
XORXOR 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个字节类型的重复数据

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

7.地址相关指令

指令格式功能
LEALEA AX,[BX]传偏移地址
LDSLDS AX,[BX]传地址指针,传给reg与DS
LESLES AX,[BX]传地址指针,传给reg与ES

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

指令格式功能
SAL/SHLSAL AX,1将AX中存的数算数/逻辑左移一位,最高位送CF,最低位补零
SARSAR AX,1将AX中存的数算数右移一位,最高位补原最高位值,最低位送CF
SHRSHR AX,1将AX中存的数逻辑右移一位,最高位补零,最低位送CF
ROLROL AX,1将AX中存的数循环左移一位,最高位送CF,最低位由原最高位传入
RORROR AX,1将AX中存的数循环右移一位,最低位送CF,最高位由原最低位传入
RCLRCL AX,1将AX中存的数带进位循环左移一位,最高位送CF,最低位由CF值传入
RCRRCR AX,1将AX中存的数带进位循环右移一位,最低位送CF,最高位由CF值传入

在这里插入图片描述
9.堆栈指令

指令格式功能
PUSHPUSH AX入栈指令,BL->SP,BH->SP-1,SP=SP-2
POPPOP AX出栈指令,BL<-SP,BH<-SP-1,SP=SP+2
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值