汇编指令与机器码的相互转换

汇编指令与机器码的相互转换
汇编指令与机器码的相互转换

汇编指令与机器码的相互转换

机器语言我们只要重点理解一下几个概念:

1. 机器语言指令有操作码(OP)和地址码两部分组成

|_____________OP_______________|__d__|__w__|

|_____________OP_______________|__s__|__w__| <--此格式用于立即寻址方式

在多数操作码中,常使用某些位来指示某些信息:

如图上结构里的: w=1 时对字来操作

w=0 时对字节来操作

d值在双操作数指令中才有效

当 d=1 时有且只有一个寄存器用于目的操作数

d=0 时有且只有一个寄存器用于源操作数

s=1 时立即数为8位,但要求扩展成16位数

s=0 时当指令作字节操作/有16位立即数

由于汇编的指令格式很多,这里我只作一些基本情况介绍,必要时读者可以下载/查阅80x8 6汇编小站https://www.360docs.net/doc/b29545634.html,提供的OPCODES手册来查阅。

2. 寻址方式的机器语言表示:

| mod | reg | r/m |

|_____|_____|_____|_____|_____|_____|_____|

reg 表示寄存器方式,在不包括立即数的双操作数指令的情况下,规定必须有一个操作数在寄存器中,该寄存器由reg字段指定,并与操作码字节中的w位相组合确定的寄存器

mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式现在你们下载了80x86汇编小站(https://www.360docs.net/doc/b29545634.html,)提供的OPCODES 手册了吗?

下载好了,请解压后打开里面的:opcodes.html 文件,然后熟悉里面的表格:

现在熟悉简单的:

______________________________________________________________________________ 表1 rrr : W=0 : W=1 : reg32

000 : AL : AX : EAX

001 : CL : CX : ECX

010 : DL : DX : EDX

011 : BL : BX : EBX

100 : AH : SP : ESP

101 : CH : BP : EBP

110 : DH : SI : ESI

111 : BH : DI : EDI

______________________________________________________________________________ 表2 rrr : Index Register

000 : EAX

001 : ECX

010 : EDX

011 : EBX

100 : No Index

101 : EBP

110 : ESI

111 : EDI

______________________________________________________________________________ 表3 mmm : Function 11

w=1

000 : DS:[BX+SI]

001 : DS:[BX+DI]

010 : SS:[BP+SI]

011 : SS:[BP+DI] BX

100 : DS:[SI]

101 : DS:[DI]

110 : SS:[BP]

111 : DS:[BX]

______________________________________________________________________________

表4

oo : Function

00 : If mmm = 110, then a displacement follows the operation; otherwise, no dis placement is used

01 : An 8-bit signed displacement follows the opcode

10 : A 16-bit signed displacement follows the opcode

11 : mmm specifies a register, instead of an addressing mode

______________________________________________________________________________ 上面的表,你都看明白了吗?现在我就教你们如何利用这样的表格来把汇编指令翻译机器码

3.指令格式简介

8086所用的16位指令格式:

________ _____________ ________ ________

|操作码| + |mod-reg-r/m| + |位移量| + |立即数|

1~2字节 0~1字节 0~2字节 0~2字节

OK!以上就是基本知识,下面我们来实践吧:

———————————————————————————————————————问题:

MOV AX,1234H 对应的机器码为:B83412

MOV EBX,0 对应的机器码为:66BB00000000

MOV CL,55H 对应的机器码为: B155

MOV AX,BX 对应的机器码为:8BC3

我在问一下,机器码的数据格式是什么?好像是机器指令+操作数(高位存放在地址高位,低位存放在地址低位),但是前面MOV AX,怎么就变成了B8,弄不明白,请指教。

PS: 上面的题目是一个网友问的,现在我来实践一遍给你们看。———————————————————————————————————————

指令1 -> MOV AX,1234H 对应的机器码为:B83412

解法:判断-> 这个是8086汇编16位汇编指令格式,并且是立即寻址方式

查表-> 打开opcodes.html文件,找到标题为“Main Instructions”,单击“M”字母,然后对应查看“MOV Reg,Imm”格式的“OpCode”项为:1011wrrr

再判断-> 由于寄存器是AX, 立即数是1234H,明显是“对字操作”,所以w=1

在查看本文章上面的“表1”,对应的查到rrr的值为000

组合结果-> w=1

rrr=000

1011wrrr=1011 1000B ->B8H

根据“ 3.指令格式简介” -> B8H + |立即数(低位在前高位在后)|= B83412H

PS: "+" 符号不为“加号”

好了,已经解完第一题了,机器码为 B83412H

———————————————————————————————————————

指令4 -> MOV AX,BX 对应的机器码为:8BC3

解法:判断-> 这个是8086汇编16位汇编指令格式,并且是寄存器寻址方式

查表-> 打开opcodes.html文件,找到标题为“Main Instructions”,单击“M

”字母,然后对应查看“MOV Reg,Reg”格式的“OpCode”项为:1000101woorrrmmm

再判断-> 由于寄存器是AX, BX 明显是“对字操作”,所以w=1

在查看本文章上面的“表4”,对应查到oo=11 因为是寄存器寻址方式

在查看本文章上面的“表1”,对应查到rrr的值为000 ,因为当两个操

作数都是寄存器,那么一般要以目的操作数为准

在查看本文章上面的“表3”, 对应查到mmm的值为011 ,因为当两个操作数都是寄存器,那么一般要以源操作数为准

组合结果-> w=1

oo=11

rrr=000

mmm=011

1000101woorrrmmm=1000 1011 1100 0011B ->8BC3H

好了,已经解完第二题了,机器码为8BC3H ———————————————————————————————————————

呵呵,不错吧,很简单吧,有了80X86 OPCODES 查询表一切都是那么简单,如果还有什么问题,大家都来这里提问!

剩下的:

指令2 -> MOV EBX,0 对应的机器码为:66BB00000000

指令3 -> MOV CL,55H 对应的机器码为: B155

大家来练练手,注意指令2 需要用到32位指令格式,请查阅相关的80x86汇编语言书籍的机器语言部分,应该有解释的。

指令2的解法,请大家等待,或者大家研究一下,把解法贴出来,给大家参考哦!

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

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

汇编指令和机器码的对应表 汇编2010-04-20 21:07:19 阅读259 评论0 字号:大中小订阅 一、汇编速查 MOV AA,BB 将BB 放到AA 里 CALL 调用子程序(相当于BASIC 的GOSUB) RET 与RETF 返回程序(相当于BASIC 的RETURN) CMP XX,YY 比较XX 与YY JZ 若相等则转移 JNZ 若不相等则转移 JB 若小于则转移 JG 若大于则转移 JMP 无条件转移 J??? (各种转移指令) LOOP 循环直到CX为0 INT XX 类似CALL 的中断涵数 PUSH 推入栈(STACK)ESP:PUSH AX POP 出栈ESP:POP CX XCHG 交换ESP:XCHG AX,BX IN、OUT 与PORT有关的IN/OUT XLAT 查表 LEA 段内偏移量。ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器AH PUSHF、POPF将棋标入/出栈 ADD ESP ADD AX,CX (AX=AX+CX) ADC 加入棋标C的ADD INC 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=LEFT OR、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 无溢出

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

51汇编伪指令详解

51汇编伪指令 伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式匀可以作为参数。不同汇编程序允许的伪指令并不相同,以下所述的伪指令仅适用于MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。 MASM51中可用的伪指令有: ORG 设置程序起始地址 END 标志源代码结束 EQU 定义常数 SET 定义整型数 DATA 给字节类型符号定值 BYTE 给字节类型符号定值 WROD 给字类型符号定值 BIT 给位地址取名 ALTNAME 用自定义名取代保留字 DB 给一块连续的存储区装载字节型数据 DW 给一块连续的存储区装载字型数据 DS 预留一个连续的存储区或装入指定字节。 INCLUDE 将一个源文件插入程序中 TITLE 列表文件中加入标题行

NOLIST 汇编时不产生列表文件 NOCODE 条件汇编时,条件为假的不产生清单 一、ORG 伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为: ORG 表达式 表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由0替换,这将会造成错误。在列表文件中,由ORG定义的指令地址会被打印出来。 ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH和0023H的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG伪指令了。看如下例子: 例: INT_0 EQU 1000H TIME_0 EQU 1010H INT_1 EQU 1020H TIME_1 EQU 1030H SERIAL EQU 1040H

汇编指令与机器码

一、状态寄存器 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 < 低于/不高于或等于

汇编指令机器码总结

汇编指令机器码总结与验证 摘要:本文介绍了汇编指令机器码的含义与作用,并讨论了指令的组成结构即操作码与地址码。然后全面总结了机器码中的单字节操作码,并利用Debug工具进行了详细的验证。 关键词:指令;机器码 一、机器码概述[1] 机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。这种指令集就称为机器码,它是电脑的CPU可直接解读的数据。一条指令是机器语言的一个语句,是一组有意义的二进制代码。计算机通过执行指令来处理各种数据。 为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息: a) 操作码 b) 操作数的地址 c) 操作结果的存储地址 d) 下条指令的地址 一条指令实际上包括两种信息即操作码和地址码。操作码用来表示该指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。地址码用来描述该指令的操作对象,它或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)。 二、机器码详解[2] 由上文已知,一条指令一般由操作码和地址码组成。其中,操作码是指明CPU对内存或寄存器中的数据进行什么样的操作,地址码给出这些数据对象。下面我们就将指令分为两部分进行研究。1.操作码 操作码一般占用1个字节(8位)或2个字节(16位)。其中最低比特(记作W)在很多指令中表示目标操作数的位宽,W=0表示字节长(8位)操作数,W=1表示双字节长(16位)操作数。例如,操作码00000000B(W=0)表示“ADD 8位寄存器,8位寄存器”,而00000001B(W=1)表示“ADD 16位寄存器,16位寄存器”。 2.地址码 地址码一般占用1个字节,其中的8个比特位可分为三组,形式一般为“oommmrrr”。这些分组大致可分为以下四个类型: 1) “oo”——表示指令的地址偏移量类型 a) 00:如果mmm=110,那么指令后紧跟一个地址偏移量;否则未使用地址偏移量 b) 01:指令后紧跟一个8比特无符号地址偏移量 c) 10:指令后紧跟一个16比特无符号地址偏移量 d) 11:此时mmm表示一个寄存器而不是地址

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/m IMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1 MEM→AX 1010000w addr-low addr-high AX→MEM 1010001w addr-low addr-high REG/MEM→段REG 10001110 mod reg r/m 8E 段REG→REG/MEM 10001100 mod reg r/m 8C PUSH指令 REG/MEM 11111111 mod 110 r/m FF REG 01010reg 段REG 000reg110 POP指令 REG/MEM 10001111 mod 000 r/m 8F REG 01011reg 段REG 000reg111 XCHG指令 REG/MEM←→REG 1000011w mod reg r/m REG←→AX 10010reg XLAT指令11010111 D7 LEA指令10001101 mod reg r/m 8D LDS指令11000101 mod reg r/m C5 LES指令11000100 mod reg r/m C4 LAHF指令10011111 9F SAHF指令10011110 9E PUSHF指令10011100 9C POPF指令10011101 9D

