汇编指令与机器码

合集下载

汇编语言

汇编语言

汇编语言汇编语言实质上是机器语言的符号表示,即用助记符(指令功能的英文缩写)代替了机器语言指令的二进制代码。

用汇编语言按着规定的语法规则编写的程序称为汇编语言源程序(*.asm)。

汇编语言源程序中的汇编指令与指令的机器码(目标代码)是一一对应的。

汇编语言2高级语言是面向过程的语言,它不依赖于特定的机器,独立于机器,高级语言编写的程序由一系列编程语句和相应的语法规则构成,编程方法更适合于人们的思维习惯,易于理解和阅读,程序本身具有可移植性,通用性强高级语言的缺点是编译程序和解释程序复杂,占用内存空间大,与汇编语言程序相比,经编译后产生的目标程序长,执行速度慢高级语言3汇编语言上机处理过程4汇编语言汇编语言的程序格式伪指令程序设计基本方法5汇编语言的程序格式汇编语言程序的结构汇编语言语句类型及格式汇编语言的数据与表达式6源程序的一般格式STACK SEGMENT┇STACK ENDSDATA SEGMENT┇DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:…┇CODE ENDSEND START7例题一个两字相加的程序。

DATA SEGMENT ;定义数据段DATA1 DW 1234H ;定义被加数DATA2 DW 5678H ;定义加数DATA ENDS ;数据段结束ESEG SEGMENT ;定义附加段SUM DW 2 DUP(?);定义存放结果区ESEG ENDS ;附加段结束CODE SEGMENT ;定义代码段;下面的语句说明程序中定义的各段分别用哪个段寄存器寻址ASSUME CS:CODE, DS:DATA,ES:ESEGSTART:MOV AX,DSEG ;START为程序开始执行的启动标号MOV DS,AX ;初始化DSMOV AX,ESEGMOV ES,AX ;初始化ESLEA SI,SUM ;存放结果的偏移地址送SIMOV AX,DATA1 ;取被加数ADD AX,DATA2 ;两数相加MOV ES:[SI],AX ;和送附加段的SUM单元中HLTCODE ENDS ;代码段结束END START ;源程序结束8源程序的结构特点汇编语言程序通常由若干段组成,段由伪指令SEGMENT与ENDS定义,各段顺序任意,段的数目按需要确定,原则上不受限制。

实验一查看CPU和内存,用机器指令和汇编指令编程

实验一查看CPU和内存,用机器指令和汇编指令编程

实验⼀查看CPU和内存,⽤机器指令和汇编指令编程⼀.实验准备前⾔:由于⼤家的电脑⼤多使⽤的是64位的操作系统,不能在系统⾃带的MS-DOS环境下编写汇编源程序,所以我们需要DOSBox这个软件,以便在64位环境下编写汇编源程序。

下载完成后进⾏挂载,进⼊挂载虚拟盘进⼊debug环境即可⼆.使⽤debug将书中事例程序段写⼊内存,逐条执⾏,观察每条指令执⾏后CPU相关寄存器中内容的变化(可⽤E命令和A命令以两种⽅式将指令写⼊内存)1.使⽤e命令将指令机器码写⼊指定1000:0地址的内存2.使⽤u命令进⾏反汇编查看是否与对应的汇编指令相符合经过核对与相应的汇编指令符合3.使⽤t命令单步执⾏由于指令⾏数过多,这⾥只列出了部分代码截图。

经核对,其符合汇编指令的执⾏第⼀步,将寄存器ax的值设为4e20h第⼆步,将寄存器ax的值加上1416h变为6236h第三步,将寄存器bx的值设为2000h第四步,将寄存器ax的值与bx的值想加并赋给ax......步骤过多就不在此⼀⼀列举了,总之可以发现⽤e指令通过机器码修改内存的内容可以达到汇编指令的作⽤4.使⽤a命令以汇编指令的形式在内存中写⼊机器指令5.使⽤u反汇编指令检查汇编指令与机器码是否对应可以发现将汇编指令反汇编后的机器码与之前所列机器码⼀致6.使⽤t命令进⾏单步执⾏通过汇编指令与单步执⾏的结果与机器码单步执⾏的结果⼀致三.将下⾯三条指令写⼊从2000:0开始的内存单元中,使⽤下⾯三条指令计算2的8次⽅1.代码分析---恢复内容结束---实验结论⼀.实验准备前⾔:由于⼤家的电脑⼤多使⽤的是64位的操作系统,不能在系统⾃带的MS-DOS环境下编写汇编源程序,所以我们需要DOSBox这个软件,以便在64位环境下编写汇编源程序。

