Intel8086ASMCode汇编指令的机器码

合集下载

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处理器的文档或相关资料。

机组实验二报告—找出8086 8088指令系统所有指令的操作码的编码

机组实验二报告—找出8086 8088指令系统所有指令的操作码的编码

实验二找出8086/8088指令系统所有指令的操作码的编码实验目的:本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能,得到8086/8088操作码从00~FF所对应的汇编指令名字。

附:本次实验用到的e和u功能的解释:debug的e命令、u命令的作用及用法:e 100...表示从100号单元开始编写内容;u 100 105表示将100~105号单元共6个字节反汇编出来、所谓“反汇编”就是把机器码还原成汇编语句。

每次先用e命令改写100号单元(从00到FF,第一次是00,第二次是 01,第三次是02,第四次是03,……,最后一次是FF),再用u命令反汇编出指令,再记录下来。

第一回合实验步骤:一、启动debug程序:鼠标单击“开始->程序->附件->命令提示符”,打开DOS(其实虚拟DOS)窗口,出现命令提示符Microsoft Windows XP [版本5.1.2600]<C>版权所有1985-2001 Microsoft Corp.输入debug并按回车键,出现一个debug程序的提示符,一个短杆如下图所示:二、用试探法-e 100 00 00 00 00 00 00-u 100 1051375:0100 0000 ADD [BX+SI],AL1375:0102 0000 ADD [BX+SI],AL1375:0104 0000 ADD [BX+SI],AL结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。

记下来:指令码汇编指令---------------------------------------------------------------------1375:0100 0000 ADD [BX+SI],AL分析:指令的第一字节为操作码,规定指令的操作类型。

第4章-8086汇编语言程序设计(1)汇编语言的语句-伪指令-运算符-DOS功能调用

第4章-8086汇编语言程序设计(1)汇编语言的语句-伪指令-运算符-DOS功能调用
段名则是由SEGMENT及ENDS定义的段名。
注意:ASSUME只是告知汇编程序有关段寄存器与段的关系, 并没有给段寄存器赋予实际的初值。
ORG规定了段内的起始地址或偏移地址。 格式: ORG <表达式> 表达式的值即为段内的起始地址或偏移地址,从此地址起连续 存放程序或数据。
四、过程定义语句 格式:过程名 PROC [NEAR]或FAR ┇ RET ┇ 过程名 ENDP
例1: MOV AX,SEG STRI1 MOV DS,AX 将变量STRI1所在段值取到DS中
例2: MOV SI,OFFSET STRI1 代表将变量STRI1处的地址偏移量取到SI中.
注意:它与 LEA SI,STRI1类似。 TYPE,SIZE、LENGTH (不作要求).
#3
5. 类型操作符PTR
新存储器地址。
2. 逻辑运算符(不作要求) AND、OR、XOR、NOT,只能用于数字表达式中。
3. 关系运算符(不作要求) EQ(相等)、NE(不等)、LT(小于)、GT(大于)、 LE(小于或等于)、GE(大于或等于)
4. 分析操作符 SEG,OFFSET,TYPE,SIZE、LENGTH。可以把存储器 一些特征作为数值送回。
IMUL AL SUB AX,BX MOV D,AX MOV AH,4CH
INT 21H
CODE ENDS
END START
➢ 一个源程序通常由若干个段组成,每个段均以SEGMENT开 始,以ENDS结束。
➢ 每个段包含若干语句,分指令语句与伪指令语句两种。
➢ 每条语句可由标识符、保留字、表达式等元素组成。
DATA ENDS
STACK SEGMENT DB 20H DUP(?)

3.1-3.28086寻址方式与指令机器码

3.1-3.28086寻址方式与指令机器码

执行结果 BX=5678H,执行过程如图3.4。
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
寄存器相对寻址
上述指令也可用MOV 式来表示。
BX,[COUNT+SI]这种形
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
§3.1 8086的寻址方式
3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 立即数寻址方式 寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 相对基址变址寻址方式 其它寻址方式
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
§3.1 8086的寻址方式
3.1.1 立即数寻址方式 3.1.2 寄存器寻址方式 3.1.3 直接寻址方式 3.1.4 寄存器间接寻址方式 3.1.5 寄存器相对寻址方式 3.1.6 基址变址寻址方式 3.1.7 相对基址变址寻址方式 3.1.8 其它寻址方式
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
3.1.6 基址变址寻址方式
Based Indexed Addressing
有效地址是一个基址寄存器 (BX 或 BP) 和一个变 址寄存器(SI或DI)的内容之和,两个寄存器均由 指令指定。
若基址寄存器为BX时,段址寄存器用DS,则: 物理地址 = 16×DS+BX+SI
约定 1:如果指令中指定的寄存器是 BX、 SI或 DI,则 默认操作数存放在数据段中,
物理地址=16×DS+BX 或=16×DS+SI 或=16×DS+DI

8086汇编和机器码的对应表

8086汇编和机器码的对应表

8086汇编和机器码的对应表
单⽚机指令功能⼀览表
助记符代码说明
MOV A,Rn E8~EF
寄存器A
MOV A,direct E5 dircet 直接字节送A
MOV A,@Ri ER~E7
间接RAM送A
MOV A,#data 74 data ⽴即数送A
MOV Rn,A F8~FF
A送寄存器
MOV Rn,dircet A8~AF dircet 直接字节送寄存器
MOV Rn,#data 78~7F data ⽴即数送寄存器
MOV dircet,A F5 dircet A送直接字节
MOV dircet,Rn 88~8F dircet 寄存器送直接字节
MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节MOV dircet,@Ro 86~87
间接RAM送直接字节
MOV dircet,#data 75 dircet data ⽴即数送直接字节MOV @Ri,A F6~F7
A送间接RAM
MOV @Ri,#data 76~77 data 直接字节送间接RAM MOV @Ri,#data 76~77 data ⽴即数送间接RAM
MOV DPTR,#data16 90 data 15~8 16位常数送数据指针data7~0
MOVC A,@A+DPTR 93
由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC 83
由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3
送外部数据(8位地址)送A
MOVX A,@DPTR E0
送外部数据(16位地址)送A。

8086汇编语言指令表(按字母顺序)

8086汇编语言指令表(按字母顺序)
(2) 若(AL) and 0F0H>90H 或 CF=1,则(AL)<--(AL)+60H,CF<--1.
2. 示例: (AL)=18H,(BL)=06H
ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH
DAA ; (AL)
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
DAA
组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)
格式: DAA
功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.
说明:
1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1

8086指令和机器码

8086指令和机器码