汇编指令与机器码的相互转换

汇编指令与机器码的相互转换 机器语言我们只要重点理解一下几个概念: 1. 机器语言指令有操作码(OP)和地址码两部分组成 |_____________OP_______________|__d__|__w__| |_____________OP_______________|__s__|__w__| <--此格式用于立即寻址方式 在多数操作码中,常使用某些位来指示某些信息: 如图上结构里的:w=1 时对字来操作 w=0 时对字节来操作 d值在双操作数指令中才有效 当d=1 时有且只有一个寄存器用于目的操作数 d=0 时有且只有一个寄存器用于源操作数 s=1 时立即数为8位,但要求扩展成16位数 s=0 时当指令作字节操作/有16位立即数 由于汇编的指令格式很多,这里我只作一些基本情况介绍,必要时读者可以下载/查阅80x86汇编小站https://www.360docs.net/doc/b29545634.html,提供的OPCODES手册来查阅。 2. 寻址方式的机器语言表示: | mod | reg | r/m | |_____|_____|_____|_____|_____|_____|_____| reg 表示寄存器方式,在不包括立即数的双操作数指令的情况下,规定必须有一个操作数在寄存器中,该寄存器由reg字段指定,并与操作码字节中的w位相组合确定的寄存器 mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式现在你们下载了80x86汇编小站(https://www.360docs.net/doc/b29545634.html,)提供的OPCODES 手册了吗? 下载好了,请解压后打开里面的:opcodes.html 文件,然后熟悉里面的表格: 现在熟悉简单的: ____________________________________________________________________________ __ 表1 rrr : W=0 : W=1 : reg32 000 : AL : AX : EAX

51单片机指令速查表