下载完成后进⾏挂载,进⼊挂载虚拟盘进⼊debug环境即可⼆.使⽤debug将书中事例程序段写⼊内存,逐条执⾏,观察每条指令执⾏后CPU相关寄存器中内容的变化(可⽤E命令和A命令以两种⽅式将指令写⼊内存)1.使⽤e命令将指令机器码写⼊指定1000:0地址的内存2.使⽤u命令进⾏反汇编查看是否与对应的汇编指令相符合经过核对与相应的汇编指令符合3.使⽤t命令单步执⾏由于指令⾏数过多,这⾥只列出了部分代码截图。

汇编指令对应的机器码

汇编指令对应的机器码

汇编指令对应的机器码一、引言汇编语言是一种低级语言,它是机器语言的助手。

在计算机科学中,汇编语言是用于编写程序的一种基于文本的语言,它使用助记符来表示每个指令操作码。

每个汇编指令都对应着一段机器码。

本文将从不同的角度详细介绍汇编指令对应的机器码。

二、汇编指令和机器码1. 汇编指令汇编指令是一种基于文本的符号表示法,用来代替二进制代码。

它通过使用助记符来表示操作码和操作数,使得程序员更容易地理解和修改代码。

例如,在x86架构中,mov指令可以用来将一个值从一个寄存器移动到另一个寄存器。

2. 机器码机器码是计算机可以直接执行的二进制代码。

它由0和1组成,并且具有特定的格式和结构。

每个CPU都有自己独特的指令集架构,因此不同CPU上相同的汇编代码可能会产生不同的机器码。

三、x86架构下常见汇编指令对应的机器码1. movmov指令用于将数据从一个位置复制到另一个位置。

在x86架构中,它的机器码通常是8位或16位。

例如,将寄存器AX中的值移动到寄存器BX中,其机器码为:89 C3。

2. addadd指令用于将两个数相加,并将结果存储在一个寄存器或内存位置中。

在x86架构中,它的机器码通常是8位或16位。

例如,将寄存器AX和BX中的值相加,并将结果存储在CX寄存器中,其机器码为:01 C8。

3. subsub指令用于从第一个数中减去第二个数,并将结果存储在一个寄存器或内存位置中。

在x86架构中,它的机器码通常是8位或16位。

例如,从寄存器AX中减去BX的值,并将结果存储在CX寄存器中,其机器码为:29 CB。

4. jmpjmp指令用于无条件跳转到程序的另一部分。

在x86架构中,它的机器码通常是2字节或4字节。

例如,在代码段偏移地址为0x1234处设置一个标签mylabel,并跳转到该标签所代表的地址处,其机器码为:EB 10(其中10表示偏移量)。

5. cmpcmp指令用于比较两个数的大小关系,并根据比较结果设置标志位。

汇编和机器码的对应表

汇编和机器码的对应表