W位说明传递数据的类型是字(W=l)还是字节(W=0);
D位标明数据传送的方向:D=0,数据从寄存器传出; D=1,数据传至寄存器;
5
§3-2 指令的机器码表示方法
其中,第二个字节:
REG字段:寄存器号,用3位编码寻址8种不同的寄存器,再根据第一字节中 W位,选择8位或16位寄存器。如表3-l所示。(对使用段寄存器的指令,REG字
011
100 101
[BP]+[DI]
[SI] [DI]
[BP]+[DI]+D8
[SI]+D8 [DI]+D8
[BP]+[DI]+D16
[SI]+D16 [DI]X
SP BP
110
111
D16(直接地址)
[BX]
[BP]+D8
[BX]+D8
[BP]+D16
[BX]+D16
DH
13
§3-2 指令的机器码表示方法
例:求指令MOV [BX+2100H], 0FA50H的机器码
14
§3-2 指令的机器码表示方法
5、包含段寄存器的指令的编码
例:求指令MOV DS, AX的机器码
解:指令的功能是将AX寄存器的内容传送到数据段寄存器DS。 该指令的编码格式为:10001110 MOD 0 REG R/M . 段寄存器DS的编码为11,即REG字段为11;另一个操作数也是 寄存器,所以MOD=11,而R/M字段应填上AX的三位代码000 .
3、双操作数指令
MOV AL, 04 ;机器码为B004H
4、三操作数指令
ADC AX, BX ;该指令完成操作数AX、BX和CF位相加。

汇编语言基础--8086汇编指令

汇编语言基础--8086汇编指令

微处理器指令系统概述:一台计算机所能识别和执行的全部指令,称为该机器的指令系统,又称指令集。

一般指令分为:“告诉计算机干什么”的指令操作助记符,“指令操作对象”即操作数。

寻址方式概述:指定操作数或操作数存放位置的方法称为寻址方式。

8086的寻址方式有三类:立即寻址、寄存器寻址和存储器寻址;其中存储器寻址又分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址五种。

立即寻址:操作数直接写在指令中的寻址方式,因为这种操作数称为立即数,所以这种寻址方式也称为立即数寻址方式。

立即数可以使8位;16位;32位;例如:MOV AX,6789H ADD AX,1234H寄存器寻址:指令所要的操作数事先已存储在某寄存器中,或把目标操作数存入寄存器中,或者源操作数和目标操作数都是寄存器。

例如:MOV AX,BX MOV AX,6789H(源操作数是立即数寻址,目的操作数是寄存器寻址)存储器寻址:在存储器中查找操作数。

1·直接寻址方式:指令所要的操作数存放在内存中,在指令中直接给出操作数的段地址和有效地址,从而使8086的BIU部件能够利用地址加法器得到实际物理地址。

例如:MOV AX,DS:[2000H](mov 默认DS为存放数据的段,所以这个指令等价于MOV AX,[2000H])MOV AX,ES:[2000H]2·寄存器间接寻址方式:操作数在存储器中,操作数的有效地址用SI,DI,BX,BP 4个集训期之一来指定。

若不使用段前缀,则规定若有效地址用SI,DI,BX等之一来指定,则默认的段寄存器是DS,若有效地址用BP来指定,则其默认的段寄存器位SS。

例如:MOV BX,[DI]3·寄存器相对寻址方式:操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI、DI)的内容和指令中的8/16位偏移量之和。

例如:MOV BX,[SI+100H]4·基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI,DI)的内容之和。

ASM指令机器码对照表

ASM指令机器码对照表

