【沧海拾昧】汇编语言:8086/8088常用指令集

您所在的位置:网站首页 指令书写格式 【沧海拾昧】汇编语言:8086/8088常用指令集

【沧海拾昧】汇编语言:8086/8088常用指令集

2024-07-10 04:40| 来源: 网络整理| 查看: 265

 #C0301

沧海茫茫千钟粟,且拾吾昧一微尘

——《沧海拾昧集》@CuPhoenix

【阅前敬告】

沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系

如有问题定为本集记录有谬,切勿深究

目录

一、数据传送类

1、通用数据传送指令【MOV】

2、堆栈指令【PUSH/POP】

3、交换指令【XCHG】

4、输入输出指令【IN/OUT】(累加器专用指令)

5、换码指令(查表指令)【XLAT】(累加器专用指令)

6、地址传送指令【LEA/LDS/LES】

7、标志寄存器传送指令【LAHF/SAHF】

二、算术运算类

1、无进位/带进位/增量加法指令【ADD/ADC/INC】

2、无借位/带借位/减量减法指令【SUB/SBB/DEC】

3、求补指令【NEG】

4、比较指令【CMP】

5、无符号/有符号乘法指令【MUL/IMUL】

6、无符号/有符号除法指令【DIV/IDIV】

7、扩展指令【CBW/CWD】

8、非压缩/压缩BCD码加法十进制调整指令【AAA/DAA】

9、非压缩/压缩BCD码减法十进制调整指令【AAS/DAS】

10、非压缩BCD码乘法十进制调整指令【AAM】

11、非压缩BCD码除法十进制调整指令【AAD】

三、逻辑运算与移位指令

1、取反指令【NOT】

2、与/或/异或指令【AND/OR/XOR】

3、测试指令【TEST】

4、算数左移/逻辑左移【SAL/SHL】

5、算数右移【SAR】

6、逻辑右移【SHR】

7、循环移位指令【ROL/ROR/RCL/RCR】

四、转移和控制类指令

1、无条件转移指令【JMP】

2、条件转移指令【J../JN..】

3、循环控制指令【LOOP..】

4、子程序调用和返回指令【CALL/RET】

5、中断指令【INT/INTO/IRET】

6、标志处理指令【PSW.SET/.CLEAR/.COMPLEMENT】

7、处理器暂停指令【HLT】

8、空操作指令【NOP】

一、数据传送类 1、通用数据传送指令【MOV】

        格式:MOV OPRD1,OPRD2

        功能:OPRD2 → OPRD1

        允许:     ①CPU内部寄存器(除IP、FLAG) → CPU内部寄存器(除CS、IP、FLAG);

                        ②立即数 → CPU内部的通用寄存器组(8个,数据/变址/指针寄存器);

                        ③CPU内部的寄存器(除CS、IP) ↔ 存储器(所有寻址方式);

                        ④立即数 → 存储单元;        

        禁止:     ① mov cs,ax ; CS,IP不能作为目的操作数

                        ② mov ss,ds ; 段寄存器之间不能直接传送

                        ③ mov ds,2000h ; 立即数不能直接传送给段寄存器

                        ④ mov [si],[2000h] ; 内存单元间不能直接传送

                        ⑤ mov 1000h,ax ; 立即数不能作为目的操作数

2、堆栈指令【PUSH/POP】

        格式:PUSH OPRD / POP OPRD

        功能:OPRD入栈 / 栈顶内容送OPRD

        定义堆栈:设 ss=2000h(物理地址20000h),堆栈长度100字,则 sp=0064h(指向栈顶)

        入栈操作:先移动sp指针,再压入数据(sp=sp-1,压高字节,sp=sp-1,压低字节)

        出栈操作:先弹出数据,再移动sp指针(弹低字节,sp=sp+1,弹高字节,sp=sp+1)

        允许:     ①仅能对16位数操作,一次压入弹出一个字;

                        ②必须对寄存器的内容或内存单元的内容进行操作;

        示例:     ① push ah ; 错误,ah是8位数

                        ② push 2000h ; 错误,不能对立即数操作

                        ③ push [2000h] ; 正确

3、交换指令【XCHG】

        格式:XCHG OPRD1,OPRD2

        功能:OPRD1与OPRD2内容互换

        允许:     ①通用寄存器 ↔ 通用寄存器;

                        ②通用寄存器 ↔ 存储器;

        禁止:     ① 内存单元之间不能直接交换;

                        ② 段寄存器、IP、立即数不能成为操作数;

