8086指令系统表
8086指令集机器码
8086指令集机器码
2. ADD指令(将两个数相加并将结果存储在目标位置): - 寄存器相加: 机器码:01 D1(例如,将ECX寄存器的值与EDX寄存器的值相加) - 立即数与寄存器相加: 机器码:83 C0 05(例如,将EAX寄存器的值与立即数05相加)
3. JMP指令(无条件跳转到指定的地址): - 相对短跳转: 机器码:EB rel8(例如,EB 05,跳转到相对偏移量为05的地址) - 相对长跳转: 机器码:E9 rel16(例如,E9 1234,跳转到相对偏移量为1234的地址)
8086指令集机器码
8086指令集是Intel 8086处理器的指令集架构,它定义了一系列的机器码(二进制代码 )来执行不同的操作。下面是一些常见的8086指令及其对应的机器码示例:
1. MOV指令(将数据从一个位置移动到另一个位置): - 传送立即数到寄存器: 机器码:B8 imm16(例如,B8 1234) - 传送寄存器到寄存器: 机器码:89 C1(例如,将EAX寄存器的值传送到ECX寄存器) - 传送内存到寄存器: 机器码:8B 45 08(例如,将偏移地址为08的内存单元的值传送到EAX寄存器)
8086指令集机器码
4. INT指令(触发中断): - 软中断: 机器码:CD int8(例如,CD 1,触发21号软中断)
这是8086指令集中的示例,每个指令都有特定的操作码和操作数,机器码的格式和长度 也会有所不同。如果需要查找特定指令的机器码,可以参考8086处理器的文档或相关资料。
8086CPU指令系统
3.3.2 算术运算类指令
1.加法指令
(2)带进位加法指令ADC
【指令格式】ADC dst,src 【指令功能】(dst) ← (dst)+(src)+(CF) ADC指令在格式和功能上都与ADD指令类似,只是相加时要 把进位标志CF的当前值加到和中,结果送到目的操作数中。 【用途】ADC指令主要用于多字节加法运算。 例如,有两个4字节的无符号数相加,由于8086加法指令最 多只能进行16位的加法运算,我们可将加法分两次进行,先 进行低16位相加,然后再进行高16位相加,在完成高16位 相加时,注意要把低16位相加时可能出现的进位位加进去。
•堆栈操作指令PUSH和POP
由于堆栈顶部是浮动的,为了指示现在堆栈中存放数据的位 置,通常设置一个指针,即堆栈指针SP,始终指向堆栈的顶部。 这样,堆栈中数据的进出取决于SP。当将数据(1个字节)推 入堆栈时,SP自动减1,向上浮动而指向新的栈顶;当将数据 从堆栈弹出时,SP自动加1,向下浮动而指向新的栈顶。 堆栈有建栈、进栈和出栈3种基本操作。 ⑴建栈
出栈操作都是以字为单位的,即每次在堆栈中存取数据均是两 个字节(先存入高字节,再存入低字节,仍然遵循“高字节在 高地址,低字节在低地址”的原则)。
【指令格式】PUSH opr 【指令功能】PUSH指令将16位的源操作数推入堆栈,而目标
地址为当前栈顶,即由SP指示的单元。PUSH指令操作如下: ①(SP)←(SP)-2 ②((SP)+1: (SP) ) ← opr
③代码段寄存器CS和指令指针寄存器IP不能作为目的 操作数,但CS可以作为源操作数.
④立即数不能作为目的操作数. ⑤不能用立即寻址方式给段寄存器传数. ⑥段寄存器之间不能用MOV指令直接传送. ⑦在传送字单元时,遵循“高字节在高地址,低字节在 低地址”的原则。
微机原理8086指令系统表
Opr不能同为Mem
Opr不能为CS(或IP)
PUSH
PUSH Src
(SP)← (SP)-2
((SP) +1,(SP)) ← (Src)
Opr只能16位
Opr不能为Imm、CS
PUSH CS合法
一般配对使用
POP
POP Dest
(Dest)←((SP) +1,(SP))
(SP) ← (SP) +2
Cnt是移位数
Cnt>1,其值要先送到CL
ODITSZAPC= x---xxuxx
SAR
SAR Dest,Cnt
SHL
SHL Dest,Cnt
SHR
SHR Dest,Cnt
ROL
ROL Dest,Cnt
将Dest从一端移出的位返回到另一端形成循环
Dest不能为Imm
Cnt是移位数
Cnt>1,其值要先送到CL
LES
LES DES,Src
(Dest) ←EA (Src)
(ES) ← EA(Src+2)
标
志
传
送
LAHF
LAHF
(AH) ←(FLAGSL)
相反操作
一般配对使用
SAHF标志位=-----rrrrr
SAHF
SAHF
(FLAGSL)← (AH)
PUSHF
PUSHF
(SP)← (SP)-2
((SP) +1,(SP)) ← (PSW)
INC
INC Dest
(Dest) ← (Dest) +1
ODITSZAPC= x---xxxx-
减
法
SUB
第3章 80868088指令系统3(算术运算指令)PPT课件
INC SI
;(SI)+1
DEC CX
;(CX)-1
JNZ LL
;若(CX)0,则转LL
思考:若最高位有进位,如何改?
11
ADD/ADC指令对条件标志位(CF/OF/ZF/SF)的影响:
SF=
1 结果为负 0 否则
ZF=
1 结果为0 0 否则
CF=
1 0
和的最高有效位有向高位的进位 否则
OF= 1 两个操作数符号相同,而结果符号与之相反
无符号数 有符号数
0000 1000
8
+8
+1111 1101 10000 0101
结果5
+253 261 CF=1
+(-3) +5
OF=0
③ 有符号数溢出
0000 1000
8
+8
+0111 1101 +125 +(+125)
1000 0101 133
+133
结果-123
CF=0
OF=1
(补码表示)
2
• 两个8位数相加时有4种情况:
无符号数范围0~255 带符号数范围-128~127 ①无符号数和有符号数均不溢出
二进制相加 0000 1000 +0001 1110 0010 0110
无符号数加 8
+ 30 38
有符号数加 +8
+ (+30) +38
结果38
CF=0
OF=0
3
② 无符号数溢出
作用类似于C语言中的”--”操作符。
格式:DEC opr 操作:opr←(opr)-1
8086指令系统一览表
RCR op1, 1 带进位位的循环右移 RCR op1, CL
reg mem reg mem
串 MOVSB 操 作 MOVSW 类
((DI)) ← ((SI)) (SI) ← (SI)±1, (DI) ← (DI)±1 ((DI)) ← ((SI)) (SI) ← (SI)±2, (DI) ← (DI)±2
SAR op1, 1 算术右移 SAR op1, CL
ROL op1, 1 循环左移 ROL op1, CL
ROR op1, 1 循环右移 ROR op1, CL
reg mem mem, reg reg, mem reg, reg reg, imm mem, imm acc, imm reg, mem reg, reg reg, imm mem, imm acc, imm reg mem reg mem
9+22/rep 不重复:15 1 重复:
9+15/rep 1 不重复:15 重复:
9+15/rep
2
1
2
1
REPNE/REP (CX)=0 或(ZF)=1 退出重复,否则
NZ
(CX)←(CX)-1 并执行其后的串指令
ቤተ መጻሕፍቲ ባይዱ
string_instruc
控 JMP SHORT 无条件转移 制 op1 转 JMP NEAR 移 PTR op1 类 JMP FAR
reg mem
PTR op1
JMP WORD
PTR op1
JMP DWORD
PTR op1 JZ/JE op1 JNZ/JNE op1 JS op1
ZF=1 则转移 ZF=0 则转移 SF=1 则转移
JNS op1
第3章 8086指令系统(最后有练习题)
开 始
8086CPU的指令系统的基本指令
包括数据传送类指令、算术运算类指令、 位操作类指令、串操作类指令、控制转移 类指令、处理机控制类指令。后几节将分 别介绍这些指令的语句格式和功能。
3.1 8086的寻址方式
3.1.1 数据的寻址方式 3.1.2 程序转移地址的寻址方式 3.1.3 对端口的寻址方式
3.1.2 程序转移地址的寻址方式
用来确定转移指令及CALL指令的转向地址。
段内寻址
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
段间寻址
段内:转移指令与转向的目标指令在同一代码段 中,(CS)不变。
段间:转移指令与转向的目标指令在两个代码段中, (CS) 变化。
表示转移距离(称为位移量)的操作符:
返回本节
2 . 寄存器寻址
寄存器寻址方式的操作数在指令指明的寄 存器中。 汇编格式:R ,其中R表示寄存器名。 功能:操作数直接存放在寄存器R中。 例如:MOV AL,BL
【例3-2】下列程序执行后,(AX)=?,
(BX)=?
MOV AX,1234H
MOV BX,5678H
ADD AX,BX 执行:1234H→AX 5678H→BX (AX)+(BX)→AX 执行后:(AX)=68ACH,(BX)=5678H
3 . 直接寻址
特点:操作数在内存中。 汇编格式:①含有变量的地址表达式。 ②段寄存器名:[EA] 。 功能:指令下一字单元的内容是操作数的偏 移地址EA。 图形表示:
【例3-3】
寄存器和存储器内容为:(AX)=1212H, (DS)=3000H,(32000H)=45H, (32001H)=46H。 执行指令:MOV AX ,[2000H] 问执行后:(AX)=? Step1:计算地址DS*16+2000H=32000H Step2:找内容(32000H),(32001H) 所以执行后:(AX)=4645H
第三次课 8086的指令系统
第三章8086的指令系统3.1 8086指令系统概述所谓一个微处理器的指令系统是一个微处理器所执行的全部指令的集合。
在8086的指令系统中一共有133条指令。
8086指令系统是在8位微处理器8080/8085的指令系统基础上设计的,它兼容了8080/8085的全部指令,这部分对8位微处理器具有兼容性的指令往往是处理字节(8位)的。
此外,8086还有自己所特有的对字或字符串的处理指令,以及对带符号数的运算指令、中断指令和协处理器指令。
对微处理器的指令的描述,一般有两种表示方法:指令的机器码和汇编指令。
无论对于机器码指令还是对于汇编指令均要解决三个问题(三个信息)(1)指令要完成什么操作(操作码);(2)参加这个操作的操作数在哪里(操作数);(3)操作结果放在哪里(结果);为了简化指令,通常在微机系统中规定:操作结果要放在某一个操作数中。
如MOV AL,08H;ADD AX,BX;(源操作数,目标操作数)这样,就将指令所要提供的信息简化为了两部分:操作码、操作数。
指令的机器码就是用二进制码描述指令的操作码和操作数的一种方式,实际上在微机系统内部,指令就是以机器码的形式存在的。
所谓的汇编指令是用指令功能的英文缩写表示操作码,用数字和符号表示操作数的指令描述方法。
例如操作码操作数MOV AX,2000H操作码B8H操作数:00H20H由于汇编语言程序有便于理解、识别、阅读和交流的优点。
所以汇编指令得到了广泛的应用。
但由于最终在机器中使用的是机器码,所以要有一个中间环节就是对其进行翻译。
3.2 8086指令的寻址方式所谓寻址方式就是寻找操作数的方式,所以寻址方式实际上在两种情况下被涉及:一种是用来对操作数进行寻址;另一种是对转移地址和调用地址进行寻址。
下面我们所讨论的寻址方式都是针对操作数的,关于指令地址的寻址,将在讲述转移指令和调用指令时作具体说明。
一条指令的机器码通常包含操作码(OP)和操作数两部分。
8086指令系统一览表
CMP op1, op2
(op1) - (op2)
mem, reg
reg, mem
reg, reg
reg, imm
mem, imm
acc, imm
9+EA
9+EA
3
4
10+EA
4
2 ~ 4
2 ~ 4
2
3 ~ 4
3 ~ 6
2 ~ 3
MUL src
(AX)←(AL) * (src)
(DX, AX)←(AX) * (src)
(IP)←(IP) + D16
段内间接:(SP)←(SP)-2
((SP)+1, (SP))←(IP)
(IP)←EA
段间直接:(SP)←(SP)-2
((SP)+1, (SP))←(CS)
(SP)←(SP)-2
((SP)+1, (SP))←(IP)
(IP)←目的偏移地址
(CS)←目的段基址
16位reg
16位mem
80 ~ 90
(86 ~ 96)+EA
144 ~ 162
(150 ~ 168)+EA
2
2 ~ 4
2
2 ~ 4
IDIV src
(AL)←(AX) / (src)的商
(AH)←(AX) / (src)的余数
(AX)←(DX, AX) / (src)的商
(DX)←(DX, AX) / (src)的余数
(86 ~ 104)+EA
128 ~ 154
(134 ~ 160)+EA
2
2 ~ 4
2
2 ~ 4
8086的指令系统
TEST AL,80H;查AL的D7= 1? JNZ T_ALARM;是1,则转温度报警程序 TEST AL, 40H; D7=0, D6=1? JNZ P_ALARM;是1,则转压力报警程序
(4) XLAT 表转换指令 格式:XLAT 转换表 或 XLAT
功能:将一个字节从一种代码转换为另一种代码 例:若十进制数字0~9的LED七段对照表如下: 十进制数字 七段显示码 十进制数字 七段显示码 0 40H 5 12H 1 2 3 79H 24H 30H 6 7 8 02H 78H 00H
(2) AND逻辑与指令 指令格式: AND 目的,源 指令功能:对两个操作数进行按位逻辑与操作 结果送回目的操作数 即: 目的←目的∧源。 例3.66 假设AX=3538H, AND AX,0F0FH; 执行该指令后,AX=0508H
(3) OR逻辑或指令 指令格式:OR 目的,源 例3.67 设AX=0508H, OR AX,3030H;AX=3538H
2.输入输出指令 (1) IN输入指令 指令格式: ① IN AL,端口地址 (8位) 或 IN AX,端口地址;(16位) ② IN AL, DX;端口地址存放在DX中 或 IN AX, DX 例3.32 IN AL,0F1H; AL从F1H端口读入一个字节 IN AX,80H; AL 80H端口的内容 ; AH 81H端口的内容 MOV DX,310H;端口地址310H先送入DX中 IN AL,DX; AL 310H端口的内容
MOV MOV XLAT MOV MOV XLAT MOV 4· 标志传送指令
二、算术运算指令 数的类型: 无符号二进制数、带符号二进制数、 压缩十进制数、非压缩十进制数 压缩与非压缩数: 例: 23 压缩: 0010 0011 非压缩表示:0000 0010 0000 0011
8086指令集
标志寄存器:9个有效位,分6个状态寄存器和3个控制寄存器CF 当执行一个加法(减法)使最高位产生进位(借位)时CF=1 否则CF=0PF 指令执行的结果低8位有偶数个一时,CF=1 否则CF=0AF 当执行一个加法(减法)使运算结果低4位向高4位有进位(借位)时AF=1 否则AF+0ZF 当前运算结果为零,ZF=1 否则ZF=0SF 符号标志位OF 溢出标志位DF 方向标志位IF 中断允许位IF=1时响应外部中断TF 跟踪标志位操作数:[目的操作数(OPD),源操作数(OPS)] ;立即操作数,寄存器操作数,存储器操作数。
寻址方式:1) 寄存器寻址例:INC AX; MOV AX,BX2) 寄存器间接寻址(寄存器只能是BX,DI,SI,BP);[PA=(BX、DI、SI)+DS》4)或BP+SS》4]3) 寄存器相对寻址4) 基址变址寻址5) 相对基址变址寻址6) 直接寻址7) 立即数寻址i. 立即数寻址立即数寻址不能用在单操作数指令中ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段指令系统:1) 数据传送指令mov注意:不允许在两个存储单元之间直接传送数据不允许在两个段寄存器之间传送数据不允许用立即数直接为段寄存器赋值不影响标志位不允许寄存器或存储单元到除CS外的段寄存器2) 入栈(出栈)指令PUSH(POP)注意:PUSH操作数不能是“立即数”POP操作数不能是段寄存器CS不影响标志位先进后出单操作符3) 交换指令XCHG注意:只允许寄存器与存储单元之间的交换不影响标志位4) 换码指令XLAT5) 地址传送指令LEA(load effective address):偏移地址()6) 数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI)、高地址的字送DS7) 附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI)、高地址送ES上三指令不影响标志位8) 标志寄存器传送指令LAHF :标志寄存器低八位送AHSAHF :AH送标志寄存器低八位PUSHF:标志寄存器压入堆栈POPF :栈顶内容送标志寄存器9) 加法指令ADD目的操作数只能是寄存器或存储单元对CF,OF,SF,PF,ZF,AF有影响10) 加1指令INC对OF,SF,PF,ZF,AF有影响11) 带位加法指令ADC在进行单精度运算时用ADD指令,在高精度低位运算时用ADD、高位用ADC OPD=OPD+OPS+CF12) 减法指令SUB对CF,OF,SF,PF,ZF,AF有影响13) 带借位减法指令SBBOPD=OPD—OPS—CF对CF,OF,SF,PF,ZF,AF有影响对CF,OF,SF,PF,ZF,AF有影响14) 减1指令DEC15) 比较指令CMP16) 求补指令NEG17) 无符号乘法指令MUL字节操作:AX=AL*OPS字操作:DX,AX=AX*OPS18) 有符号乘法指令IMUL19) 无符号除法指令DIV字节的操作:AL=AX/(OPS)的商AH=AX/(OPS)的余数字的操作:20) 有符号除法IDIV21) 字节转换为字指令CBW把AL中的符号位扩展到AH中,如果AL的最高位为0,则AH=00H,如果最高位为1,则AH=FFH22) 字转换为双字指令CWD23) 压缩的BCD码调整指令DAA 加法的十进制调整指令DAS 减法的十进制调整指令24) 非压缩的BCD码调整指令AAA 加法的ASCII调整指令AAS 减法的ASCII调整指令AAM 乘法的ASCII调整指令AAD 除法的ASCII调整指令25) 逻辑与运算指令ADDORNOTTEST(OPD和OPS的内容不变)26) 移位指令逻辑左移与算术左移SHL、SAL(低位补0)算术右移SAR(高位不变、CF为最后移入的值)逻辑右移SHR(高位补0、CF为最后移入的值)27) 循环移位左移ROL (CF为最后移入的值)右移ROR (CF为最后移入的值)带进位循环左移RCL(CF+OPD 一起左循环)带进位循环右移RCR(OPD+CF 一起右循环)28) 无条件转移指令下JMPJMP SHORT OPD(IP=IP+8位位移量)JMP NEAR PTR OPD(IP=IP+16位位移量)上二条指令目的地址是IP=OPD+IPJMP WORD PTROPD(IP=EA)JMP FAR PTR OPD(IP=OPD的段内偏移地址CS=OPD段地址) JMP DWORD PTR OPD(IP=EA CS=EA+2)29) 条件转移指令JZ(JE)结果为0则转移(ZF=1)JNZ(JNE)结果不为0则转移(ZF=0)JS 结果为负则转移(SF=1)JNS 结果为正则转移(SF=0)JO 溢出则转移(OF=1)JNO 不溢出则转移(OF=0)JP(JPE)奇偶位为1则转移(PF=1)JNP(JPO)奇偶位不为1则转移(PF=0)JC(JNAE,JB)低于且不等于或进位位为1则转移(CF=1)JNC(JNE,JNB)高于或等于或进位位为0则转移(CF=0)30)。
8086指令系统概述
8086指令系统概述8086指令系统概述Intel 8086指令系统共有117条基本指令,可分成6个功能组①数据传送类指令 :数据从哪⾥到哪⾥②算术运算类指令③位操作类指令④串操作类指令⑤控制转移类指令⑥处理机控制类指令数据传送类指令⼀⼂通⽤数据传送指令1.MOV传送指令mov 指令传送功能图请注意,⽴即数不能直接给段寄存器,都是通过中转的mov 注意事项1.两个操作数的类型不⼀致例如源操作数是字节,⽬的操作数是字,或者是相反mov al,050AH //错误 al是⼋位寄存器,只能接受⼋位,⽽这⾥是16位了对于存储器,和⽴即数同时都作为操作数的情况下,必须显⽰的指明是什么类型mov [2000h],12h //错误,应该写成 mov byte ptr(或者word ptr)[2000h],12h如果只是12h,则⽤byte ptr,当然你也可以写成word ptr,但是修改内存的值修改后则是修改的两个字节的长度2.两个操作数不能是存储器例如 mov [2000h],[2200h] 因为内存只是存储的,传送的结果要保存在寄存器当中,显然内存没有内置CPU,所以通过寄存器中转,所以不能直接这样3.⼩⼼段操作寄存器1.⽴即数不能直接给段寄存器mov ds,1002.不能直接改变cs段寄存器的值mov cs,[si] 这条指令是可以编译通过,但是运⾏的时候,因为你把代码段的值改了,然后CS:IP确定的下⼀跳指令就会出错,⽐如你的这条指令下⾯还有个mov ax,0 当你上⾯改了,那么mov ax,0 永远不会执⾏,⽽你熟悉的改了cs的值可以,如果不熟悉那么代码段就被破坏,程序就会执⾏崩溃.3.段寄存器和段寄存器不能直接数据传送mov ds,es2.xchg交换指令xchg reg/mem/accum , reg/mem/accum (accum指的是AL/AX/EAX)其实就是寄存器的值交换,那么此时ax的值就是1,bx就是0ax = 0 bx = 1 xchg ax,bx有⼈说mov 指令也可以,确实是可以,但是指令周期不⼀样,这个⽐mov指令快⼀个指令周期,⽽且还不浪费寄存器(否则需要三个寄存器完成交换)寄存器和存储器交换xchg ax,[2000h] 字交换,ax正好可以放下16位,等价于 xchg [2000h],ax 这⾥会有⼈说为什么不⽤ word ptr说明⼀下,因为后⾯跟着的是16位寄存器,它默认就是 word ptr了xchg al,[2000h] 字节交换 ,等同于 xchg [2000h],al 同上为什么不⽤byte ptr3.xlat 换码指令(查表指令)⼀个字节数据取出赋值给al,后⾯没有操作数,默认操作数就是 BX和AL,直接⼀个 xlat即可.,相当于数组寻执⾏的位移处的⼀个字节数据取出赋值给将BX指定的缓冲区中,al执⾏的位移处的址,bx放在数组⾸地址,al放下标。
微机原理第3章 8086的指令系统d
3.4.4 串操作指令
由多个字节/字组成的数据称为字节/字数据串,简称字节/ 字串。 数据串存放在某一连续的内存区中,最长长度为64kB。 串操作指令的特点: • 采用串寻址,规定源操作数的逻辑地址为(DS):(SI),目的 操作数的逻辑地址为(ES):(DI)。 • 执行串指令时,存储单元的地址指针是自动移动的,DF= 0则地址增大,DF=1则地址减小。 • 串指令通常使用指令前缀,串的长度(数据个数)由CX给定。 • 串指令在同段之间进行传送或比较时,应使(DS)=(ES)。
LEA SI, BUFF1;源操作数偏移地址 LEA DI, BUFF2;目的操作数偏移地址 CLD;DF=0 AG: MOVSW; MOV CX, 100;串长度(CX)=100 LOOP AG;(CX)=(CX)−1, ;(CX)≠0则转移 MOVSW;送1个字,(CX)=100
2. 串比较指令 串比较指令CMPSB/CMPSW (compare byte/word string) 格式:CMPSB/CMPSW 功能:把(DS):(SI)指定的字节/字单元内容减去(ES):(DI)指 定的字节/字单元内容,结果不送回(DS):(SI)指定的单元, 但影响状态标志位,且SI、DI的内容自动加(减)1/2。 例:检查数据段中首地址分别为STR1和STR2的两个长度 为50的字节串是否相等。若相等,则(BX)=0;若不相等, 则BX保存STR1中第1个不相同字节的偏移地址,并将该 数据保存到AL中。 CLD;DF=0 MOV CX, 50;设置串长度 MOV AX, DS;使(EX)=(DS) MOV ES, AX
2. 逻辑与指令 逻辑与指令AND (and) 格式:AND dest, src 功能:把dest的内容与src的内容按位进行逻辑与运算,并 把结果送回dest。 注意:dest不能为立即数;不允许两个操作数都为存储器 操作数;该指令执行后使CF=OF=0,并影响PF、ZF和SF。 例:MOV BL, 38H;(BL)=38H AND BL, 0FH;(BL)=08H, CF=OF=PF=ZF=SF=0 利用AND指令可以使目的操作数的某些位清0。 例:把AX中的D15、D11、D6、D1位保留,其余位清0。 AND AX, 8842H
8086微处理器-指令系统思维导图,脑图
8086微处理器指令系统数据传送数据传送指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与I/O 端口之间的字节或字传送,它们共同的特点是不影响标志寄存器的内容通用数据传送指令MOV 传送指令格式: MOV 目标,源指令功能:将源操作数(一个字节或一个字)传送到目标操作数。
源操作数可以是8/16位通用寄存器、段寄存器、存储器中的某个字节/字或者是8/16 位的立即数。
堆栈操作指令后进先出的规则存取信息堆栈指针信息存入堆栈时,堆栈指针将自动减量,并将信息存入堆栈指针所指出的存储单元当需要从堆栈中取出信息时,也将从堆栈指针所指出的存储单元读出信息,并自动将堆栈指针增量堆栈指针始终指向堆栈中最后存入信息的那个单元栈顶不断移动、动端堆栈区的另一端则是固定不变的栈底PUSH 入栈指令格式: PUSH 源指令功能:将源操作数压入堆栈。
源操作数可以是16 位通用寄存器、段寄存器或者是存储器中的数据字。
P38 例 2.12POP 出栈指令格式: POP 目标指令功能:将堆栈中当前栈顶和次栈顶中的数据字弹出送到目标操作数。
目标操作数可以是16 位通用寄存器、段寄存器或者是存储单元。
P39 例 2.13XCHG 交换指令1格式: XCHG 目标,源指令功能:将源操作数与目标操作数(一个字节或一个字)相互交换位置。
源操作数可以是通用寄存器或存储单元。
目标操作数只允许是通用寄存器。
P39 例 2. 14XLAT 换码指令2目标地址传送指令这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址LEA 有效地址送寄存器指令格式: LEA 目标,源指令功能:将源操作数的有效地址EA 传送到目标操作数。
源操作数必须是存储器操作数。
目标操作数必须是16位通用寄存器。
LDS 指针送寄存器和DS指令格式: LDS 目标,源指令功能:从源操作数所指定的存储单元中取出某变扯的地址指针(共4 个字节),将其前两个字节(即变量的偏移地址)传送到目标操作数,后两个字节(即变量的段地址)传送到DS 段寄存器中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
助记符
格式
功能
备注
传送指令
地址
LEA
LEA DES,Src
(Dest) ←偏移量(Src)
Dest为16位Reg,Src为m
输
入
输
出
IN
IN Ac,Port
IN Ac,DX
Ac← (Port)
Ac←((DX))
OUT
OUT Port,Ac
OUT DX,Ac
(Port) ←Ac
((DX))←Ac
(Dest)←(Dest异或Src)
使某些位变反,某些位不变
TEST
TEST Dest,Src
(Dest)∧(Src)
测试某位是否为0
移位
指令
SAR
SAR Dest,Cnt
空出位补0,SAR时空出位不变
SAR用于有符号数,SHR用于无符号数
Cnt是移位数
Cnt>1,其值要先送到CL
SHR
SHR Dest,Cnt
Src为乘数
逻
辑
运
算
AND
AND Dest,Src
(Dest)←(Dest)∧(Src)
使Dest的某些位强迫清0
OR
OR Dest,Src
(Dest)←(Dest)∨(Src)
使Dest的某些位强迫置1
NOT
NOT Dest
(Dest)←(Dest取反)
不允许使用Imm
XOR
XOR Dest,Src
算
术
运
算
加
法
ADD
ADD EST,Src
(Dest)←(Src)+(Dest)
不带进位值加法
INC
INC Dest
(Dest) ← (Dest) +1
加一
减法
CMP
CMP DES,Src
(Dest)-(Src)
结果不回送,后边跟JXX
乘法
MUL
MUL Src
(AX) ← (AL) *(Src);(DX,AX)← (AX) *(Src)
SF≠OF AND ZF=0则转移
有符号数A<B
JLE/JNG Dest
SF≠OF OR ZF=1则转移
有符号数A≤B
8086指令系统表
JB/JNAE Dest
CF=1 AND ZF=0则转移
无符号数A<B
JBE/JNA Dest
CF=1 OR ZF=1则转移
无符号数A≤B
JG/JNLE Dest
SF=OF AND ZF=0则转移
有符号数A>B
JGE/JNL Dest
SF=OF OR ZF=1则转移
有符号数A≥B
JL/JNGE Dest
控
制
转
移
指
令
LOOP
LOOPDest
CX-1≠0,则循环
段内直接短转移
JE/JZ Dest
ZF=1则转移
相等/等于零
JNE/JNZ Dest
ZF=0则转移
不相等/不等于零
JA/JNBE Dest
CF=0 AND Z F=0则转移
无符号数A>B
JAE/JNB Dest
CF=0 OR ZF=1则转移
无符号数A≥B