一、汇编速查MOV AA,BB 将BB 放到AA 里CALL 调用子程序(相当于BASIC 的GOSUB)RET 与RETF 返回程序(相当于BASIC 的RETURN)CMP XX,YY 比较XX 与YYJZ 若相等则转移JNZ 若不相等则转移JB 若小于则转移JG 若大于则转移JMP 无条件转移J??? (各种转移指令)LOOP 循环直到CX为0INT XX 类似CALL 的中断涵数PUSH 推入栈(STACK)ESP:PUSH AXPOP 出栈ESP:POP CXXCHG 交换ESP:XCHG AX,BXIN、OUT 与PORT有关的IN/OUTXLAT 查表LEA 段内偏移量。

ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器AHPUSHF、POPF将棋标入/出栈ADD ESP ADD AX,CX (AX=AX+CX)ADC 加入棋标C的ADDINC ESP INC AX(AX=AX+1)AAA 加法校正SUB、SBB 减法DEC ESP:DEC AX(AX=AX-1)NEG 去补,MUL、IMUL 乘DIV、IDIV 除SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFTOR、XOR、AND 逻辑运算ESP :XOR AX,AX(AX=0)直接标志转移指令格式机器码测试条件如...则转移JC 72 C=1 有进位JNS 79 S=0 正号JNC 73 C=0 无进位JO 70 O=1 有溢出JZ/JE 74 Z=1 零/等于JNO 71 O=0 无溢出JNZ/JNE 75 Z=0 不为零/不等于JP/JPE 7A P=1 奇偶位为偶JS 78 S=1 负号JNP/IPO 7B P=0 奇偶位为奇间接标志转移指令格式机器码测试格式如...则转移JA/JNBE(比较无符号数) 77 C或Z=0 > 高于/不低于或等于JAE/JNB(比较无符号数) 73 C=0 >= 高于或等于/不低于JB/JNAE(比较无符号数) 72 C=1 < 低于/不高于或等于JBE/JNA(比较无符号数) 76 C或Z=1 <= 低于或等于/不高于JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 > 大于/不小于或等于JGE/JNL(比较带符号数) 7D S异或O=0 >= 大于或等于/不小于JL/JNGE(比较带符号数) 7C S异或O=1 < 小于/不大于或等于JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <= 小于或等于/不大于无条件转移指令JMP指令格式执行操作机器码说明段内直接短转移Jmp short (IP)←(IP)+8位位移量EB 转移范围-128到+127字节段内直接近转移Jmp near (IP)←(IP)+16位位移量E9 转移到段内的任一位置段内间接转移Jmp word (IP)←(有效地址EA) FF段间直接(远)转移Jmp far (IP)←(偏移地址)(CS)←(段地址) EA段间间接转移Jmp dword (IP)←(EA)(CS)←(EA+2)二、断点设置表一般处理:bpx hmemcpy(万能断点)bpx MessageBox bpx MessageBoxExAbpx MessageBeep bpx SendMessagebpx GetDlgItemT ext bpx GetDlgItemIntbpx GetWindowText bpx GetWindowWordbpx GetWindowInt bpx DialogBoxParamAbpx CreateWindow bpx CreateWindowExbpx ShowWindow bpx UpdateWindowbmsg xxxx wm_move bmsg xxxx wm_gettext bmsg xxxx wm_command bmsg xxxx wm_activate bmsg xxxx wm_create bmsg xxxx wm_destroy时间相关:bpint 21 if ah==2A (DOS)bpx GetLocalTimebpx GetFileTimebpx GetSystemtimeCD-ROM 或磁盘相关:bpint 13 if ah==2 (DOS) bpint 13 if ah==3 (DOS) bpint 13 if ah==4 (DOS)bpx GetFileAttributesA bpx GetFileSizebpx GetDriveType bpx GetLastErrorbpx ReadFilebpio -h (Your CD-ROM Port Address) R软件狗相关:bpio -h 278 R bpio -h 378 R文件访问相关:bpint 21 if ah==3dh (DOS) bpint 31 if ah==3fh (DOS) bpint 21 if ah==3dh (DOS)bpx ReadFile bpx WriteFilebpx CreateFile bpx SetFilePointerbpx GetSystemDirectoryINI 初始化文件相关:bpx GetPrivateProfileString bpx GetPrivateProfileIntbpx WritePrivateProfileString bpx WritePrivateProfileInt注册表相关:bpx RegCreateKey bpx RegDeleteKeybpx RegCloseKey bpx RegOpenKeybpx RegQueryvalue注册标志相关: bpx cs:eip if EAX==0内存标准相关: bpmb cs:eip rw if 0x30:0x45AA==0显示相关: bpx 0x30:0x45AA do "d 0x30:0x44BB"bpx CS:0x66CC do "? EAX"利用S命令设断:S [-cu][address L length data-list]address :搜索的起始地址length :搜索的长度(字节长)data-list :可以是一系列字节,也可以是字符串, 字符串可以用单引号或双引号括住例如:S 30:0 L ffffffff '********'三、经典句式1 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????test eax eaxjz(jnz)2 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????jne(je)3 mov eax [ ]mov edx [ ]cmp eax,edxjnz(jz)或者begin: mov al [ ]mov cl [ ]cmp al,cljnz(jz)mov al [ +1]mov cl [ +1]cmp al,cljnz(jz)cmp eax ecx (eax为计数器)jnl beginmov al 014 lea edi [ ]lea esi [ ]repz cmpsdjz(jnz)5 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????setz (setnz) al (bl,cl…)6 mov eax [ ] 这里可以是地址,也可以是其它寄存器mov edx [ ] 同上通常这两个地址就储存着重要信息call 00??????test eax eaxsetz (setnz) bl,cl…7 call 00?????? ***push eax (ebx,ecx…)……call 00??????pop eax (ebx,ecx…)test eax eaxjz(jnz)intel x86 类NOP 指令列表(修订版)bkbll(bkbll@)2003/09/10这篇文章是无聊的时候写的, 因为看到phrack 61上面的fake-nop的东东, 觉得有意思.后来又受到eyas(cooleyas@)的启发,从intel指令手册上找了找,下面是我试验通过可以替换NOP的指令.注1: 这里不考虑双字节或以上的指令的fake-nop编码.注2: eyas加了xchg指令.16进制机器码x86汇编指令指令意义可能影响的寄存器或标志位-------------- ------------- ------------------- ---------------------------06 PUSHL %es es进栈esp0E PUSHL %cs cs进栈esp16 PUSHL %ss ss进栈esp1E PUSHL %ds ds进栈esp27 DAA 加法小数位调整AF CF PF SF ZF AL2F DAS 减法小数位调整AF CF PF SF ZF AL37 AAA 加法的ASCII调整AF CF AL3F AAS 减法小数位调整AF CF AL40 INC %eax %eax加1 AF OF PF SF ZF eax41 INC %ecx %ecx加1 AF OF PF SF ZF ecx42 INC %edx %edx加1 AF OF PF SF ZF edx43 INC %ebx %ebx加1 AF OF PF SF ZF ebx44 INC %esp %esp加1 AF OF PF SF ZF esp45 INC %ebp %ebp加1 AF OF PF SF ZF ebp46 INC %esi %esi加1 AF OF PF SF ZF esi47 INC %edi %edi加1 AF OF PF SF ZF edi48 DEC %eax %eax减1 AF OF PF SF ZF eax49 DEC %ecx %ecx减1 AF OF PF SF ZF ecx 4A DEC %edx %edx减1 AF OF PF SF ZF edx 4B DEC %ebx %ebx减1 AF OF PF SF ZF ebx 4C DEC %esp %esp减1 AF OF PF SF ZF esp 4D DEC %ebp %ebp减1 AF OF PF SF ZF ebp 4E DEC %esi %esi减1 AF OF PF SF ZF esi4F DEC %edi %edi减1 AF OF PF SF ZF edi50 PUSHL %eax eax进栈esp51 PUSHL %ecx ecx进栈esp52 PUSHL %edx edx进栈esp53 PUSHL %ebx ebx进栈esp54 PUSHL %esp esp进栈esp55 PUSHL %ebp ebp进栈esp56 PUSHL %esi esi进栈esp57 PUSHL %edi edi进栈esp90 NOP (NULL) (NULL)91 XCHG %ecx,%eax 交换寄存器内容eax,ecx92 XCHG %edx,%eax 交换寄存器内容edx,eax93 XCHG %ebx,%eax 交换寄存器内容ebx,eax95 XCHG %ebp,%eax 交换寄存器内容ebp,eax96 XCHG %esi,%eax 交换寄存器内容esi,eax97 XCHG %edi,%eax 交换寄存器内容edi,eax98 CBW 将byte的AL转换成word的EAX EAX9B WAIT 等待CPU处理完数据(NULL)D6 无效指令(NULL) (NULL)F5 CMC 转换CF标志位(开关) CFF8 CLC 清CF位(CF=0) CFF9 STC 设置CF位(CF=1) CFFC CLD 设置DF位(DF=1) DFFD STD 清理DF位(DF=0) DF1. 上面利用XCHG/PUSHL/INC/DEC的方法程序应该不会出错, 可以正常到目的, 但寄存器内容被改变了.inc eax就改变了eax的值,只能算无奈的办法.2. 利用改变标志寄存器位是个不错的想法, 基本上不会影响流程, 但看到还是改变了CPU的东西还是不满意.3. \x90(NOP),\x9b(wait),\xd6(bad) 这三个指令不错, 都不会改变程序的流程, 又不会改变寄存器的东东.这里尤其指明的是\xd6指令, 在intel手册上没查到对应什么指令, 但在linux下和windows下发现系统对于这个是继续执行下一条指令,和NOP相似.在我看来,上面这些指令利用顺序优先级最好是:\x90(NOP) > \xd6 > \x9b > 改变标志寄存器的操作指令> INC/DEC/PUSHL/XCHG//thx to eyas。