4、输入输出指令【IN/OUT】(累加器专用指令)

        格式:IN AL,PORT  / IN AX,PORT / OUT PORT,AL / OUT PORT,AX

        功能:从PORT口输入数据到AL(AX) / 将AL(AX)中的内容从PORT口输出

        允许:     ①只能对AL/AX操作,若传送数据为16位,端口地址只能取偶地址;

                        ②端口地址大于8位(0FFH),使用DX间接寻址;

5、换码指令(查表指令)【XLAT】(累加器专用指令)

        格式:XLAT

        功能:(提前对BX,AL赋值)将BX+AL作为偏移地址,取值送入AL中

        用途:将累加器AL中的内容变换为存储器表格中的某一个值,常用来实现编码码制的转换

6、地址传送指令【LEA/LDS/LES】

        格式:LEA  OPRD1,OPRD2

        功能:将源操作数的偏移地址送到目的操作数中

        允许:     ①源操作数必须为存储器操作数;

                        ②目的操作数必须为一个16位的通用寄存器;

        用途:通常用来使一个寄存器作为地址指针

        注:LEA指令与OFFSET伪指令有一定相似之处,可参见《offset与lea区别_百度知道》

        格式:LDS/LES  OPRD1,OPRD2

        功能:将指定内存中的4个字节(32位)分别装入指定的寄存器和段寄存器DS/ES中

        允许:     ①源操作数必须是寄存器,如DI;

                        ②目的操作数必须是一个地址;

        示例:     DS:[2130h]=00h,DS:[2131h]=04h,DS:[2132h]=00h,DS:[2133h]=10h

                        [10400H]=0ffh,[10401H]=00h,[10402H]=0aah,[10403H]=00h

                        执行 lds di,[2130h] ,结果为di=7940h,ds=3024h

                        再执行 les ax,[di] ,结果为ax=00ffh,es=00aah

7、标志寄存器传送指令【LAHF/SAHF】

        格式:LAHF / SAHF

        功能:将FLAG的低八位装入AH / 将AH的值设为FLAG低八位的值

FLAGSFZF × AF × PF × CFAHD7D6 × D4 × D2 × D0

二、算术运算类

规定:参与加、减运算的操作数

1、无进位/带进位/增量加法指令【ADD/ADC/INC】

        格式:ADD   OPRD1,  OPRD2

        功能:(OPRD1) + (OPRD2) → OPRD1

        标志位:影响标志位

        格式:ADC   OPRD1,  OPRD2

        功能:(OPRD1) + (OPRD2) + CF → OPRD1

        标志位:影响标志位

        格式:INC OPRD

        功能:(OPRD) + 1 → OPRD

        标志位:不影响CF,影响AF,OF,PF,SF和ZF

        示例:     ① inc [2000h] ; 错误,未指明操作数的类型

                        ② inc byte ptr [bx] ; 正确,指明了是将[bx]起的字节型进行增量

2、无借位/带借位/减量减法指令【SUB/SBB/DEC】

        格式:SUB   OPRD1,  OPRD2

        功能:(OPRD1) - (OPRD2) → OPRD1

        标志位:影响标志位

        格式:SBB   OPRD1,  OPRD2

        功能:(OPRD1) - (OPRD2) - CF → OPRD1

        标志位:影响标志位

        格式:DEC OPRD

        功能:(OPRD) - 1 → OPRD

        标志位:不影响CF,影响AF,OF,PF,SF和ZF

3、求补指令【NEG】

        格式:NEG OPRD

        功能:0 – (OPRD) → OPRD

        标志位:影响标志位。只有当操作数为0时, CF为0, 否则CF总为1。若操作数为80H或8000H,执行求补指令后,结果没有变化,但OF置1。

4、比较指令【CMP】

        格式:CMP  OPRD1,  OPRD2  

        功能:(OPRD1) -  (OPRD2)

        标志位:不保存结果,只影响标志位

        用法:     ①考察ZF标志位的情况判断是否相等,若两者相等,ZF标志为1,否则为0;

                        ②对无符号数:

                            若结果没有产生借位(CF=0),则AX≥BX;若产生了借位(CF=1),则AX<BX;

                        ③对带符号数:

                            考察OF与SF异或运算的结果,结果为1,则AX



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3