MCS-51系列单片机指令速查表 算术运算指令(共24条) 机器码助记符功能 对标志影响 字节数周期数P OV AC CY 28~2F ADD A,Rn(A)+(Rn)→A√√√√11 25ADD A,direct(A)+(direct)→A√√√√21 26,27ADD A,@Ri(A)+((Ri))→A√√√√11 24ADD A,#data(A)+ data →A√√√√21 38~3F ADDC A,Rn(A)+(Rn)+Cy →A√√√√11 35ADDC A,direct(A)+(direct)+ Cy →A√√√√21 36,37ADDC A,@Ri(A)+((Ri))+Cy →A√√√√11 34ADDC A,#data(A)+ data +Cy →A√√√√21 98~9F SUBB A,Rn(A)-(Rn)-Cy →A√√√√11 95SUBB A,direct(A)-(direct)-C y →A√√√√21 96,97SUBB A,@Ri(A)-((Ri))-Cy →A√√√√11 94SUBB A,#data(A)- data - Cy →A√√√√21 04INC A(A)+ 1 →A√×××11 08~0F INC Rn(Rn)+ 1→Rn××××11 05INC direct(direct)+ 1 →direct××××21 06,07INC @Ri((Ri))+ 1 →(Ri)××××11 A3INC DPTR(DPTR)+ 1 →DPTR××××12 14DEC A(A)- 1 →A√×××11 18~1F DEC Rn(Rn)- 1→Rn××××11 15DEC direct(direct)- 1 →direct××××21 16,17DEC @Ri((Ri))- 1 →(Ri)××××11 A4MUL AB(A)·(B)→AB√××√14 84DIV AB(A)/(B)→AB√××√14 D4DA A对A进行十进制调整√√√√11 逻辑运算指令(共25条) 机器码助记符功能 对标志影响 字节数周期数P OV AC CY 58~5F ANL A,Rn(A)∧(Rn)→A√×××11 55ANL A,direct(A)∧(direct)→A√×××21 56,57ANL A,@Ri(A)∧((Ri))→A√×××11 54ANL A,#data(A)∧data →A√×××21 52ANL direct,A(direct)∧(A)→direct××××21 53ANL direct,#data(direct)∧data →direct××××32 48~4F ORL A,Rn(A)∨(Rn)→A√×××11 45ORL A,direct(A)∨(direct)→A√×××21 46,47ORL A,@Ri(A)∨((Ri))→A√×××11 44ORL A,#data(A)∨data →A√×××21

单片机指令功能及其机器码一览表2008

单片机指令功能及其机器码一览表2008-8-23 4:53:00 1 推荐 助记符代码机器码说明 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 MOVX @Ri,A F2~F3 A送外部数据(8位地址) MOVX @DPTR,A F0 A送外部数据(16位地址) PUSH dircet C0 dircet 直接字节进栈,SP加1 POP dircet D0 dircet 直接字节退栈,SP减1 XCH A,Rn C8~CF 交换A和寄存器 XCH A,dircet C5 dircet 交换A和直接字节 XCH A,@Ri C6~C7 交换A和间接RAM XCH A,@Ri D6~D7 交换A和间接RAM的低位 SWAP A C4 算术操作(A的二个半字节交换) ADD A,Rn 28~2F 寄存器加到A ADD A,dircet 25 dircet 直接字节加到A ADD A,@Ri 26~27 间接RAM加到A ADD A,#data 24data 立即数加到A ADD A,Rn 38~3F 寄存器和进位位加到A

实验一 汇编指令和机器代码

实验报告 实验日期:2012 年12 月01 日学号:姓名: 实验名称:实验一汇编指令和机器代码总分: 一.实验目的 本实验共四个程序,均在debug下编写。程序一查看当前目录下的文件,程序二用ASCII码显示程序文件,程序三显示字符串,程序四键入任意字符串并显示出来。 二.实验内容 程序① 在命令行中打开debug程序,输入如下代码 -a100 #汇编命令A100表示汇编程序从100地址开始 0AE9:0100 mov dl,1 #将数值01h 装入DL 寄存器 0AE9:0102 mov ah,2 #将数值02h 装入AH 寄存器 0AE9:0104 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0106 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0108 -g ? Program terminated normally -u100 106 0AE9:0100 B201 mov dl,01 0AE9:0102 B402 mov dl,02 0AE9:0104 CD21 int 21 0AE9:0106 CD20 int 20 -r #R命令来查看、改变寄存器内容 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0100 NV UP EI PL NZ NA PO NC 0AE9:0100 B201 MOV DL,01 -n https://www.360docs.net/doc/b29545634.html, #debug程序长度 -rbx