单片机指令功能一览表助记符代码说明MOV A,Rn E8~EF寄存器AMOV A,direct E5 dircet直接字节送AMOV A,@Ri ER~E7间接RAM送AMOV A,#data74 data立即数送AMOV Rn,A F8~FF A送寄存器MOV Rn,dircet A8~AF dircet直接字节送寄存器MOV Rn,#data78~7F data立即数送寄存器MOV dircet,A F5 dircet A送直接字节MOV dircet,Rn88~8F dircet寄存器送直接字节MOV dircet1,dircet285 dircet1 dircet2直接字节送直接字节MOV dircet,@Ro86~87间接RAM送直接字节MOV dircet,#data75 dircet data立即数送直接字节MOV@Ri,A F6~F7A送间接RAMMOV@Ri,#data76~77 data直接字节送间接RAM MOV@Ri,#data76~77 data立即数送间接RAM MOV DPTR,#data1690 data 15~816位常数送数据指针data7~0MOVC A,@A+DPTR93由((A)+(DPTR))寻址的程序存贮器字节选AMOVC A,@A+PC83由((A)+(PC));寻址的程序存贮器字节送AMOVX 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减1XCH 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,Rn28~2F寄存器加到AADD A,dircet25 dircet直接字节加到AADD A,@Ri26~27间接RAM加到AADD A,#data24data立即数加到AADD A,Rn38~3F寄存器和进位位加到A ADD A,dircet35dircet直接字节和进位位加到A ADD A,@Ri36~37间接字节和进位位加到A ADD A,data34 data立即数和进位位加到A ADD A,Rn98~9F A减去寄存器和进位位ADD A,dircet95 dircet A减去直接字节和进位位ADD A,@Ri36~37间接RAM和进位位加到A ADD A,data34 data立即数和进位位加到A SUBB A,Rn98~9F A减去寄存器和进位位SUBB A,dircet95 dircet A减去直接字节和进位位SUBB A,@Ri96~97A减去间接RAM和进位位SUBB A,#data94 data A减去立即数和进位位INC A04A加1INC Rn08~0F寄存器加1INC dircet05 dircet直接字节加1INC@Ri06~07间接RAM加1DEC A14A减1DEC Rn18~1F寄存器减1DEC dircet15 dircet直接字节减1DEC@Ri16~17间接RAM减1INC DPTR A3数据指针加1MUL AB A4A乘以BDIV AB84A除以BDA A D4A的十进制加法调整逻辑操作ANL A,Rn58~5F寄存器“与”到AANL A,dircet55 dircet直接字节“与”到AANL A,@Ri56~57间接RAm“与”到AANL A,#data54 data立即数“与”到AANL dircet A52 dircet A“与”到直接字节ANL dircet,#data53 dircet data立即数“与”到直接字节ORL A,Rn48~4F寄存器“或”到AORL A,dircet45 dircet直接字节“或”到AORL A,@Ri46~47间接RAM“或”到AORL A,#data44 data立即数“或”到AORL dircet,A42 dircet A“或”到直接字节ORL dircet,#data43 dircet data立即数“或”到直接字节XRL A,Rn68~6F寄存器“异或”到AXRL A,dircet65 dircet直接字节“异或”到AXRL A,@Ri66~67间接RAM“异或”到AXRL A,#data64 data立即数“异或”到AXRL dircet A62 dircet A“异或”到直接字节XRL dircet,#data63 dircet data立即数“异或”到直接字节CLR A E4清零CPL A F4A取反RL A23A左环移RLC A33A通过进位左环移RR A03A右环移RRC A13A通过进位右环移控制程序转移ACALL addr 11*1 addr(a7~a0)绝对子程序调用LCALL addr 1612 addr(15~8)长子程序调用addr(7~0)RET22子程序调用返回RETI addr 1132中断调用返回AJMP addr 11△1 addr(a7~a6)绝对转移LJMP addr 1602addr(15~8)长转移addr(7~0)SJMP rel80 rel短转移,相对转移JMP@A+DPTR73相对于DPTR间接转移JZ rel60 rel A为零转移JNZ rel70 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,不为零则转移NOP00空操作*=a10a9a8l△=a10a9a80布尔变量操作CLR C C3清零进位CLR bit C2清零直接位SETB C D3置位进位SETB bit D2置位直接位CPL C B3进位取反CPL bit B2直接位取反ANL C,bit82 dit直接数“与”到进位ANL C,/bit B0直接位的反“与”到进位ORL C,bit72 bit直接位“或”到进位ORL C,/bit A0 bit直接位的反“或”到进位MOV C,bit A2 bit直接位送进位MOV bit,C92 bit进位送直接位JC rel40 rel进位位为1转移JNC rel50 rel进位位为0转移JB bit,rel20 bit rel直接位为1相对转移JNB bit,rel30 bit rel直接位为0相对转移JBC bit,rel10 bit rel直接位为1相对转移,然后清零该位0人|分享到:阅读(213)| 评论(0)| 引用(0) |举报。

arm汇编语言格式

arm汇编语言格式

arm汇编语言格式
ARM汇编语言是一种底层的程序设计语言,用于编写针对ARM
架构的机器码指令。

ARM汇编语言的格式包括以下几个方面:
1. 注释,注释用于解释代码的作用和功能,以分号(;)开头。

注释对于代码的可读性和理解很重要。

2. 指令,指令是汇编语言的核心部分,用于执行特定的操作。

指令可以包含操作码(opcode)和操作数(operand)。

操作码指定
要执行的操作,操作数提供操作所需的数据。

3. 标号,标号用于标识代码的位置或跳转目标。

标号以英文字母、数字和下划线组成,以冒号(:)结尾。

4. 寄存器,ARM架构有一组通用寄存器,用于存储和处理数据。

寄存器以英文字母r开头,后跟一个数字,表示寄存器的编号。

例如,r0表示第一个通用寄存器,r1表示第二个通用寄存器,依此类推。

5. 操作数,操作数可以是立即数(immediate)、寄存器、内
存地址等。

立即数是直接出现在指令中的数值,寄存器是存储数据的容器,内存地址是存储器中数据的位置。

6. 伪指令,伪指令是用于辅助程序开发的指令,不会被转化为机器码。

伪指令以句点(.)开头,常用的伪指令有定义数据段、定义代码段、定义常量等。

7. 指令格式,ARM汇编语言的指令格式通常包括操作码、目的寄存器、源操作数和条件码。

具体的指令格式会根据不同的指令而有所不同。

总结起来,ARM汇编语言的格式包括注释、指令、标号、寄存器、操作数、伪指令和指令格式。

