文档视界 最新最全的文档下载
当前位置:文档视界 › 单片机汇编语言指令集

单片机汇编语言指令集

单片机汇编语言指令集
单片机汇编语言指令集

汇编语言的所有指令数据传送指令集

MOV

功能: 把源操作数送给目的操作数

语法: MOV 目的操作数,源操作数

格式: MOV r1,r2

MOV r,m

MOV m,r

MOV r,data

XCHG

功能: 交换两个操作数的数据

语法: XCHG

格式: XCHG r1,r2 XCHG m,r XCHG r,m

PUSH,POP

功能: 把操作数压入或取出堆栈

语法: PUSH 操作数POP 操作数

格式: PUSH r PUSH M PUSH data POP r POP m

PUSHF,POPF,PUSHA,POPA

功能: 堆栈指令群

格式: PUSHF POPF PUSHA POPA

LEA,LDS,LES

功能: 取地址至寄存器

语法: LEA r,m LDS r,m LES r,m

XLAT(XLATB)

功能: 查表指令

语法: XLAT XLAT m

算数运算指令

ADD,ADC

功能: 加法指令

语法: ADD OP1,OP2 ADC OP1,OP2

格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data

影响标志: C,P,A,Z,S,O

SUB,SBB

功能:减法指令

语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data

影响标志: C,P,A,Z,S,O

INC,DEC

功能: 把OP的值加一或减一

语法: INC OP DEC OP

格式: INC r/m DEC r/m

影响标志: P,A,Z,S,O

NEG

功能: 将OP的符号反相(取二进制补码)

语法: NEG OP

格式: NEG r/m

影响标志: C,P,A,Z,S,O

MUL,IMUL

功能: 乘法指令

语法: MUL OP IMUL OP

格式: MUL r/m IMUL r/m

影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)

DIV,IDIV

功能:除法指令

语法: DIV OP IDIV OP

格式: DIV r/m IDIV r/m

CBW,CWD

功能: 有符号数扩展指令

语法: CBW CWD

AAA,AAS,AAM,AAD

功能: 非压BCD码运算调整指令

语法: AAA AAS AAM AAD

影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)

DAA,DAS

功能: 压缩BCD码调整指令

语法: DAA DAS

影响标志: C,P,A,Z,S

位运算指令集

AND,OR,XOR,NOT,TEST

功能: 执行BIT与BIT之间的逻辑运算

语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位

SHR,SHL,SAR,SAL

功能: 移位指令

语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

影响标志: C,P,Z,S,O

ROR,ROL,RCR,RCL

功能: 循环移位指令

语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O

程序流程控制指令集

CLC,STC,CMC

功能: 设定进位标志

语法: CLC STC CMC

标志位: C

CLD,STD

功能: 设定方向标志

语法: CLD STD

标志位: D

CLI,STI

功能: 设定中断标志

语法: CLI STI

标志位: I

CMP

功能: 比较OP1与OP2的值

语法: CMP r/m,r/m/data

标志位: C,P,A,Z,O

JMP

功能: 跳往指定地址执行

语法: JMP 地址

JXX

功能: 当特定条件成立则跳往指定地址执行

语法: JXX 地址

注:

A: ABOVE,当C=0,Z=0时成立

B: BELOW,当C=1时成立

C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立

E: EQUAL,当Z=1时成立

G: GREATER(大于),当Z=0且S=0时成立

L: LESS(小于),当S不为零时成立

N: NOT(相反条件),需和其它符号配合使用

O: OVERFLOW,O=1时成立

P: PARITY,P=1时成立

PE: PARITY EVEN,P=1时成立

PO: PARITY ODD,P=0时成立

S: SIGN,S=1时成立

Z: ZERO,Z=1时成立

LOOP

功能: 循环指令集

语法: LOOP 地址

LOOPE(Z)

地址LOOPNE(Z) 地址

标志位: 无

CALL,RET

功能: 子程序调用,返回指令

语法: CALL 地址RET RET n

标志位: 无

INT,IRET

功能: 中断调用及返回指令

语法: INT n IRET

标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器

字符串操作指令集

MOVSB,MOVSW,MOVSD

功能: 字符串传送指令

语法: MOVSB MOVSW MOVSD

标志位: 无

CMPSB,CMPSW,CMPSD

功能: 字符串比较指令