汇编指令和机器码的对应表

汇编指令和机器码的对应表

汇编指令和机器码的对应表汇编2010-04-20 21:07:19 阅读259 评论0 字号:大中小订阅一、汇编速查MOV AA,BB 将BB 放到AA 里CALL 调用子程序(相当于BASIC 的GOSUB)RET 与RETF 返回程序(相当于BASIC 的RETURN)CMP XX,YY 比较XX 与YYJZ 若相等则转移JNZ 若不相等则转移JB 若小于则转移JG 若大于则转移JMP 无条件转移J??? (各种转移指令)LOOP 循环直到CX为0INT XX 类似CALL 的中断涵数PUSH 推入栈(STACK)ESP:PUSH AXPOP 出栈ESP:POP CXXCHG 交换ESP:XCHG AX,BXIN、OUT 与PORT有关的IN/OUTXLAT 查表LEA 段内偏移量。

ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器AHPUSHF、POPF将棋标入/出栈ADD ESP ADD AX,CX (AX=AX+CX)ADC 加入棋标C的ADDINC ESP INC AX(AX=AX+1)AAA 加法校正SUB、SBB 减法DEC ESP:DEC AX(AX=AX-1)NEG 去补,MUL、IMUL 乘DIV、IDIV 除SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFTOR、XOR、AND 逻辑运算ESP :XOR AX,AX(AX=0)直接标志转移指令格式机器码测试条件如...则转移JC 72 C=1 有进位JNS 79 S=0 正号JNC 73 C=0 无进位JO 70 O=1 有溢出JZ/JE 74 Z=1 零/等于JNO 71 O=0 无溢出JNZ/JNE 75 Z=0 不为零/不等于JP/JPE 7A P=1 奇偶位为偶JS 78 S=1 负号JNP/IPO 7B P=0 奇偶位为奇间接标志转移指令格式机器码测试格式如...则转移JA/JNBE(比较无符号数) 77 C或Z=0 > 高于/不低于或等于JAE/JNB(比较无符号数) 73 C=0 >= 高于或等于/不低于JB/JNAE(比较无符号数) 72 C=1 < 低于/不高于或等于JBE/JNA(比较无符号数) 76 C或Z=1 <= 低于或等于/不高于JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 > 大于/不小于或等于JGE/JNL(比较带符号数) 7D S异或O=0 >= 大于或等于/不小于JL/JNGE(比较带符号数) 7C S异或O=1 < 小于/不大于或等于JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <= 小于或等于/不大于无条件转移指令JMP指令格式执行操作机器码说明段内直接短转移Jmp short (IP)←(IP)+8位位移量EB 转移范围-128到+127字节段内直接近转移Jmp near (IP)←(IP)+16位位移量E9 转移到段内的任一位置段内间接转移Jmp word (IP)←(有效地址EA) FF段间直接(远)转移Jmp far (IP)←(偏移地址)(CS)←(段地址) EA段间间接转移Jmp dword (IP)←(EA)(CS)←(EA+2)********************************************************************************************************************************/article/2/2300.shtm汇编指令与机器码的相互转换(转载)查看上面的网址。

8086汇编语言

8086汇编语言

8086汇编语言8086汇编语言是一种用于编写Intel 8086微处理器的程序的低级语言。

它是x86指令集的最早版本,是现代PC上使用的汇编语言的基础。

本文将介绍8086汇编语言的基本概念、指令系统、程序格式、程序设计方法和应用实例,以帮助读者掌握这门古老而强大的语言。

什么是8086汇编语言8086汇编语言是一种用助记符表示机器指令的语言,它可以直接操作CPU、寄存器、内存和端口等硬件资源。

8086汇编语言的优点是执行速度快、占用空间少、控制能力强,缺点是可读性差、可移植性差、编程难度大。

8086汇编语言的程序由三个部分组成:伪指令、指令和数据。

伪指令是用来告诉汇编程序如何处理源程序的命令,如定义变量、分配内存、设置段属性等。

指令是用来控制CPU执行操作的命令,如数据传送、算术运算、逻辑运算、控制转移等。

数据是用来存储或操作的信息,如常数、变量、字符串等。

8086汇编语言的程序需要经过汇编程序(如MASM)将源代码转换为机器代码,然后再由链接程序(如LINK)将多个目标模块连接成可执行文件,最后由加载程序(如DOS)将可执行文件加载到内存中运行。

8086微处理器8086微处理器是Intel公司于1978年推出的一款16位微处理器,它是x86系列微处理器的第一代产品,也是IBM PC机的原始CPU。

它具有以下特点:工作频率为5MHz~10MHz,每秒可执行约33万条指令内部结构由总线接口单元(BIU)和执行单元(EU)组成,实现了取指和执行的并行操作寄存器由四个16位通用寄存器(AX, BX, CX, DX)、四个16位段寄存器(CS, DS, SS, ES)、一个16位标志寄存器(FLAGS)和一个16位指令指针(IP)组成指令系统由100多条指令组成,分为数据传送类、算术运算类、位操作类、控制转移类和处理机控制类五大类存储器管理采用了分段机制,每个段最大为64KB,总容量为1MB支持两种工作模式:实地址模式和保护模式,实地址模式下可以直接访问物理地址,保护模式下可以实现多任务和内存保护8086汇编语言程序格式8086汇编语言程序一般采用以下格式:[段名] segment [段属性][伪指令][数据][子程序][段名] ends其中:段名是用来标识一个段的名称,可以自定义,但不能与伪指令或寄存器重名段属性是用来设置一个段的类型和特征,如代码段(code)、数据段(data)、堆栈段(stack)等伪指令是用来定义变量、分配内存、设置偏移量等功能的命令,如DB, DW, DD, ORG, ASSUME等数据是用来存储或操作的信息,如常数、变量、字符串等子程序是用来实现特定功能的代码段,如输入输出、排序、查找等一个典型的8086汇编语言程序由以下三个段组成:数据段(data segment):用来存放程序中用到的数据,如变量、常量、字符串等代码段(code segment):用来存放程序中的指令,如数据传送、算术运算、控制转移等堆栈段(stack segment):用来存放程序中的临时数据,如函数调用时的参数、返回地址、局部变量等一个简单的8086汇编语言程序示例如下:data segmentmsg db 'Hello, world!', '$' ;定义一个字符串变量data endscode segmentassume cs:code, ds:data ;告诉汇编程序代码段和数据段的名称start: ;程序入口标号mov ax, data ;将数据段地址加载到ax寄存器mov ds, ax ;将ax寄存器的值传送到ds寄存器,设置数据段寄存器mov dx, offset msg ;将字符串变量的偏移地址加载到dx寄存器mov ah, 9 ;设置ah寄存器为9,表示调用DOS中断的输出字符串功能int 21h ;调用DOS中断21h,输出字符串mov ah, 4ch ;设置ah寄存器为4ch,表示调用DOS中断的退出程序功能int 21h ;调用DOS中断21h,退出程序code endsend start ;告诉汇编程序程序结束的位置8086汇编语言指令系统8086汇编语言指令系统由100多条指令组成,分为五大类:数据传送类:用来实现数据在寄存器、内存和端口之间的传送,如MOV, PUSH, POP, XCHG等算术运算类:用来实现数据的加减乘除等运算,如ADD, SUB, MUL, DIV等位操作类:用来实现数据的位移、旋转、逻辑和测试等操作,如SHL, SHR, ROL, ROR, AND, OR, XOR, NOT, TEST等控制转移类:用来实现程序的顺序、条件和无条件跳转,如JMP, JZ, JNZ, JCXZ, CALL, RET等处理机控制类:用来实现处理机状态的设置和查询,如CLC, STC, CMC, CLD, STD, CLI, STI等每条指令由助记符和操作数组成,助记符表示指令的功能,操作数表示指令的对象。