这些元素共同构成了ARM汇编语言的语法规则,通过合理的组合和使用,可以编写出有效的ARM汇编代码。

深入理解计算机系统(3.1)------汇编语言和机器语言

深入理解计算机系统(3.1)------汇编语言和机器语言

深⼊理解计算机系统(3.1)------汇编语⾔和机器语⾔ 《深⼊理解计算机系统》第三章——程序的机器级表⽰。

作者⾸先讲解了汇编代码和机器代码的关系,阐述了汇编承上启下的作⽤;接着从机器语⾔IA32着⼿,分别讲述了如何存储数据、如何访问数据、如何完成运算以及如何进⾏跳转。

通过这些步骤,⼜告诉了我们分⽀语句、循环语句是怎么完成的,函数调⽤、栈帧结构以及递归过程。

最后能通过编译器产⽣的汇编代码表⽰,我们要了解编译器和它的优化能⼒,知道编译器能为我们完成哪些⼯作。

⽽这篇博客我们将讲解汇编和机器代码的关系。

⾸先下⾯⼀张图是C语⾔、汇编语⾔以及翻译过的机器语⾔,⼤家可以先有个⼤概的眼熟。

上图引⽤⾄:1、机器语⾔ 这系列博客第⼀篇我们就详细讲解了程序的编译,⼀个C语⾔程序是经过编译器变成汇编程序,然后通过汇编器变成机器代码,最后被计算机执⾏。

计算机是不能直接识别我们所编写的C程序或者Java程序的。

它只能识别机器语⾔,⽽机器语⾔是⽤⼆进制代码表⽰的计算机能直接识别和执⾏的⼀种机器指指令系统令的集合。

早期计算机就是指可以执⾏机器指令,进⾏运算的机器。

在我们常⽤的PC机中,有⼀个芯⽚,就是我们常说的CPU(Central Processing Unit,中央处理单元)可以完成前⾯所说的计算机的功能,但是每⼀种这样的微处理器(CPU)由于硬件设计和内部结构的不同,就需要⽤不同的电平脉冲来控制,使它⼯作。

所以每⼀种微处理器都有⾃⼰的机器指令集,也就是机器语⾔。

早期的程序设计均使⽤机器语⾔。

程序员们将⽤0, 1数字编成的程序代码打在纸带或卡⽚上,1打孔,0不打孔,再将程序通过纸带机或卡⽚机输⼊计算机,进⾏运算。

⽤机器语⾔编写程序,编程⼈员要⾸先熟记所⽤计算机的全部指令代码和代码的涵义。

⼿编程序时,程序员得⾃⼰处理每条指令和每⼀数据的存储分配和输⼊输出,还得记住编程过程中每步所使⽤的⼯作单元处在何种状态。

这是⼀件⼗分繁琐的⼯作。

汇编语言指令大全X86和X87汇编指令大全(带注释)

汇编语言指令大全X86和X87汇编指令大全(带注释)