语法: CMPSB CMPSW CMPSD

标志位: C,P,Z,S,O

SCASB,SCASW

功能: 字符串搜索指令

语法: SCASB SCASW

标志位: C,P,Z,S,O

LODSB,LODSW,STOSB,STOSW

功能: 字符串载入或存贮指令

语法: LODSB LODSW STOSB STOSW

标志位: 无

REP,REPE,REPNE

功能: 重复前缀指令集

语法: REP 指令S REPE 指令S REPNE 指令S

标志位: 依指令S而定

对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

这里将简单介绍其指令类型及指令说明,如有要求给具体的指令格式及应用,请与amay联系,amay加以更新。

1)数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。

数据传送指令类型指令说明

通用数据传送指令MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)

累加器专用传送指令IN(输入指令)、OUT(输入指令)

地址传送指令LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)

标志寄存器传送指令LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)

2)算术指令:用来执行算术运算。

算术指令类型指令说明

加法指令ADD(加法)、ADC(带进位加法)、INC(加1)

减法指令SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)

乘法指令MUL(无符号数乘法)、IMUL(带符号数乘法)

除法指令DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)

3)逻辑指令:对字或字节执行逻辑运算。

逻辑指令类型指令说明

逻辑运算指令AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)

移动指令SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移)

4)串处理指令:处理存放存储器里的数据串。

串处理指令类型指令说明

指令MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)

5)控制转移指令:用来控制程序的执行流程。

控制转移指令类型指令说明

无条件转移指令JMP(段间和段内转移)

条件转移指令JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢

出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)

循环指令LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)

子程序指令CALL(调用指令)、RET(返回指令)

中断指令INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)

6)处理机控制指令:

处理机控制指令类型指令说明

标志处理指令CLC(进位位置0指令)、CMC(进位位求反指令)、STC(进位位置为1指令)、CLD(方向标志置1指令)、STD(方向标志位置1指令)、CLI(中断标志置0指令)、STI(中断标志置1指令)其他处理机控制指令NOP(无操作)、HLT(停机)、WAIT(等待)、ESC(换码)、LOCK(封锁)

汇编语言程序格式

汇编语言源程序用语句书写,MASM中可使用的语句分成两类,他们是指令性语句和伪指令语句

1.指令性语句:指令性语句与机器指令相对应,汇编程序将他翻译成目标代码(机器指令代码)。语句格为:

标号:指令助记符操作数,操作数;注释

标号表示指令语句的符号地址,标号后面必须紧跟“:”。标号可以省略,他经常作为转移指令或CALL指令的一个操作数,用以表示地址的转移。

指令助记符是该语句的指令名称的代表号码,他指出操作的类型,汇编程序将其翻译成机器指令。不可省略。

操作数表示参加本指令的运算数据,根据指令的操作类型,操作数不同,中间必须用“,”隔开。

注释指明一条指令的功能,可以省略。

2.伪指令语句

伪指令语句没有对应的机器指令。汇编程序汇编源程序时对伪指令进行处理,他可以完成数据定义,存储区分配,段定义,段分配,指示程序结束功能。伪指令语句的格式为:

名字伪指令指示符操作数,操作数;注释

名字时给伪指令取得名称,他用符号地址表示。伪指令中的名字通常是变量名,段名,过程名、符号名等。

伪指令指示符是汇编程序MASM规定的符号。

操作数是根据伪指令的具体要求来得。

3.数据项

汇编语言中使用的操作数,可以是常数、寄存器、存储器、变量、标号活表达式,其中藏书、变量和标号是三种基本数据项。

⑴常数必须是固定的值,没有属性,是确定的数据。

⑵变量在程序运行中是可以修改的。所有的变量具有三种属性

①段值(SEGMENT):指明变量所在段的基址。

②段内偏移地址(OFFSET):指变量所在地址与段首地址之间的偏移字节数。

③类型(TYPE):变量的类型属性指变量中每个单元所包含的字节数,类型有:字节变量(BYTE)、字变量(WORD)、双字变量(DOUBLE WORD)

⑶标号:标号是指可执行指令语句的地址的符号表示,他可作为转移指令和调用指令的目标操作数,以确定程序转换的目标地址,他具有三个属性。

①段值(SEGMENT):指明标号所在段的基址。

②段内偏移地址(OFFSET):指标号所在地址与所在段段首地址之间的偏移字节数。