8086汇编语言学习(一)8086汇编介绍

8086汇编语言学习(一)8086汇编介绍

8086汇编语⾔学习(⼀)8086汇编介绍1. 学习汇编的⼼路历程  进⾏8086汇编的介绍之前,想先分享⼀下我学习汇编的⼼路历程。

rocketmq的学习 其实我并没有想到这么快的就需要进⼀步学习汇编语⾔,因为汇编对于我的当前的⼯作内容来说太过底层。

但在⼏个⽉前,当时我正尝试着阅读rocketmq的源码。

和许多流⾏的java中间件、框架⼀样,rocketmq底层的⽹络通信也是通过netty实现的。

但由于我对netty并不熟悉,在⼯作中使⽤spring-cloud-gateway的时候甚⾄写出了⼀些导致netty内存泄漏的代码,却不太明⽩个中原理。

出于我个⼈的习惯,在学习源码时,抛开整体的程序架构不论,希望⾄少能对其中涉及到的底层内容有⼀个⼤致的掌握,能让我像⿊盒⼦⼀样去看待它们。

趁热打铁,我决定先学习netty,这样既能在⼯作时更好的定位、解决netty相关的问题,⼜能在研究依赖netty的开源项⽬时更加得⼼应⼿。

netty的学习 随着对netty学习的深⼊,除了感叹netty统⼀规整的api接⼝设计,内部交互灵活可配置、同时⼜提供了⾜够丰富的开箱即⽤组件外;更进⼀步的,netty或者说java nio涉及到了许多更底层的东西,例如:io多路复⽤,零拷贝,事件驱动等等。

⽽这些底层技术在redis,nginx,node-js等以⾼效率io著称的应⽤中被⼴泛使⽤。

扪⼼⾃问,⾃⼰在多⼤程度上理解这些技术?为什么io多路复⽤在io密集型的应⽤中,效率能够⽐之传统的同步阻塞io显著提⾼?⼀次⽹络或磁盘的io传输内部到底发⽣了什么,零拷贝到底快在了哪⾥? 如果没有很好的弄明⽩这些问题,那么我的netty学习将是不完整的。

我有限的知识告诉我,答案就在操作系统中。

操作系统作为软硬件的⼤管家,对上提供应⽤程序接⼝(程序员们通常使⽤⾼级语⾔提供的api间接调⽤);对下控制硬件(cpu、内存、磁盘⽹卡等外设);依赖硬件提供控制并发的系统原语;其牵涉的许多模块内容都已经独⽴发展了(多系统进程间通信->计算机⽹络、⽂件系统->数据库)。

第3章_8086微机机器语言指令 pdf版

第3章_8086微机机器语言指令 pdf版

第3章8086微机机器语言指令 教学目标:掌握数据操作数的寻址方式;掌握数据传送指令、加减运算指令、位操作指令的功能与用法;了解其它指令的作用。

教学重点:常用指令的功能与用法。

教学难点:指令的应用。

3.1.1 指令格式一条指令是一个有意义的二进制代码序列,它是机器语言的一个语句,其基本格式为:操作码字段操作码字段OP OP 地址码字段地址码字段AA ——操作码表明了指令的功能及操作,——地址码又称操作数字段,指明了参与操作运算的操作数地址。

1. 指令操作码 指令系统中每条指令都有唯一确定的操作码。

操作码的位数越多,所能表达的操作种类就越多。

(1) 规整型操作码字段的长度和位置固定,又称定长编码,编码最简单。

◆定长编码多用在大中型计算机上,如IBM 370机指令操作码都为8bit(位)。

RISC 指令集采用定长编码。

◆定长编码有利于简化硬件设计、减少指令译码时间;但往往造成资源浪费(冗余)。

(2) 非规整型非规整型操作码的长度不定,且分散在指令字的不同位置上,因此又称变长编码。

变长编码广泛用在小型、微型计算机上,如PDP 小型机。

CISC 指令集是非规整型编码。

1. 指令操作码(续)扩展操作码法:灵活充分利用指令的各个字段,在不增加指令长度的情况下,扩展操作码能表示更多的指令。

80x86微处理器采用扩展操作码法。

变长编码增加指令译码的难度,控制器的设计较复杂。

2. 指令地址码每条指令必须包括CPU执行所需的全部信息。

对双操作数指令,除了操作码OP(Operate)外,还必须包含:第一源操作数地址A1(Address1)、第二源操作数地址A2、操作结果的存放地址A3,以及下条指令在内存中的存放地址A4。

程序计数器PC(Program counter)来指向要执行指令的地址,现代计算机地址码字段有四种结构:三地址、双地址、单地址和零地址。

OP A1 A2 A3;操作为:[A1] OP [A2] →A3,三地址指令格式:OP A1 A2 A3PC+1→PC(隐含)三地址指令在小型、微型计算机中很少使用。

8086指令系统概述标准代码