汇编语⾔指令⼤全X86和X87汇编指令⼤全(带注释)⽬录⼀、数据传输指令1. 通⽤数据传送指令.2. 输⼊输出端⼝传送指令.3. ⽬的地址传送指令.4. 标志传送指令.⼆、算术运算指令三、逻辑运算指令四、串指令五、程序转移指令六、伪指令七、处理机控制指令:标志处理指令浮点运算指令集1、控制指令2、数据传送指令3、⽐较指令4、运算指令其它1.机械码,⼜称机器码.2.需要熟练掌握的全部汇编知识(只有这么多)3.常见修改(机器码)4.两种不同情况的不同修改⽅法⼀、数据传输指令它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.1. 通⽤数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压⼊堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压⼊堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压⼊堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器⾥字节的顺序XCHG 交换字或字节.(⾄少有⼀个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG ⽐较并交换操作数.(第⼆个操作数必须为累加器AL/AX/EAX)XADD 先交换再累加.(结果在第⼀个操作数⾥)XLAT 字节查表转换.----BX指向⼀张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL)2. 输⼊输出端⼝传送指令.IN I/O端⼝输⼊. ( 语法: IN 累加器, {端⼝号│DX} )OUT I/O端⼝输出. ( 语法: OUT {端⼝号│DX},累加器 )输⼊输出端⼝由⽴即⽅式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. ⽬的地址传送指令.LEA 装⼊有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送⽬标指针,把指针内容装⼊DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送⽬标指针,把指针内容装⼊ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送⽬标指针,把指针内容装⼊FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送⽬标指针,把指针内容装⼊GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送⽬标指针,把指针内容装⼊SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEG 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),IMUL 整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).IDIV 整数除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04 SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量.Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1. ⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF 过程返回.2. 条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3. 循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4. 中断指令INT 中断指令INTO 溢出中断IRET 中断返回5. 处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建⽴段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CMC 进位位求反指令STC 进位位置为1指令CLD ⽅向标志置1指令STD ⽅向标志位置1指令CLI 中断标志置0指令STI 中断标志置1指令NOP ⽆操作HLT 停机WAIT 等待ESC 换码LOCK 封锁浮点运算指令集1、控制指令(带9B的控制指令前缀F变为FN时浮点不检查,机器码去掉9B)FINIT 初始化浮点部件机器码 9B DB E3FCLEX 清除异常机器码 9B DB E2FDISI 浮点检查禁⽌中断机器码 9B DB E1FENI 浮点检查禁⽌中断⼆机器码 9B DB E0WAIT 同步CPU和FPU 机器码 9BFWAIT 同步CPU和FPU 机器码 D9 D0FNOP ⽆操作机器码 DA E9FXCH 交换ST(0)和ST(1) 机器码 D9 C9FXCH ST(i) 交换ST(0)和ST(i) 机器码 D9 C1iiiFSTSW ax 状态字到ax 机器码 9B DF E0FSTSW word ptr mem 状态字到mem 机器码 9B DD mm111mmmFLDCW word ptr mem mem到状态字机器码 D9 mm101mmmFSTCW word ptr mem 控制字到mem 机器码 9B D9 mm111mmmFLDENV word ptr mem mem到全环境机器码 D9 mm100mmmFSTENV word ptr mem 全环境到mem 机器码 9B D9 mm110mmmFRSTOR word ptr mem mem到FPU状态机器码 DD mm100mmmFSAVE word ptr mem FPU状态到mem 机器码 9B DD mm110mmmFFREE ST(i) 标志ST(i)未使⽤机器码 DD C0iiiFDECSTP 减少栈指针1->0 2->1 机器码 D9 F6FINCSTP 增加栈指针0->1 1->2 机器码 D9 F7FSETPM 浮点设置保护机器码 DB E42、数据传送指令FLDZ 将0.0装⼊ST(0) 机器码 D9 EEFLD1 将1.0装⼊ST(0) 机器码 D9 E8FLDPI 将π装⼊ST(0) 机器码 D9 EBFLDL2T 将ln10/ln2装⼊ST(0) 机器码 D9 E9FLDL2E 将1/ln2装⼊ST(0) 机器码 D9 EAFLDLG2 将ln2/ln10装⼊ST(0) 机器码 D9 ECFLDLN2 将ln2装⼊ST(0) 机器码 D9 EDFLD real4 ptr mem 装⼊mem的单精度浮点数机器码 D9 mm000mmmFLD real8 ptr mem 装⼊mem的双精度浮点数机器码 DD mm000mmmFLD real10 ptr mem 装⼊mem的⼗字节浮点数机器码 DB mm101mmmFILD word ptr mem 装⼊mem的⼆字节整数机器码 DF mm000mmmFILD dword ptr mem 装⼊mem的四字节整数机器码 DB mm000mmmFILD qword ptr mem 装⼊mem的⼋字节整数机器码 DF mm101mmmFBLD tbyte ptr mem 装⼊mem的⼗字节BCD数机器码 DF mm100mmmFST real4 ptr mem 保存单精度浮点数到mem 机器码 D9 mm010mmmFST real8 ptr mem 保存双精度浮点数到mem 机器码 DD mm010mmmFIST word ptr mem 保存⼆字节整数到mem 机器码 DF mm010mmmFIST dword ptr mem 保存四字节整数到mem 机器码 DB mm010mmmFSTP real4 ptr mem 保存单精度浮点数到mem并出栈机器码 D9 mm011mmmFSTP real8 ptr mem 保存双精度浮点数到mem并出栈机器码 DD mm011mmmFSTP real10 ptr mem 保存⼗字节浮点数到mem并出栈机器码 DB mm111mmmFISTP word ptr mem 保存⼆字节整数到mem并出栈机器码 DF mm011mmmFISTP dword ptr mem 保存四字节整数到mem并出栈机器码 DB mm011mmmFISTP qword ptr mem 保存⼋字节整数到mem并出栈机器码 DF mm111mmmFBSTP tbyte ptr mem 保存⼗字节BCD数到mem并出栈机器码 DF mm110mmmFCMOVB ST(0),ST(i) <时传送机器码 DA C0iiiFCMOVBE ST(0),ST(i) <=时传送机器码 DA D0iiiFCMOVE ST(0),ST(i) =时传送机器码 DA C1iiiFCMOVNB ST(0),ST(i) >=时传送机器码 DB C0iiiFCMOVNBE ST(0),ST(i) >时传送机器码 DB D0iiiFCMOVNE ST(0),ST(i) !=时传送机器码 DB C1iiiFCMOVNU ST(0),ST(i) 有序时传送机器码 DB D1iiiFCMOVU ST(0),ST(i) ⽆序时传送机器码 DA D1iii3、⽐较指令FCOM ST(0)-ST(1) 机器码 D8 D1FCOMI ST(0),ST(i) ST(0)-ST(1) 机器码 DB F0iiiFCOMIP ST(0),ST(i) ST(0)-ST(1)并出栈机器码 DF F0iiiFCOM real4 ptr mem ST(0)-实数mem 机器码 D8 mm010mmmFCOM real8 ptr mem ST(0)-实数mem 机器码 DC mm010mmmFICOM word ptr mem ST(0)-整数mem 机器码 DE mm010mmmFICOM dword ptr mem ST(0)-整数mem 机器码 DA mm010mmmFICOMP word ptr mem ST(0)-整数mem并出栈机器码 DE mm011mmmFICOMP dword ptr mem ST(0)-整数mem并出栈机器码 DA mm011mmmFTST ST(0)-0 机器码 D9 E4FUCOM ST(i) ST(0)-ST(i) 机器码 DD E0iiiFUCOMP ST(i) ST(0)-ST(i)并出栈机器码 DD E1iiiFUCOMPP ST(0)-ST(1)并⼆次出栈机器码 DA E9FXAM ST(0)规格类型机器码 D9 E54、运算指令FADD 把⽬的操作数 (直接接在指令后的变量或堆栈缓存器) 与来源操作数 (接在⽬的操作数后的变量或堆栈缓存器) 相加,并将结果存⼊⽬的操作数FADDP ST(i),ST 这个指令是使⽬的操作数加上 ST 缓存器,并弹出 ST 缓存器,⽽⽬的操作数必须是堆栈缓存器的其中之⼀,最后不管⽬的操作数为何,经弹出⼀次后,⽬的操作数会变成上⼀个堆栈缓存器了FIADD FIADD 是把 ST 加上来源操作数,然后再存⼊ ST 缓存器,来源操作数必须是字组整数或短整数形态的变数FSUB 减FSUBPFSUBR 减数与被减数互换FSUBRPFISUBFISUBRFMUL 乘FMULPFIMULFDIV 除FDIVPFDIVRFDIVRPFIDIVFIDIVRFCHS 改变 ST 的正负值FABS 把 ST 之值取出,取其绝对值后再存回去。