③类型(TYPE):标号的类型属性指在转移指令中标号可转移的距离类型.NEAR,表示近标号只能实现在本代码段内转移或调用;FAR,表示远标号,可;以作为其他代码段中的目标地址,实现段间调用或转移。

伪指令汇总

1.数据定义语句

格式一:变量名助记符操作数,操作数…;注释

格式二:变量名助记符 n DUP(操作数,操作数…);注释

功能:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据。

变量名,用符号表示,可以省略。汇编程序时将此变量的助记符后的第一个字节的偏移地址作为他的符号地址。

助记符主要有:

DB:用来定义字节,表示每个操作数占用一个字节;

DW:用来定义字,表示每个操作数占用一个字;

DD:用来定义双字,表示每个操作数占用两个字;

DQ:用来定义四个字,表示每个操作数占用四个字;

DT:用来定义十个字节,表示每个操作数占用十个字节;

在格式二中,用n DUP表示时,n必须是整数,表示括号中的操作数的重复次数。DUP后面必须带括号。

2.表达式赋值语句

⑴赋值语句EQU

格式:符号名 EQU 表达式

功能:用来给变量、标号、常数、指令、表达式等定义一个符号名,程序中用到EQU左边得变量、标号时可以用右边的常数值或表达式来代替,但是一经定义在同一个程序模块中不能再重新定义。

⑵符号语句=

符号语句“=”与EQU语句具有相同功能,区别仅在于EQU中左边的标号不允许重新定义,而用“=”定义的语句可以重新定义。

3段定义语句

存储器的物理地址由段基址和偏移地址组合而成,任何一个逻辑段,无论是数码段,数据段,堆栈段,附加段都必须定义。以便连接程序把不同段和模块连成一个可执行的程序。

⑴段定义语句SEGMENT…ENDS

格式:段名 SEGMENT 定位类型组合类型‘分类名’

逻辑段内容

段名 ENDS

功能:将一个逻辑段定义成一个整体

段名,是逻辑段的标识符,不能省略。他确定了逻辑段在存储器中的地址。必须以SEGMENT开始,以ENDS结束,前后段名必须一致。

定位类型,定位类型参数是对该段起始地址的定位。定位类型参数主要有下面4种:

①PARA:指定定位段的起始地址必须在节的整数边界,当定位类型缺省时,就当成PARA

②BYTE:指定定位段的起始地址定位在存储单元的任何字节地址。

③WORD:指定定位段的起始地址定位在字的边界,即段的首地址必须是偶数。

④PAGE:指定定位段的起始地址定位在页的边界,即段的首地址必须是256的整数倍。

组合类型:组合类型参数主要提供了各个逻辑段之间的组合方式

①NONE:该段与其他同名段不进行连接,各段独立于存储器中,NONE可作为缺省参数。

②PUBLIC:该段与其他模块中的同名段连接时,由低地址到高地址连接起来,组成一个逻辑段,连接次序由连接命令指定。

③COMMON:该段在连接时与其他模块中的同名段有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最大长度。

④AT表达式:定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。当用户要求某个逻辑段在指定节的边界上时,就要用AT参数来实现。

⑤STACK:指定该段为堆栈段,此参数在堆栈段中不可省略。

⑥MEMORY:定位该段与其他模块中的同名段有相同的首地址,采用覆盖的方法在存储器中组合连接。其功能与COMMON相似,区别是第一个带MEMORY参数的逻辑段覆盖在其他同名段的最上层,其他带此参数的同名段按照COMMON方式处理。

⑶“分类名”(CLASS NAME)

其主要作用是汇编程序连接时将所有的分类名相同的逻辑段组成一个段组。2.段分配语句(ASSUME)

格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名

功能:定义4个逻辑段,指明段和寄存器的关系。

3.过程定义语句

格式:过程名 PROC 属性

过程内容

RET N

过程名 ENDP

功能:定义一个过程,主程序可以用CALL 指令调用他

过程名:给所定义的过程取得名字,不可省略。象标号一样具有三个属性:段属性、偏移地址属性和距离属性。

RET N为过程内部的返回指令。过程中至少一条RET,可以在任何位置,使过程返回到主程序调用他的CALL指令之下的一条指令。N为弹出值,可以缺省,表示从程返回以后,堆栈中应有N个字节的值作废。