8086指令系统概述标准代码
file:///D|/乜嘢洪/8086指令系统概述标准代码.txt(第 1/9 页)2008-2-13 20:45:44
file:///D|/乜嘢洪/8086指令系统概述标准代码.txt
?双操作数指令,除串操作指令外,不允许两个都是存储器。 ?立即数,CS不能做目的操作数。 ?IP不能显示地用做操作数。 1.数据传送类指令 ?数据传送是计算机中最基本、最重要的一种操作 ?传送指令也是最常使用的一类指令 ?传送指令把数据从一个位置传送到另一个位置 ?除标志寄存器传送指令(SAHF,POPF)外,均不影响标志位 ?重点掌握 MOV PUSH POP XCHG IN OUT XLAT LEA 传送指令MOV(move) 1.立即数送寄存器或主存 mov al , 4 ; mov cx , 0ffh ; mov si , 200h ; mov byte ptr [si] , 0ah ; mov word ptr [si+2 ], 0bh ; # 注意立即数是字节量还是字量 # 明确指令是字节操作还是字操作 MOV reg/mem , im al←4,字节传送 cx←00ffh,字传送 si←0200h,字传送 byte ptr 说明是字节操作 word ptr 说明是字操作
mov ds , ax ; mov [bx] , al ; 3.主存送(段)寄存器 mov al , [bx] mov dx , [bp] ; mov es , [si] ;
ds←ax,字传送 [bx]←al,字节传送 MOV reg/seg , mem; dx←ss:[bp] es←ds:[si]
file:///D|/乜嘢洪/8086指令系统概述标准代码.txt(第 5/9 页)2008-2-13 20:45:44
file:///D|/乜嘢洪/8086指令系统概述标准代码.txt

实验二 找出80868088指令系统所有指令的操作码的编码

实验二 找出80868088指令系统所有指令的操作码的编码

实验报告一、实验目的利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能。

二、实验内容(第一回合)一、用试探法-e 100 00 00 00 00 00 00(e 100...表示从100号单元开始编写内容)(我们将第2~6字节全部固定为00)-u 100 105 (u 100 105表示将100~105号单元共6个字节反汇编出来,(所谓“反汇编”就是把机器码还原成汇编语句))0AE9:0100 0000 ADD [BX+SI],AL0AE9:0102 0000 ADD [BX+SI],AL0AE9:0104 0000 ADD [BX+SI],AL结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。

记下来:指令码汇编指令---------------------------------------------------------------------0AE9:0100 0000 ADD [BX+SI],AL二、将指令首字节变为01,重复以上实验-e 100 01 00-u 100 1010AE9:0100 0100 ADD [BX+SI],AX结论:第1字节由00(二进制0000 0000)变为01(二进制0000 0001),ADD指令的第二个操作数由AL变为了AX。

AL为8位寄存器、AX为16位寄存器,印证了W字段的作用,增加一条有用的记录:指令码汇编指令-------------------------------------------------------------------------0AE9:0100 0000 ADD [BX+SI],AL0AE9:0100 0100 ADD [BX+SI],AX三、将指令首字节变为02,重复以上实验-e 100 02 00-u 100 1010AE9:0100 0200 ADD AL,[BX+SI]第1字节由00(二进制0000 0000)变为02(二进制0000 0010),ADD 操作的传送方向发生转变,印证了D字段的作用。

微机原理 8086指令系统(32)

微机原理 8086指令系统(32)

4.2 8086 的寻址方式
• 指令系统设计了多种操作数的来源, 寻找操作数的过程就是操作数的寻址 方式。 • 操作数采取哪一种寻址方式,会影响 机器运行的速度和效率。如何寻址一 个操作数对程序的设计来讲很重要。
各种寻址方式指令执行速度不同:
操作数在寄存器中指令执行速度快:在CPU内部立即 执行; 立即数寻址指令执行速度较快:直接从指令队列中 取数; 操作数在存储器中指令执行速度较慢:通过总线与 CPU交换数据。 CPU进行读/写存储器的操作: ①把一个偏移量送到BIU,计算出20位物理地址; ②执行总线周期存取操作数。
作用:实现对存储单元的读/写操作。
例 MOV AX,[2000H] 解:设DS = 3000H; (32000H)= 1234H 由指令得:EA = 2000H (16位逻辑地址)
物理地址 = 16×3000H+2000H = 32000H(20位,20根地址线)
则: AX = 1234H 指令执行过程如图所示。 (注:如用AL替代AX,则AL=34H)
1、直接寻址方式 2、寄存器间接寻址方式 3、寄存器相对寻址方式 4、基址变址寻址方式 5、相对基址变址寻址方式
1、直接寻址方式
• 有效地址在指令中直接给出(存储单元的有效地址EA (即:操作数的偏移地址)直接由指令给出) • 默认的段地址在DS段寄存器,可使用段超越前缀改变
MOV AX,[2000H] ;AX←DS:[2000H] ;指令代码:A10020 MOV AX,ES:[2000H] ;AX←ES:[2000H] ;指令代码:26A10020 特点: 机器码中,有效地址存放在代码段中指令的操作码之后,而该地 址单元中的数据总是存放在存储器中。须先求出操作数的物理 地址,再从存储器中取得操作数。 ×DS + EA 操作数的物理地址=16 16×

8086汇编和机器码的对应表

8086汇编和机器码的对应表