mips机器码汇编对照表

mips机器码汇编对照表

mips机器码汇编对照表助记符说明字节周期代码MOV A,Rn 寄存器送A 1 1 E8--EFMOV A,data 直接字节送A 2 1 E5MOV A,@Ri 间接RAM 送A 1 1 E6--E7MOV A,#data 立接数送A 2 1 74MOV Rn,A A 送寄存器 1 1 F8--FFMOV Rn,data 直接数送寄存器 2 2 A8--AFMOV Rn,#data 立即数送寄存器 2 1 78--7FMOV data,A A 送直接字节 2 1 F5MOV data,Rn 寄存器送直接字节 2 1 88—8FMOV data,data 直接字节送直接字节 3 2 85MOV data,@Ri 间接Rn 送直接字节 2 2 86;87MOV data,#data 立即数送直接字节 3 2 75MOV @Ri,A A 送间接Rn 1 2 F6;F7MOV @Ri,data 直接字节送间接Rn 1 1 A6;A7MOV @Ri,#data 立即数送间接Rn 2 2 76;77MOV DPTR,#data16 16 位常数送数据指针 3 1 90 MOV C,bit 直接位送进位位 2 1 A2MOV bit,C 进位位送直接位 2 2 92MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送A 3 2 93 MOVC A,@A+PC A+PC 寻址程序存贮字节送A 1 2 83 MOVX A,@Ri 外部数据送A(8 位地址) 1 2 E2;E3 MOVX A,@DPTR 外部数据送A(16 位地址) 1 2 E0 MOVX @Ri,A A 送外部数据(8 位地址) 1 2 F2;F3 MOVX @DPTR,A A 送外部数据(16 位地址) 1 2 F0 PUSH data 直接字节进栈道,SP 加1 2 2 C0POP data 直接字节出栈,SP 减1 2 2 D0XCH A,Rn 寄存器与A 交换 1 1 C8—CFXCH A,data 直接字节与A 交换 2 1 C5XCH A,@Ri 间接Rn 与A 交换 1 1 C6;C7XCHD A,@Ri 间接Rn 与A 低半字节交换 1 1 D6;D72.逻辑运算指令(35条)助记符说明字节周期代码ANL A,Rn 寄存器与到A 1 1 58—5FANL A,data 直接字节与到A 2 1 55ANL A,@Ri 间接RAM与到A 1 1 56;57ANL A,#data 立即数与到A 2 1 54ANL data,A A与到直接字节 2 1 52ANL data,#data 立即数与到直接字节 3 2 53 ANL C,bit 直接位与到进位位 2 2 82ANL C,/bit 直接位的反码与到进位位 2 2 B0 ORL A,Rn 寄存器或到A 1 1 48—4FORL A,data 直接字节或到A 2 1 45ORL A,@Ri 间接RAM或到A 1 1 46;47ORL A,#data 立即数或到A 2 1 44ORL data,A A或到直接字节 2 1 42ORL data,#data 立即数或到直接字节 3 2 43 ORL C,bit 直接位或到进位位 2 2 72ORL C,/bit 直接位的反码或到进位位 2 2 A0 XRL A,Rn 寄存器异或到A 1 1 68—6FXRL A,data 直接字节异或到A 2 1 65XRL A,@Ri 间接RAM异或到A 1 1 66;67XRL A,#data 立即数异或到A 2 1 64XRL data,A A异或到直接字节 2 1 62XRL data,#data 立即数异或到直接字节 3 2 63 SETB C 进位位置1 1 1 D3SETB bit 直接位置1 2 1 D2CLR A A清0 1 1 E4CLR C 进位位清0 1 1 C3CLR bit 直接位清0 2 1 C2CPL A A求反码 1 1 F4CPL C 进位位取反 1 1 B3CPL bit 直接位取反 2 1 B2RL A A循环左移一位 1 1 23RLC A A 带进位左移一位 1 1 33RR A A右移一位 1 1 03RRC A A 带进位右移一位 1 1 13SWAP A A 半字节交换 1 1 C43.算术运算指令(24条)助记符说明字节周期代码ADD A,Rn 寄存器加到A 1 1 28—2FADD A,data 直接字节加到A 2 1 25ADD A,@Ri 间接RAM 加到A 1 1 26;27 ADD A,#data 立即数加到A 2 1 24ADDC A,Rn 寄存器带进位加到A 1 1 38—3F ADDC A,data 直接字节带进位加到A 2 1 35ADDC A,@Ri 间接RAM 带进位加到A 1 1 36;37 ADDC A,#data 立即数带进位加到A 2 1 34SUBB A,Rn 从A 中减去寄存器和进位 1 1 98—9F SUBB A,data 从A 中减去直接字节和进位 2 1 95 SUBB A,@Ri 从A 中减去间接RAM 和进位 1 1 96;97 SUBB A,#data 从A 中减去立即数和进位 2 1 94 INC A A加1 1 1 04INC Rn 寄存器加1 1 1 08—0FINC data 直接字节加1 2 1 05INC @Ri 间接RAM 加1 1 1 06;07INC DPTR 数据指针加1 1 2 A3DEC A A减1 1 1 14DEC Rn 寄存器减1 1 1 18—1FDEC data 直接字节减1 2 1 15DEC @Ri 间接RAM 减1 1 1 16;17MUL AB A乘B 1 4 A4DIV AB A被B除 1 4 84DA A A十进制调整 1 1 D44.转移指令(22条)助记符说明字节周期代码AJMP addr 11 绝对转移 2 2 *1LJMP addr 16 长转移 3 2 02SJMP rel 短转移 2 2 80JMP @A+DPTR 相对于DPTR 间接转移 1 2 73JZ rel 若A=0 则转移 2 2 60JNZ rel 若A≠0 则转移 2 2 70JC rel 若C=1 则转移 2 2 40JNC rel 若C≠1 则转移 2 2 50JB bit,rel 若直接位=1 则转移 3 2 20JNB bit,rel 若直接位=0 则转移 3 2 30JBC bit,rel 若直接位=1 则转移且清除 3 2 10CJNE A,data,rel 直接数与A 比较,不等转移 3 2 B5CJNE A,#data,rel 立即数与A 比较,不等转移 3 2 B4CJNE @Ri,#data,rel 立即数与间接RAM比较,不等转移 3 2 B6;B7CJNE Rn,#data,rel 立即数与寄存器比较不等转移 3 2 B8—BFDJNZ Rn,rel 寄存器减1 不为0 转移 2 2 D8—DFDJNZ data,rel 直接字节减1 不为0 转移 3 2 D5ACALL addr 11 绝对子程序调用 2 2 *1 LCALL addr 16 子程序调用 3 2 12 RET 子程序调用返回 1 2 22RETI 中断程序调用返回 1 2 32NOP 空操作 1 1 00。

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