4.程序开始和结束语句

⑴NAME:

格式:NAME 程序名

功能:为源程序目标模块赋名字。

⑵TITLE

格式:TITLE 文本名

功能:将文本名赋给源程序目标模块作名字,功能同NAM..

⑶ORG

格式:ORG 表达式

功能:给汇编程序设置位置指针,指定下面语句的起始偏移地址。

⑷END

格式:END 标号名

功能:标记汇编源程序结束

5.外部伪指令及对准伪指令

程序中包含多个模块时,有些程序或数据在各个模块间要相互共享,可用外部伪指令PUBLIC和EXTRN来实现此功能。

⑴外部伪指令

PUBLIC用来定义共享模块,EXTAN用来调用共享模块

格式:PUBLIC 名称,名称,…

EXTRN 名称:类型,名称:类型…

⑵对准伪指令

格式:EVEN

功能:EVEN伪指令使下一语句的地址调整为偶地址

⑶LABEL

LABEL伪指令给已定义的变量或标号取另一个名字,并可重新定义他的类属性格式:名称 LABEL 类型属性

伪指令

A51汇编解释---伪指令 2011-05-11 17:51:46| 分类:默认分类| 标签: |举报 |字号大 中 小订阅 一:定义符号的伪指令 1)SEGMENT 格式: 段名符号 SEGMENT 段类型 [再定位类型] SEGMENT指令可声明一个可再定位(区别于CSEG,DSEG,XSEG,BSEG,ISEG等定义的在相对应的空间固定地址定义的绝对段—在连接的过程中不允许重新定位)的段符号和一个可选的再定位类型,段符号可以用来定义段,L51连接器可将多个模块内的具有相同段名和再定位类型的几个段合成为一个段.段类型说明了段所处的地址空间. 如果是编写的汇编程序要与C源程序接口,即被C源程序调用,则全部的汇编子程序所命名的定义的代码段的段名必须是可用SEGMENT来定义的,而且名字的命名的方法也应该参照C51编译器产生的局部段的段名的转换规则.段名的作用主要是在汇编的时候用RSEG来激活的,在连接定位的时候用到的.与段名相应的是用于存储和传递参数的别名,可以在汇编源程序中直接应用局部段的别名,这个别名主要是在传递函数参数的时候用的.在汇编程序中要用PUBLIC 声明被其他模块引用的全局符号. DATA (可直接寻址的内部RAM空间) IDATA (可间接寻址的内部RAM空间) XDATA (外部数据存储空间) BIT (内部RAM低地址区的可位寻址的空间) CODE (程序存储器空间) 可选的再定位类型定义了L51连接时的定位方式,再定位类型: UNIT:定义一个可开始于任一单元的段对于BIT型的段,一个单元是一个位, 其它所有的段一个单元是一个字节. PAGE:定义一个起始地址必须是256的整数倍的段,段的绝对地址由L51自己计算,该类型只允许用于XDATA和CODE类型段. INPAGE:定义一个由L51连接后必须包含在256B的块中,只适用于XDATA和CODE段. INBLOCK:定义一个L51连接后必须包含在2KB中的段,只适用于CODE段. OVERLAYABLE:定义一个可与其他段交叠的覆盖段,其段名符号必须按C51或者PL/M51的规则命名.C51把局部数据段和局部位段定义成?DT?FUNCTIONNAME?MODULENAME 和?BI?FUNCTIONNAME?MODULENAME这是在small模式下.其他的模式略有不同。BITADDRESSABLE:定义一个L51连接后位于可位寻址的区,段长不能超过16B. 2) EQU 格式: 符号名 EQU 表达式 符号名 EQU 寄存器名 EQU伪指令定义一表示数值或寄存器的符号,该符号可用于表达式或助记符指令的操作数,EQU指令定义的符号不能被改变或重新定义,其段类型取决于表达式中的操作数类型类型,无类型的EQU符号可用于任何表达式中. LIMIT EQU 200 VALUE EQU LIMIT-100+’A’

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

汇编语言知识大全

第一章基础知识: 一.机器码: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

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

汇编语言指令表

汇编语言指令表文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