单片机指令功能一览表助记符代码说明MOV A,Rn E8~EF寄存器AMOV A,direct E5 dircet 直接字节送AMOV A,Ri ER~E7间接RAM送AMOV A,#data 74 data 立即数送AMOV Rn,A F8~FFA送寄存器MOV Rn,dircet A8~AF dircet 直接字节送寄存器MOV Rn,#data 78~7F data 立即数送寄存器MOV dircet,A F5 dircet A送直接字节MOV dircet,Rn 88~8F dircet 寄存器送直接字节MOV dircet1,dircet2 85 dircet1dircet2 直接字节送直接字节MOV dircet,Ro 86~87间接RAM送直接字节MOV dircet,#data 75 dircet data 立即数送直接字节MOV Ri,A F6~F7A送间接RAMMOV Ri,#data 76~77 data 直接字节送间接RAMMOV Ri,#data 76~77 data 立即数送间接RAMMOV DPTR,#data16 90 data 15~8 16位常数送数据指针data7~0MOVC A,A+DPTR 93由((A)+(DPTR))寻址的程序存贮器字节选AMOVC A,A+PC 83由((A)+(PC));寻址的程序存贮器字节送A MOVX A,Ri E2~E3送外部数据(8位地址)送AMOVX A,DPTR E0送外部数据(16位地址)送AMOVX Ri,A F2~F3A送外部数据(8位地址)MOVX DPTR,A F0A送外部数据(16位地址)PUSH dircet C0 dircet 直接字节进栈,SP加1POP dircet D0 dircet 直接字节退栈,SP减1 XCH A,Rn C8~CF交换A和寄存器XCH A,dircet C5 dircet 交换A和直接字节XCH A,Ri C6~C7交换A和间接RAMXCH A,Ri D6~D7交换A和间接RAM的低位SWAP A C4算术操作(A的二个半字节交换)ADD A,Rn 28~2F寄存器加到AADD A,dircet 25 dircet 直接字节加到AADD A,Ri 26~27间接RAM加到AADD A,#data 24data立即数加到AADD A,Rn 38~3F寄存器和进位位加到AADD A,dircet 35dircet直接字节和进位位加到AADD A,Ri 36~37间接字节和进位位加到AADD A,data 34 data 立即数和进位位加到AADD A,Rn 98~9FA减去寄存器和进位位ADD A,dircet 95 dircet A减去直接字节和进位位ADD A,Ri 36~37间接RAM和进位位加到AADD A,data 34 data 立即数和进位位加到A SUBB A,Rn 98~9FA减去寄存器和进位位SUBB A,dircet 95 dircet A减去直接字节和进位位SUBB A,Ri 96~97A减去间接RAM和进位位SUBB A,#data 94 data A减去立即数和进位位INC A 04A加1INC Rn 08~0F寄存器加1INC dircet 05 dircet 直接字节加1INC Ri 06~07间接RAM加1DEC A 14A减1DEC Rn 18~1F寄存器减1DEC dircet 15 dircet 直接字节减1DEC Ri 16~17间接RAM减1INC DPTR A3数据指针加1MUL AB A4A乘以BDIV AB 84A除以BDA A D4A的十进制加法调整逻辑操作ANL A,Rn 58~5F寄存器“与”到AANL A,dircet 55 dircet 直接字节“与”到AANL A,Ri 56~57间接RAm“与”到AANL A,#data 54 data 立即数“与”到AANL dircet A 52 dircet A“与”到直接字节ANL dircet,#data 53 dircet data 立即数“与”到直接字节ORL A,Rn 48~4F寄存器“或”到AORL A,dircet 45 dircet 直接字节“或”到AORL A,Ri 46~47间接RAM“或”到AORL A,#data 44 data 立即数“或”到AORL dircet,A 42 dircet A“或”到直接字节ORL dircet,#data 43 dircetdata 立即数“或”到直接字节XRL A,Rn 68~6F寄存器“异或”到AXRL A,dircet 65 dircet 直接字节“异或”到A XRL A,Ri 66~67间接RAM“异或”到AXRL A,#data 64 data 立即数“异或”到A XRL dircet A 62 dircet A“异或”到直接字节XRL dircet,#data 63 dircet data 立即数“异或”到直接字节CLR A E4清零CPL A F4A取反RL A 23A左环移RLC A 33A通过进位左环移RR A 03A右环移RRC A 13A通过进位右环移控制程序转移ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用LCALL addr 16 12 addr(15~8) 长子程序调用addr(7~0)RET 22子程序调用返回RETI addr 11 32中断调用返回AJMP addr 11 △ 1 addr(a7~a6) 绝对转移LJMP addr 16 02addr(15~8)长转移addr(7~0)SJMP rel 80 rel 短转移,相对转移JMP A+DPTR 73相对于DPTR间接转移JZ rel 60 rel A为零转移JNZ rel 70 rel A为零转移CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移CJNE Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移DJNZ dircet,rel B5 dircet rel 直接字节减1,不为零则转移NOP 00空操作*=a10a9a8l△=a10a9a80布尔变量操作CLR C C3清零进位CLR bit C2清零直接位SETB C D3置位进位SETB bit D2置位直接位CPL C B3进位取反CPL bit B2直接位取反ANL C,bit 82 dit 直接数“与”到进位ANL C,/bit B0直接位的反“与”到进位ORL C,bit 72 bit 直接位“或”到进位ORL C,/bit A0 bit 直接位的反“或”到进位MOV C,bit A2 bit 直接位送进位MOV bit,C 92 bit 进位送直接位JC rel 40 rel 进位位为1转移JNC rel 50 rel 进位位为0转移JB bit,rel 20 bit rel 直接位为1相对转移JNB bit,rel 30 bit rel 直接位为0相对转移JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位0人| 分享到:阅读(213)| 评论(0)| 引用(0) |举报。

Intel8086ASMCode汇编指令的机器码

Intel8086ASMCode汇编指令的机器码

Intel8086ASMCode汇编指令的机器码8086指令码汇总表8086指令有汇编语⾔指令和指令码两种形式,汇编语⾔指令形式经过汇编程序处理后⽣成指令码形式。

通过指令码形式可帮助理解汇编语⾔指令格式的含义和⽤法。

O、8086指令码格式0B/1B 1B或2B 0B/1B 0B/1B/2B/4B 0B/1B/2B/4B 指令前缀操作码段寻址⽅式段偏移量参数⽴即数参数说明:偏移量参数和⽴即数参数的有⽆由寻址⽅式段决定。

⼀、传送类指令MOV指令REG/MEM→/←REG 100010dw mod reg r/mIMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1MEM→AX 1010000w addr-low addr-highAX→MEM 1010001w addr-low addr-highREG/MEM→段REG 10001110 mod reg r/m 8E段REG→REG/MEM 10001100 mod reg r/m 8CPUSH指令REG/MEM 11111111 mod 110 r/m FFREG 01010reg段REG 000reg110POP指令REG/MEM 10001111 mod 000 r/m 8FREG 01011reg段REG 000reg111XCHG指令REG/MEM←→REG 1000011w mod reg r/mREG←→AX 10010regXLAT指令11010111 D7LEA指令10001101 mod reg r/m 8DLDS指令11000101 mod reg r/m C5LES指令11000100 mod reg r/m C4LAHF指令10011111 9FSAHF指令10011110 9EPUSHF指令10011100 9CPOPF指令10011101 9DIN指令直接寻址1110010w port间接寻址1110110wOUT指令直接寻址1110011w port间接寻址1110111wCBW指令10011000 98CWD指令10011001 99 说明:d—0/1表⽰REG为源/⽬的操作数;w—0/1表⽰操作数类型为BYTE/WORD;mod、r/m—寻址⽅式,参见教材P56~57;IMME—⽴即数操作数,字段中⽤data表⽰;reg—通⽤REG⽤3位编码,段REG只⽤2位编码(即为0xx)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086指令码汇总表8086指令有汇编语言指令和指令码两种形式,汇编语言指令形式经过汇编程序处理后生成指令码形式。

通过指令码形式可帮助理解汇编语言指令格式的含义和用法。

O、8086指令码格式0B/1B 1B或2B 0B/1B 0B/1B/2B/4B 0B/1B/2B/4B 指令前缀操作码段寻址方式段偏移量参数立即数参数说明:偏移量参数和立即数参数的有无由寻址方式段决定。