一、状态寄存器
PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
条件码:
①OF(Overflow Flag)溢出标志。

溢出时为1,否则置0。

②SF(Sign Flag)符号标志。

结果为负时置1,否则置0.
③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.
④CF(Carry Flag)进位标志,进位时置1,否则置0.
⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。

有进位时1,否则置0.
⑥PF(Parity Flag)奇偶标志。

结果操作数中1的个数为偶数时置1,否则置0.
控制标志位:
⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。

⑧IF(Interrupt Flag)中断标志。

⑨TF(Trap Flag)陷井标志。

二、直接标志转移(8位寻址)
指令格式机器码测试条件如...则转移
JC 72 C=1 有进位
JNC 73 C=0 无进位
JZ/JE 74 Z=1 零/等于
JNZ/JNE 75 Z=0 不为零/不等于
JS 78 S=1 负号
JNS 79 S=0 正号
JO 70 O=1 有溢出
JNO 71 O=0 无溢出
JP/JPE 7A P=1 奇偶位为偶
JNP/IPO 7B P=0 奇偶位为奇
三、间接标志转移(8位寻址)
指令格式机器码测试格式如...则转移
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 <=小于或等于/不大于四、无条件转移指令
操作码伪码指令含义
EB cb JMP rel8 相对短跳转(8位),使rel8处的代码位下一条指令
E9 cw JMP rel16 相对跳转(16位),使rel16处的代码位下一条指令FF /4 JMP r/m16 绝对跳转(16位),下一指令地址在r/m16中给出FF /4 JMP r/m32 绝对跳转(32位),下一指令地址在r/m32中给出EA cb JMP ptr16:16 远距离绝对跳转,下一指令地址在操作数中
EA cb JMP ptr16:32 远距离绝对跳转,下一指令地址在操作数中
FF /5 JMP m16:16 远距离绝对跳转,下一指令地址在内存m16:16中FF/5 JMP m16:32 远距离绝对跳转,下一指令地址在内存m16:32中五、16位/32位寻址方式
操作码伪码指令跳转含义跳转类型跳转的条件(标志位)
0F 87 cw/cd JA rel16/32 大于near (CF=0 and ZF=0)
0F 83 cw/cd JAE rel16/32 大于等于near (CF=0)
0F 82cw/cd JB rel16/32 小于near (CF=1)
0F 86 cw/cd JBE rel16/32 小于等于near (CF=1 or ZF=1)
0F 82cw/cd JC rel16/32 进位near (CF=1)
0F 84 cw/cd JE rel16/32 等于near (ZF=1)
0F 84 cw/cd JZ rel16/32 为0 near (ZF=1)
0F 8F cw/cd JG rel16/32 大于near (ZF=0 and SF=OF)
0F 8D cw/cd JGE rel16/32 大于等于near (SF=OF)
0F 8C cw/cd JL rel16/32 小于near (SF<>OF)
0F 8E cw/cd JLE rel16/32 小于等于near (ZF=1 or SF<>OF)
0F 86cw/cd JNA rel16/32 不大于near (CF=1 or ZF=1)
0F 82cw/cd JNAE rel16/32 不大于等于near (CF=1)
0F 83cw/cd JNB rel16/32 不小于near (CF=0)
0F 87cw/cd JNBE rel16/32 不小于等于near (CF=0 and ZF=0) 0F 83cw/cd JNC rel16/32 不进位near (CF=0)
0F 85cw/cd JNE rel16/32 不等于near (ZF=0)
0F 8E cw/cd JNG rel16/32 不大于near (ZF=1 or SF<>OF)
0F 8C cw/cd JNGE rel16/32 不大于等于near (SF<>OF)
0F 8D cw/cd JNL rel16/32 不小于near (SF=OF)
0F 8F cw/cd JNLE rel16/32 不小于等于near (ZF=0 and SF=OF) 0F 81cw/cd JNO rel16/32 未溢出near (OF=0)
0F 8B cw/cd JNP rel16/32 不是偶数near (PF=0)
0F 89cw/cd JNS rel16/32 非负数near (SF=0)
0F 85 cw/cd JNZ rel16/32 非零(不等于)near (ZF=0) 0F 80cw/cd JO rel16/32 溢出near (OF=1)
0F 8A cw/cd JP rel16/32 偶数near (PF=1)
0F 8A cw/cd JPE rel16/32 偶数near (PF=1)
0F 8B cw/cd JPO rel16/32 奇数near (PF=0)
0F 88cw/cd JS rel16/32 负数near (SF=1)
0F 84 cw/cd JZ rel16/32 为零(等于)near (ZF=1)
注:一些指令操作数的含义说明:
rel8 表示8 位相对地址
rel16 表示16 位相对地址
rel16/32 表示16或32 位相对地址
r/m16 表示16位寄存器
r/m32 表示32位寄存器。

相关文档
最新文档