伪指令 1、定位伪指令 ORG m 2、定义字节伪指令 DB X1,X2,X3,…,Xn 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn 4、汇编结束伪指令 END 寻址方式 MCS-51单片机有五种寻址方式: 1、寄存器寻址 2、寄存器间接寻址 3、直接寻址 4、立即数寻址 5、基寄存器加变址寄存器间接寻址 6、相对寻址 7、位寻址 数据传送指令 一、以累加器A为目的操作数的指令(4条) MOV A,Rn ;(Rn)→A n=0~7 MOV A,direct ;( direct )→A MOV A,@Ri ;((Ri))→A i=0~1 MOV A,#data ; data →A 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)→ Rn MOV Rn ,direct;( direct )→ Rn MOV Rn ,#data; data → Rn 三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct MOV direct,direct ;(源direct)→目的direct MOV direct,@Ri;((Ri))→direct MOV direct,#data; data→direct 四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)→(Ri) MOV @Ri,direct;(direct)→(Ri) MOV @Ri,#data; data→(Ri) 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataH→DPH,dataL →DPL

PIC单片机汇编语言基础

PIC单片机汇编语言基础 1、程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。 TITLE This is …… ;程序标题 ;-------------------------------------- ;名称定义和变量定义 ;-------------------------------------- F0 EQU 0 RTCC EQU 1 PC EQU 2 STATUS EQU 3 FSR EQU 4

RA EQU 5 RB EQU 6 RC EQU 7 ┋ PIC16C54 EQU 1FFH ;芯片复位地址 PIC16C56 EQU 3FFH PIC16C57 EQU 7FFH ;----------------------------------------- ORG PIC16C54 GOTO MAIN ;在复位地址处转入主程序ORG 0 ;在0000H开始存放程序 ;----------------------------------------- ;子程序区 ;----------------------------------------- DELAY MOVLW 255 ┋ RETLW 0 ;------------------------------------------ ;主程序区 ;------------------------------------------ MAIN MOVLW B‘00000000’ TRIS RB ;RB已由伪指令定义为6,即B

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

单片机伪指令和指令详解

ASM-51汇编伪指令 一、伪指令分类 1.符号定义 SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT, CODE 2.存储器初始化/保留 DS, DB, DW, DBIT 3.程序链接 PUBILC, EXTRN, NAME 4.汇编程序状态控制 ORG, END 5.选择段的伪指令 RSEG, CSEG, DSEG, XSEG, ISEG, BSEG, USING 二、伪指令具体说明 1.符号定义伪指令 1)SEGMENT伪指令 格式:段名SEGMENT 段类型 说明:SEGMENT 伪指令说明一个段。段就是一块程序代码或数据存储器。允许使用的段类型为: ●CODE代码空间 ●DATA 可以直接寻址的内部数据空间 ●XDATA外部数据空间 ●IDATA可以间接寻址的整个内部数据空间 ●BIT位空间 例子:(段符号用于表达式时,代表被连接段的基地址) STACK SEGMENT IDATA RSEG STACK DS 10H ;保留16字节做堆栈 MOV SP , #STACK-1 ;堆栈指针初始化

2)EQU伪指令 格式:符号名 EQU 表达式 符号名 EQU 特殊汇编符号 说明:EQU表示把一个数值或特殊汇编符号赋予规定的名字。 一个表达式赋予一个符号,必须是不带向前访问的表达式。 例子:N27 EQU 27; ACCUM EQU A ;定义ACCUM代替特殊汇编符号A(累加器) HERE EQU $; HERE为当前位置计数器的值 3)SET伪指令 格式:符号名 SET 表达式 符号名 SET 特殊汇编符号 说明:SET类似EQU,区别在于可以用另一个SET伪指令在以后对定义过的符号重新定义。 例子:COUNT SET 0 COUNT SET COUNT+1 4)BIT伪指令 格式:符号名 BIT 位地址 说明: BIT伪指令把一个地址赋予规定的符号名。该符号类型取段类型BIT. 例子: RSEG DATA_SEG; CONTROL: DS 1 ALATM BIT CONTROL.0; OPEN_BOARD BIT ALATM+1 ;下一位 RESET_BOARD BIT 60H ;下一个绝对的位 5)DATA伪指令 格式:符号名 DATA 表达式 说明:DATA伪指令把片内的数据地址赋予所规定的符号名。符号段类型为DATA. 例子:CONIN DATA SBUF;定义CONIN 到串行口缓冲器的地址

单片机控制系统汇编程序