51指令机器码

FFH F0H B 00000000 E0H ACC 00000000 D0H PSW 00000000 CDH TH2 00000000 CCH TL2 00000000 CBH RCAP2H 00000000 CAH RCAP2L 00000000 C9H T2MOD xxxxxx00 C8H T2CON 00000000 B8H IP xx000000 B0H P3 11111111 A8H IE 0x000000 A0H P2 11111111 99H SBUF 不定 98H SCON 00000000 90H P1 11111111 8DH TH1 00000000 8CH TH0 00000000 8BH TL1 00000000 8AH TL0 00000000 89H TMOD 00000000 88H TCON 00000000 87H PCON 0xxx0000 83H DPH 00000000 82H DPL 00000000 81H SP 00000111 80H P0 11111111 特殊功能 寄存器区 (SFR ) 用户RAM 区 (堆栈、数据缓冲) 位寻址区 (00H~7FH ) 第3组 工作寄存器区 第2组 工作寄存器区 第1组 工作寄存器区 第0组 工作寄存器区 FFH 80H 7FH 30H 2FH 20H 1FH 18H 17H 10H 0FH 08H 07H 00H

主要SFR寄存器介绍 1.电源控制寄存器PCON(87H)(不可位寻址) D7 D6 D5 D4 D3 D2 D1 D0 SMOD ---GF1 GF0 PD IDL SMOD:波特率倍增位。SMOD=1,波特率提高1倍。 GF1,GF0:通用标志位。 PD:掉电方式位。当PD=1时,进入掉电方式。 IDL:空闲方式位。当IDL=1,进入空闲工作方式。 2.定时/计数器控制寄存器TCON(88H) D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

ASM指令机器码对照表

一、汇编速查 MOV AA,BB 将BB 放到AA 里 CALL 调用子程序(相当于BASIC 的GOSUB) RET 与RETF 返回程序(相当于BASIC 的RETURN) CMP XX,YY 比较XX 与YY JZ 若相等则转移 JNZ 若不相等则转移 JB 若小于则转移 JG 若大于则转移 JMP 无条件转移 J??? (各种转移指令) LOOP 循环直到CX为0 INT XX 类似CALL 的中断涵数 PUSH 推入栈(STACK)ESP:PUSH AX POP 出栈ESP:POP CX XCHG 交换ESP:XCHG AX,BX IN、OUT 与PORT有关的IN/OUT XLAT 查表 LEA 段内偏移量。ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器AH PUSHF、POPF将棋标入/出栈 ADD ESP ADD AX,CX (AX=AX+CX) ADC 加入棋标C的ADD INC 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=LEFT OR、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 MessageBoxExA bpx MessageBeep bpx SendMessage bpx GetDlgItemT ext bpx GetDlgItemInt

汇编指令与机器码转现

汇编指令与机器码转换的实现 点击: 发布日期:2007-6-3 11:54:00 进入论坛 机器语言我们只要重点理解一下几个概念: 1. 机器语言指令有操作码(OP)和地址码两部分组成 |_____________OP_______________|__d__|__w__| |_____________OP_______________|__s__|__w__| <--此格式用于立即寻址方式 在多数操作码中,常使用某些位来指示某些信息: 如图上结构里的: w=1 时对字来操作 w=0 时对字节来操作 d值在双操作数指令中才有效 当 d=1 时有且只有一个寄存器用于目的操作数 d=0 时有且只有一个寄存器用于源操作数 s=1 时立即数为8位,但要求扩展成16位数 s=0 时当指令作字节操作/有16位立即数 由于汇编的指令格式很多,这里我只作一些基本情况介绍,必要时读者可以下载/查阅80x86汇编小站https://www.360docs.net/doc/b29545634.html,提供的OPCODES手册来查阅。 2. 寻址方式的机器语言表示: | mod | reg | r/m | |_____|_____|_____|_____|_____|_____|_____| reg 表示寄存器方式,在不包括立即数的双操作数指令的情况下,规定必须有一个操作数在寄存器中,该寄存器由reg字段指定,并与操作码字节中的w位相组合确定的寄存器 mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式现在你们下载了80x86汇编小站(https://www.360docs.net/doc/b29545634.html,)提供的OPCODES 手册了吗? 下载好了,请解压后打开里面的:opcodes.html 文件,然后熟悉里面的表格:

汇编指令机器码对应表

??á??ˉòà???ú?÷2ù×÷???¢??±à?ú??·?oí??±à2ù×÷êyà′?èê???á?£?×??-??áD???¨£o l reg8: 8????′??÷?£ l reg16: 16????′??÷?£ l mem8: 8???ú′?êy?μ?£ l mem16: 16???ú′?êy?μ?£ l immed8: 8??á¢?′êy?μ?£ l immed16: 16??á¢?′êy?μ?£ l immed32: 32??á¢?′êy?μ?£ l segReg: 16??????′??÷?£ ?ú?÷2ù×÷?? ??±à?ú??·?oí2ù×÷êy 00 ADD reg8/mem8,reg8 01 ADD reg16/mem16,reg16 02 ADD reg8,reg8/mem8 03 ADD reg16,reg16/mem16 04 ADD AL,immed8 05 ADD AX,immed16 06 PUSH es 07

POP es 08 OR reg8/mem8,reg8 09 OR reg16/mem16,reg16 0A OR reg8,reg8/mem8 0B OR reg16,reg16/mem16 0C OR al,immed8 0D OR ax,immed16 0E PUSH cs 0F Not used 10 ADC reg8/mem8,reg8 11 ADC reg16/mem16,reg16 12 ADC reg8,reg8/mem8 13 ADC reg16,reg16/mem16 14 ADC al,immed8 15 ADC ax,immed16

汇编语言 实验一机器指令和汇编指令编程

数学科学学院实验报告 学期:2019 至 2020 第二学期 2020年3月10日 课程名称:汇编语言专业:班级:级班 实验编号:01 项目:用机器指令和汇编指令编程指导老师: 姓名:学号:实验成绩:____ 一、实验内容 1、使用Debug将下面的程序段写入从10000H开始的内存单元,逐条执行,写出每条指令执行后CPU中相关寄存器(至少包括AX,BX,CS,IP)内容的变化。 机器码汇编指令 B8 20 4E MOV AX,4E20H 05 16 14 ADD AX,1416H BB 00 20 MOV BX,2000H 01 D8 ADD AX,BX 89 C3 MOV BX,AX 01 D8 ADD AX,BX B8 1A 00 MOV AX,001AH BB 26 00 MOV BX,0026H 00 D8 ADD AL,BL 00 DC ADD AH,BL 00 C7 ADD BH,AL B4 00 MOV AH,0 00 D8 ADD AL,BL 04 9C ADD AL,9CH 要求: 用E(A)命令的方式将指令写入内存。注意用T命令执行时CS:IP的指向。 2. 2、将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算8 MOV AX,1 ADD AX,AX JMP 2000:0003 3、查看内存中的内容。 PC机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图修改它。 4、向从B8100H开始的内存单元中写入数据,如: -E B810:0000 01 01 02 02 03 03 04 04 请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

8088汇编指令大全

8088汇编指令大权 数据传输指令 ────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。 1。通用数据传送指令。 MOV 传送字或字节。 MOVSX 先符号扩展,再传送。 MOVZX 先零扩展,再传送。 PUSH 把字压入堆栈。 POP 把字弹出堆栈。 PUSHA 把A X,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依次压入堆栈。 POPA D 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EA X依次弹出堆栈。 BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节。( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数。( 第二个操作数必须为累加器A L/AX/EAX ) XADD 先交换再累加。( 结果在第一个操作数里) XLAT 字节查表转换。 ── BX 指向一张256 字节的表的起点,AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果。( [BX+A L]->A L ) 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 标志寄存器传送,把标志装入A H。SAHF 标志寄存器传送,把A H内容装入标志寄存器。 PUSHF 标志入栈。 POPF 标志出栈。 PUSHD 32位标志入栈。 POPD 32位标志出栈。 二、算术运算指令 ────────────────────────────── ADD 加法。 ADC 带进位加法。 INC 加1。 AAA 加法的ASCII码调整。 DAA 加法的十进制调整。 SUB 减法。 SBB 带借位减法。 DEC 减1。 NEC 求反(以0 减之)。 CMP 比较。(两操作数作减法,仅修改标志位,不回送结果)。 AAS 减法的ASCII码调整。 DAS 减法的十进制调整。 MUL 无符号乘法。 IMUL 整数乘法。 以上两条,结果回送A H和A L(字节运算),或DX和A X(字运算), AAM 乘法的ASCII码调整。

相关文档
最新文档