一、传送类指令MOV指令REG/MEM→/←REG 100010dw mod reg r/mIMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1MEM→AX 1010000w addr-low addr-highAX→MEM 1010001w addr-low addr-highREG/MEM→段REG 10001110 mod reg r/m 8E段REG→REG/MEM 10001100 mod reg r/m 8CPUSH指令REG/MEM 11111111 mod 110 r/m FFREG 01010reg段REG 000reg110POP指令REG/MEM 10001111 mod 000 r/m 8FREG 01011reg段REG 000reg111XCHG指令REG/MEM←→REG 1000011w mod reg r/mREG←→AX 10010regXLAT指令11010111 D7LEA指令10001101 mod reg r/m 8DLDS指令11000101 mod reg r/m C5LES指令11000100 mod reg r/m C4LAHF指令10011111 9FSAHF指令10011110 9EPUSHF指令10011100 9CPOPF指令10011101 9DIN指令直接寻址1110010w port间接寻址1110110wOUT指令直接寻址1110011w port间接寻址1110111wCBW指令10011000 98CWD指令10011001 99 说明:d—0/1表示REG为源/目的操作数;w—0/1表示操作数类型为BYTE/WORD;mod、r/m—寻址方式,参见教材P56~57;IMME—立即数操作数,字段中用data表示;reg—通用REG用3位编码,段REG只用2位编码(即为0xx)。

二、算术运算类指令ADD指令REG/MEM+REG→任一000000dw mod reg r/mREG/MEM += IMME 100000sw mod 000 r/m data data if sw=01 AX += IMME 0000010w data data if w=1ADC指令REG/MEM+REG→任一000100dw mod reg r/mREG/MEM += IMME 100000sw mod 010 r/m data data if sw=01 AX += IMME 0001010w data data if w=1INC指令REG/MEM 1111111w mod 000 r/mREG 01000regSUB指令REG/MEM-REG→任一001010dw mod reg r/mREG/MEM -= IMME 100000sw mod 101 r/m data data if sw=01 AX -= IMME 0010110w data data if w=1SBB指令REG/MEM-REG→任一000110dw mod reg r/mREG/MEM -= IMME 100000sw mod 011 r/m data data if sw=01 AX -= IMME 0001110w data data if w=1DEC指令REG/MEM 1111111w mod 001 r/mREG 01001regNEG指令1111011w mod 011 r/mCMP指令REG/MEM-REG 001110dw mod reg r/mREG/MEM-IMME 100000sw mod 111 r/m data data if sw=01 AX-IMME 0011110w data data if w=1MUL指令1111011w mod 100 r/mIMUL指令1111011w mod 101 r/mDIV指令1111011w mod 110 r/mIDIV指令1111011w mod 111 r/mAAA指令00110111 37DAA指令00100111 27AAS指令00111111 3FDAS指令00101111 2FAAM指令11010100 00001010 0A D4AAD指令11010101 00001010 0A D5 说明:sw--01表示16位立即数,11表示8位立即数操作时扩展成16位;REG/MEM-REG—MEM可为减数或被减数。

三、逻辑运算类指令NOT指令1111011w mod 010 r/mAND指令REG/MEM&REG→任一001000dw mod reg r/mREG/MEM &= IMME 1000000w mod 100 r/m data data if w=1 AX &= IMME 0010010w data data if w=1OR指令REG/MEM|REG→任一000010dw mod reg r/mREG/MEM |= IMME 1000000w mod 001 r/m data data if w=1 AX |= IMME 0000110w data data if w=1XOR指令REG/MEM^REG→任一001100dw mod reg r/mREG/MEM ^= IMME 1000000w mod 110 r/m data data if w=1 AX ^= IMME 0011010w data data if w=1TEST指令REG/MEM&REG 100010dw mod reg r/mREG/MEM&IMME 1111011w mod 000 r/m data data if w=1 AX&IMME 1010110w data data if w=1SHL/SAL指令110100vw mod 100 r/mSHR指令110100vw mod 101 r/mSAR指令110100vw mod 111 r/mROL指令110100vw mod 000 r/mROR指令110100vw mod 001 r/mRCL指令110100vw mod 010 r/mRCR指令110100vw mod 011 r/m说明:v—0/1表示移位次数为1/(CL)。

四、控制转移类指令JMP指令段内直接短转移11101011 disp EB 直接转移11101001 disp-low disp-high E1 间接转移11111111 mod 100 r/m FF段间直接转移11101010 offset-low offset-high seg-low seg-high 间接转移11111111 mod 101 r/m FFJO指令01110000 disp 70 JNO指令01110001 disp 71 JC指令01110010 disp 72 JNC指令01110011 disp 73 JE/JZ指令01110100 disp 74 JNE/JNZ指令01110101 disp 75 JS指令01111000 disp 78 JNS指令01111001 disp 79 JP/JPE指令01111010 disp 7A JNP/JPO指令01111011 disp 7B JA/JNBE指令01110111 disp 77 JAE/JNB指令01110011 disp 73 JB/JNAE指令01110010 disp 72 JBE/JNA指令01110110 disp 76 JG/JNE指令01111111 disp 7F JGE/JNL指令01111101 disp 7D JL/JNGE指令01111100 disp 7C JLE/JNG指令01111110 disp 7E JCXZ指令11100011 disp E3 LOOP指令11100010 disp E2 LOOPZ/LOOPE指令11100001 disp E1 LOOPNZ/LOOPN指令11100000 disp E0 CALL指令段内直接11101000 disp-low disp-high E8 间接11111111 mod 010 r/m FF段间直接10011010 9A offset-low offset-high seg-low seg-high 间接11111111 mod 011 r/m FFRET指令段内返回11000011 C3 加参数返回11000010 data-low data-high C2段间返回11001011 CB 加参数返回11001010 data-low data-high CAINT指令常规中断11001101 type BC 3号中断11001100 CCINTO指令11001110 CEIRET指令11001111 CF说明:JB/JNE—与JC指令相同;JAE/JNB—与JNC指令相同;type—中断类型号。

五、串操作类指令REP指令1111001zMOVS指令1010010wCMPS指令1010011wSCAS指令1010111wLODS指令1010110wSTOS指令1010101w说明:REP—z=0时为REPNE,Z=1时为REP和REPZ,8086默认REP对应MOVS、STOS,REPZ对应CMPS、SCAS(比较两者与5条指令配合时的有效性)。

六、处理器控制类指令CLC指令11111000 F8STC指令11111001 F9CMC指令11110101 F5CLI指令11111010 FASTI指令11111011 FBCLD指令11111100 FCSTD指令11111101 FDNOP指令10010000 90HLT指令11110100 F4WAIT指令10011011 9BESC指令11011xxx mod xxx r/mLOCK指令11110000 F0 说明:x—可为任意值(0/1)。

相关文档
最新文档