; step motor control ; ASM for MCS51 mode equ 082h contrl equ 08003h ctl equ 08000h ;8255接口芯片PA口的地址值 Astep equ 01h ;对A相通电,PA口的赋值 Bstep equ 02h ;对B相通电,PA口的赋值 Cstep equ 04h ;对C相通电,PA口的赋值 Dstep equ 08h ;对D相通电,PA口的赋值 dly_c equ 10h ;启动初值(加速度)寄存器 sd1 equ 80 ;0--255 加速度初值:值越小,加速越快 sd2 equ 40 ;

51单片机汇编指令及伪指令小结

51单片机汇编指令小结

二、算术运算类指令

四、控制转移类指令类

五、位操作类指令 逻辑操作与字节中的一致

51汇编常用伪指令 https://www.docsj.com/doc/2715620688.html, 16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址; 2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB 88H,100,``7" , ``C"; 3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW 1234H, 7BH 名字EQU 表达式或名字=表达式:用于给一个表达式赋值或给字符串起名字。之后名字可用作程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数据串。例如:COUNT=10或SPACE EQU 10H 5.名字DATA 直接字节地址:给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串。同一单元可起多个名字。例如:ERROR DATA 80H 6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。例如:IO_POTR XDATA OCF04H 7.名字Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H 8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 注:DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中。

单片机汇编语言伪指令

单片机汇编语言伪指令 1.BIT---用于汇编程序的一开始创建一个常量. FLASH_COUNT BIT3EH;创建一个名为FLASH_COUNT的常量,并把立即数3EH赋给这个常量,在程序中就可以直接把FLASH_COUNT等同于立即数3EH进行操作. 2.DATA---定义一个指向特殊功能寄存器区地址的变量. DPTRSW DATA0A2H;DPTRSW指向特殊功能寄存器0A2H地址上. 3.DB---用于汇编程序中定义若干个长度为1个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为00H. DB10H,11H,,3FH,20H;在目标文件中生成10H,11H,00H,3FH,20H 4.DS---用于保留一块存储器空间给程序变量使用或别的用途. STORAGE DS10;保留一块名叫"STORAGE"的10字节存储空间 5.DW---定义若干个长度为两个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为0000H. DW0FFFEH,,0102H;在目标文件中生成代码:FFH,FEH,00H,00H,01H,02H 6.END---该伪指令告诉汇编器程序的结束点. 7.EQU---定义某一个符号的值,一旦一个符号被定义后,就不能被另一个EQU或SET指令重复定义. BEEP_COUNT EQU1+1;表达式把2定义给符号BEEP_COUNT 8.IF、ELSE、ENDIF---这3个伪指令是条件选择语句,它们告诉汇编器根据表达式的值,是否汇编某一块程序,没有汇编的块在目标文件中是不存在对应的执行代码的. IF P1.0;如果P1.0=1,就汇编下一行 ELSE01H,02H,03H;在存储器中定义字01H、02H、03H ENDIF;条件选择结束,如果P1.0≠1,上一行不被汇编. 9.INCL---该指令用于在汇编时把其他文件与当前文件结合在一起汇编. INCL"const.def";即把文件"const.def"与当前文件结合在一起汇编. https://www.docsj.com/doc/2715620688.html,---该伪指令用于设置程序计数器PC的初始值. ORG0000H;指令的执行代码在单片机的程序存储器中从0000H开始存储(也可简单写成00H). 11.SET---该伪指令类似EQU,但不同的是SET可以通过另一个SET伪指令重复定义变量的值. COUNT SET3 COUNT SET1;最终COUNT=1

快速入门单片机汇编语言

快速入门单片机汇编语 言 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(—):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(—):其每一位都能作为可编程的输入或输出线。 P2口(—):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(—):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 P3口第二功能

Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释] 例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号: Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。 rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。

MCS-51汇编语言指令集

MCS-51汇编语言指令集 符号定义表 符号 含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数 #data16 16位常数 Addr16 16位的目标地址 Addr11 11位的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 2指令介绍 指令 字节 周期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器 3.ADD A,@Ri 1

将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1

单片机汇编语言经典一百例

51单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY:

MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH

DJNZ R1,$ RET END 五、定时器功能实例 5.1 定时1秒报警 程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50个 0.2秒,即50*0.2=1秒 MOV TMOD,#00000001B;定时器0工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05秒,定时 20次则一秒 11 SETB EA ;开总中断

(完整版)汇编语言中常用的伪指令档

汇编语言中常用的伪指令 分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言 汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。本文简单总结了常用的伪指令,如下。 1、EQU(Equate) 一般格式为:标号:EQU 操作数 指令功能为将操作数赋予标号,两边的值完全相等。使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。 AREA: EQU 1000H ;将标号AREA赋值为1000H 2、ORG(Origin) 一般格式为:ORG xxxxH(绝对地址或标号) XxxxH决定此语句后第一条指令(或数据)的地址。该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。 ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。 ADD R1,#1 MOV R2, #2 3、DB(Define Byte) 一般格式为:标号:DB 字节常数或字符或表达式 标号字段可有可无,字节常数或字符是指一个字节数据。此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。 ORG 8000H DATA1:DB 43H,09H,08H DATA2:DB 07H 伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。 注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。

汇编语言指令集

汇编语言指令集 一、数据传输指令 1. 通用数据传送指令. MOV(MOVe) 传送字或字节. MOVS(MOVe String) 串传送指令 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 (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD先交换再累加.( 结果在第一个操作数里) XLAT(TRANSLATE) 字节查表转换. ── 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 (Load Effective Address)装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS (Load DS with pointer)传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES (Load ES with pointer)传送目标指针,把指针内容装入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 (Load AH with Flags)标志寄存器传送,把标志装入AH. SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器. PUSHF (PUSH the Flags)标志入栈. POPF (POP the Flags)标志出栈.

汇编与接口第四章作业

1.伪指令语句与硬指令语句的本质区别是什么?伪指令语句有什么主要作用? 答:区别:伪指令语句是能执行的语句,硬指令语句是CPU可以执行的语句。 伪指令语句主要作用是为汇编程序提供解释说明,它仅仅是在汇编过程中告诉汇编程序如果进行汇编。 2.什么是标识符?汇编程序中标识符怎样组成? 答:是用户自己定义的符号名。在汇编程序中标识符有两种:标号标识符,用在指令语句中,后面跟冒号,表示程序入口的逻辑地址。符号(或名字)标识符,用在伪指令语句中,后面不跟冒号,通常是定义一个变量,或说明变量类型。标识符一般不超31个字符,数字及常规符号($、@、?等)不能打头,也不能使用保留字。标识不区分大小写。 4.汇编语句有哪两种,每个语句有哪4部分组成? 答:指令语句(又称执行语句)和伪指令语句(又称说明性语句)。指令语句4部分包括,①标号:、②硬指令助记符、③操作数、④;注释。伪指令语句4部分包括,①符号名、②伪指令助记符、③参数、④;注释。 5.汇编程序开发有哪4个步骤?分别利用什么程序完成,产生什么输出文件? 答:①编辑。使用文本编辑器。产生汇编源程序文件: 文件名.ASM。源文件是文本文件。 ②汇编。使用汇编程序,如MASM或ML,排除程序中的语法错误。产生目标文件:文件名.OBJ。目标文件是二进制文件,是不能执行的文件。 ③连接。使用LINK。产生可执行文件:文件名.EXE. ④调试。使用DEBUG。本身不产生文件,是对连接产生的可执行进行调试,排除程序中的算法错误,保证可执行文件的正确性。 7.假设MYWORD是一个字变量,MYBYTE1和MYBYTE2是两个字节变量,指出下列语句中的错误原因。 (1) MOV BYTE PTR[BX], 1000 答:数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。 (2) MOV BX, OFFSET[SI] 答:OFFSET后只能跟标识符。 (3) CMP MYBYTE1, MYBYTE2 答:CMP的两个操作数不能同时在存储器中。 (4) MOV AL, MYBYTE1+MYBYTE2 答:运算符只能对常数进行操作,不能对变量进行操作。 (5) SUB AL, MYWORD 答:数据类型不匹配,AL是8位的,MYWORD是16位变量。 (6) JNZ MYWORD 答:MYWORD是变量,其指的单元中存放的是操作数,不能用做跳转入口。 8.OPRL是个常数,请问下列语句中两个AND操作有什么不同? AND AL, OPRL AND 0FEH 答:第一个AND是指令语句,在程序运行时才执行,第二个AND是逻辑运算符,

相关文档
相关文档 最新文档