导航:首页 > 使用方法 > 常用汇编方法

常用汇编方法

发布时间:2022-01-13 05:33:40

❶ 请告诉我一些常用的汇编语言

A B (把A复制为B)
md A (新建文件夹A)
cd .. (回到上一文件夹)
exit (退出)
注:DOS不是汇编

❷ 主要的汇编指令有哪些

LDR 和STR——用于字和无符号字节
指令格式:
LDR/STR{cond}{T} Rd,<地址>
LDR/STR{cond}B{T} Rd,<地址>

LDR{cond}{T} Rd,<地址> 加载指定地址的字数据到Rd中;
STR{cond}{T} Rd,<地址> 存储Rd中的字数据到指定的地址单元中;
LDR{cond}B{T} Rd,<地址> 指令加载指定地址的字节数据到Rd的的最低字节中(Rd的高24位清零);
STR{cond}B{T} Rd, <地址> 指令存储Rd中的最低字节数据到指定的地址单元中。
T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下,T 在用户模式下无效,不能与前索引偏移一起使用T。

地址部分可用的形式有4种:

零偏移(zero offset) [Rn] ,Rn的值作为传送数据的地址。如:
LDR R0,[R1];
前索引偏移(pre-indexed offset) [Rn,Flexoffset]{!} 在数据传送之前,将偏移量Flexoffset加到Rn 中。其结果作为传送数据的存储器地址。若使用后缀“!”,则结果写回到Rn 中,且Rn 不允许是R15,如:
LDRB R0,[R1,#8]
LDR R0,[R1,#8]!
程序相对偏移(program relative) label(label 必须是在当前指令的土4KB 范围内) 。
程序相对偏移是前索引形式的另一种版本。从PC 计算偏移量,并将PC 作为Rn 生成前索引指令,不能使用后缀“!”,如:
LDR R0,place ;
place地址装入R0
后索引偏移(post-indexed offset) [Rn],Flexoffset。在数据传送后,将偏移量Flexoffset 加到Rn 中,结果写回到Rn,Rn 不允许是R15,如:
LDR R0,[R1],R2,LSL#2 ;
将存储器地址为R1 的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
偏移量Flexoffset可以是下两种形式之:
1) 取值范围是-4095 到+4095 的整数的表达式,经常是数字常量,如:
STR R5,[R7],#--8
2) 一个寄存器再加上移位(移位由立即数指定),如:
{-}Rm{,shift}
其中:
- :可选负号。若带符号“一”,则从Rn 中减去偏移量。否则,将偏移量加到Rn 中。
Rm :内含偏移量的寄存器。Rm 不允许是R15。
Shift:Rm 的可选移位方法。可以是下列形式的任何一种:
ASR n :算术右移n 位(1<=n<=32)
LSL n :逻辑左移n 位(1<=n<=31)
LSR n :逻辑右移n 位(1<=n<=32)
ROR n :循环右移n 位(1<=n<=31)
RRX :循环右移1 位,带扩展。
AND―――――逻辑”与”操作指令
指令格式:

AND{cond}{S} Rd,Rn,operand2
AND指令将操作数operand2 与Rn 的值按位逻辑”与”,结果存放到目的寄存器Rd 中。若设置S,则根据运算结果影响N、Z位,在计算第二操作数时,更新C位,不影响V位(指令ORR、EOR、BIC 对标志位的影响同AND 指令)。
指令示例:
ANDS R1,R1,R2 ;R1=R1&R2,并根据运算的结果更新标志位
AND R0,R0,#0x0F ;R0=R0&0x0F,取出R0最低4位数据。

ORR―――――逻辑”或”操作指令
指令格式:ORR{cond}{S} Rd,Rn,operand2 ORR指令将操作数operand2 与Rn 的值按位逻辑”或”,结果存放到目的寄存器Rd 中。指令示例:
ORRS R1,R1,R2 ;R1=R1|R2,并根据运算的结果更新标志位
ORR R0,R0,#0x0F ;R0=R0|0x0F,将R0最低4位置1,其余位不变。

BIC―――――位清除指令
指令格式:
BIC{cond}{S} Rd,Rn,operand2
BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。

CMP―――――比较指令
指令格式:
CMP{cond} Rn,operand2
CMP指令用Rn的值减去操作数operand2 ,并将结果的状态(Rn 与operand2比较是大、小、相等)反映在CPSR中,以便后面的指令根据条件标志决定程序的走向。CMP指令与SUBS指令完成的操作一样,只是CMP指令只减,不存结果。
指令示例:
cmp R0,R1 ;比较R0,R1
beq stop ;R0=R1跳到stop
blt less ;R0<R1跳到Less

.
.
.

Less:
.
.
.
Stop:
.
.
.
SUB―――――减法运算指令
指令格式:
SUB{cond}{S} Rd,Rn,operand2 SUB指令用Rn 的值减去操作数operand2 ,并将结果存放到目的寄存器Rd 中。 指令示例:
SUBS R1,R1,R2 ;R1=R1-R2,并并根据运算的结果更新标志位
SUBGT R3,3,#1 ;大于则 R3=R3-1
SUB R0,R2,R3,LSL#2; R0=R2-(R3<<2)

ARM分支指令
助记符

说明

操作

B{cond} lable
分支指令

PC← lable

BL{cond} lable
带链接的分支指令

LR← PC-4 ,PC←lable

BX{cond} Rm
带状态切换的分支指令

PC← Rm,切换处理器状态

指令的条件码
条件码 助记符后缀 标志 含义
0000 EQ Z置位(Z=1) 相等
0001 NE Z清零(Z=0) 不相等
0010 CS C置位 无符号数大于等于
0011 CC C清零 无符号数小于
0100 MI N置位 负数
0101 PL N清零 整数或0
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000 HI C置位且Z清零 无符号数大于
1001 LS Z置位且C清零 无符号数小于等于
1010 GE N等于V(N=V=1或N=V=0) 带符号数大于或等于
1011 LT N不等于V 带符号数小于
1100 GT Z清零且N等于V 带符号数大于
1101 LE Z置位或N不等于V 带符号数小于或等于
1110 AL 忽略 无条件执行

;GPIO寄存器宏定义
GPFCON EQU 0x56000050
GPFDAT EQU 0x56000054
GPFUP EQU 0x56000058

EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读

LEDTEST
;设置GPF4-GPF7为output
ldr r0,=GPFCON
ldr r1,[r0]
bic r1,r1,#0xff00
orr r1,r1,#0x5500
str r1,[r0]

;禁止GPF4-GPF7端口的上拉电阻
ldr r0,=GPFUP
ldr r1,[r0]
orr r1,r1,#0xf0
str r1,[r0]

looptest
;将数据端口F的数据寄存器的地址附给寄存器r2
ldr r2,=GPFDAT

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xb0
str r3,[r2] ;GPF6 output 0
ldr r0,=0x2fffff
bl delay ;调用延迟子程序

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0x70
str r3,[r2] ;GPF7 output 0
ldr r0,=0x2fffff ;初始计数值
bl delay ;调用延迟子程序

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xd0
str r3,[r2] ;GPF5 output 0
ldr r0,=0x2fffff
bl delay ;调用延迟子程序

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xe0
str r3,[r2] ;GPF4 output 0
ldr r0,=0x2fffff
bl delay ;调用延迟子程序

b looptest
delay
sub r0,r0,#1 ;r0=r0-1
cmp r0,#0x0 ;将r0的值与0相比较
bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr ;返回

END ;程序结束符

❸ 汇编语言指令大全,要详细的 !!!!

一、数据位传送指令:

1、MOV C, bit ;bit 可直接寻址位 C←(bit)

2、MOV bit,C ;C 进位位 (bit) ← C

二、位变量修改指令:

1、CLR C ; 将C=0

2、CLR bit

3、CPL C ; 将C求反再存入C

4、CPL bit ; 将bit求反再存入bit

5、SETB C ; 将C=1

6、SETB bit ; (bit) ← 1

三、位变量逻辑指令:


ANL C, bit ANL C, bit ORL C, bit ORL C, bit

❹ 介绍几种汇编语言吧

汇编语言又称符号语言,是一种符号化的机器语言,直接面向硬件(cpu、内存、i/o等)编程,它将机器指令的操作码、操作数由二进制代码改为人们熟悉的符号。比机器语言(二进制代码)便于记忆。比起高级语言,结构合理,执行效率高,占用内存空间小。病毒、木马程序大都用汇编语言编写。
由于汇编语言与硬件的密切关系,其同计算机硬件(尤其是cpu构架)有关。目前常用的是IBM-PC计算机系列的80x86汇编语言。
广泛使用的,对汇编语言的源程序进行汇编的汇编程序为masm(Macro-Assembler,宏汇编)。

❺ 汇编语言常用指令

单片机汇编语言汇编错误原因分析

汇编语言的指令格式,目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM、NASM;而Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法;

一、汇编语言语句的通用格式

[名称[:]] 指令码 [第一操作数][,第二操作数] ;注释

汇编语言的指令码的操作数的个数可以是0、1、2个;当操作数的个数为2的时候,语句还有两种不同的格式:

Windows下Intel风格的汇编语言语句格式为:

[名称[:]] 指令码 目的操作数DST,源操作数SRC ;注释

Unix/Linux下AT&T风格的汇编语言语句格式为:

[名称[:]] 指令码 源操作数SRC,目的操作数DST ;注释

例如: CYCLE: ADD AX,02H ;(AX)汇编语言语句格式中的"名称"并不是所有语句都必需的,但是,如果语句中带有"名称",那么,大多数情况下,"名称"都表示的是内存中某一存储单元的地址,也就是"名称"后面各项在内存中存放的第一个存储单元的地址(包括该"名称"所在段的段地址和段内偏移地址);比如上面的指令中,CYCLE就是该语句的名称,CYCLE表示的就是其后面的机器指令码在内存中存放的第一个地址;"名称"与指令码之间的分隔符可以是冒号":",也可以是空格字符" ";当以冒号分割时,该名称代表的是一个标号;当以空格分割时,该名称代表的可能是标号,也可能是变量;当指令码有多个操作数的时候,相邻两个操作数之间要用逗号","分割;指令码与操作数之间必须以空格分割;汇编语言语句的注释必须以分号";"开头;

二、组成语句的元素

1、常数:

汇编语言中的常数有整数、字符串;二进制、八进制、十进制、十六进制;汇编语言采用不同的后缀区分:

B:二进制数; O:八进制数; D:十进制数; H:十六进制数;

当一个数值后面没有后缀的时候,默认为十进制数;

字符串常数是用一对单引号('')括起来的一串字符;

2、表达式:

由操作数和操作符组成;

算数运算操作符: +、-、*、/、MOD,等;取模运算MOD是取两数相除的余数;

逻辑运算操作符: AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(逻辑异或);

注意:逻辑运算符同时又可以是逻辑运算指令的指令码,只有当它们出现在指令的操作数部分时,才是操作符;例如:

ADD AL,0CH ADD 0FH ;第一个ADD是指令码,第二个ADD是操作符;

关系运算操作符: EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于);

汇编语言中的表达式不能单独构成语句,只能是语句的组成部分;

注意:语句中表达式的求值不是在语句执行时完成的,而是在对源程序进行汇编链接时完成的.所以,语句中各表达式的值必须在汇编或链接时就是确定的,也就是说,表达式中各标识符的值在汇编或链接时就应该是确定的;

3、标号:

标号是由标识符表示的指令的名称,用于指示对应指令的位置(地址);

标号具有三个属性:段地址、偏移地址和类型;

标号的段地址和偏移地址属性是指该标号所对应的指令所在段的段地址和段内偏移地址;

标号的类型有两种:NEAR和FAR;标号定义成NEAR类型,表示该标号在段内使用,而定义成FAR类型则表示该标号可以在段间使用;

标号的定义:在指令码前面加上标识符和冒号":";

例如:START: PUSH DS

这条语句里面,START就是我们定义的标号,它代表指令PUSH的地址,所以,标号可以作为程序转移指令的操作数(即:要转向的地址);标号还可以采用伪指令来定义;例如:用LABEL伪指令和过程定义伪指令来定义;

4、变量:

与高级语言一样,并不是所有的操作数都是常数,汇编语言也有自己的变量,变量的值在程序运行期间是可以被改变的;

A.定义变量:汇编语言中,变量的定义是通过伪指令来完成的;定义变量的伪指令格式如下:

变量名 DB 表达式 ;定义字节变量,又称单字节变量(1个连续字节),DB-->BYTE

变量名 DW 表达式 ;定义字变量,又称双字节变量(2个连续字节),DW-->WORD

变量名 DD 表达式 ;定义双字变量,又称四字节变量(4个连续字节),DD-->DWORD

变量名 DF 表达式 ;定义六字节变量,又称六字节变量(6个连续字节),DF-->FWORD

变量名 DQ 表达式 ;定义长字变量,又称八字节变量(8个连续字节),DQ-->QWORD

变量名 DT 表达式 ;定义十字节变量(10个连续字节),DT-->TBYTE;

其中,变量名是一个合法的标识符,变量名后面不能加冒号":",只能用空格;变量名不是必要的,可有可无;变量的类型由关键字DB、DW、DD、DQ、DT来定义;

变量定义语句中的"表达式"是用于对变量进行初始化的,可有一下几种情况:

(1).一个或多个常数或表达式;当为多个常数或表达式时,期间要用逗号隔开;如DATA1--DATA4;

(2).带单引号的字符串;

对于字节型(DB)变量,每个变量的大小为1个字节,每个变量的值不能超过1个字符,每个字节内存入一个字符的ASCII码值,整个字符串可以在同一对单引号内给出,这相当于是定义了一个字符数组,如DATA5;

对于字类型(DW)变量,每个变量的大小为2个字节,每个变量的值不能超过2个字符,若为2个字符时,同样遵循高位存入高字节,低位存入低字节的规则;若为1个字符,则该字符的ASCII码值存入到低字节,高字节为00,如DATA6;

对于双字类型(DD)变量,每个变量的大小为4个字节,每个变量的值不能超过2个字符,若为2个字符,同样遵循高位存入高字节,低位存入低字节的规则;但是2个字符的值被存入到双字变量的最低2个字节中,1个字符的值被存入到双字变量的最低1个字节中;

对于长字类型(DQ)变量,每个变量的大小为8个字节,每个变量的值不能超过2个字符,若为2个字符,同样遵循高位存入高字节,低位存入低字节的规则;但是2个字符的值被存入到长字变量的最低2个字节中,1个字符的值被存入到长字变量的最低1个字节中;

(3).一个问号"?",表示该变量的值不确定,即:该变量所表示的内存单元中的内容是不确定的,或者说是,当表达式为问号时,变量所对应的内存区中并没有存入新的值,而只是预留出了相应的存储空间;如DATA7、DATA8

(4).重复方式;此时的格式为: 重复次数 DUP(表达式);重复方式指出表达式的值可以重复地存储到变量对应的内存区中,重复的次数由伪指令给出,相当于定义数组;如DATA9、DATA10

定义变量的例子:

DATA1 DB 20H ;1字节变量

DATA2 DW 0204H,1000H ;2字节变量

DATA3 DB (-1*3),(15/3) ;1字节变量

DATA4 DD 123456H ;4字节变量

DATA5 DB '0123' ;字符串变量,相当于一个字符数组

DATA6 DW 'AB','C','D' ;字符串变量,相当于一个字符串数组;

DATA7 DB ? ;1字节变量,未初始化

DATA8 DD ? ;4字节变量,未初始化

DATA9 DB 5 DUP(0) ;1字节变量,用5个0初始化,相当于是一个具有5个DB型元素的数组

DATA10 DW 3 DUP(?) ;2字节变量,未初始化,相当于是一个具有3个DW型元素的数组

变量定义语句中伪指令的功能是在变量名所对应的地址开始的内存区依次存入表达式中的各项值,表达式中的每项值所占用内存字节数与变量的类型对应;

总结:一个变量的变量名实际上就代表了该变量所对应的内存区在内存段中的有效地址(偏移地址);高地址是指地址值相对较大,低地址是指地址值相对较小,高地址与低地址是相对而言的;

5、变量的属性:

(1).属性介绍

一个变量具有一下属性:

A.段地址(SEG):变量所在段的段地址;

B.偏移地址(OFFSET):变量所在段内的偏移地址;

C.类型(TYPE):变量的类型定义了每个变量所占用的内存字节数,对于DB、DW、DD、DQ、DT类型定义的变量所占用的内存字节数分别是1、2、4、8、10;通常又将DB、DW、DD类型所定义的变量分别成为BYTE类型、WORD类型、DWORD类型变量;

常用标识符的类型值列表:

标识符种类 字节变量 字变量 双字变量 近标号NEAR 远标号FAR

TYPE的值 1 2 4 -1 -2

D.长度(LENGTH):变量定义时,一个变量名所定义的变量个数;在含有DUP操作符的变量定义中,变量名所定义的变量个数为定义格式中的重复次数;在其它各种变量定义中,每个变量名所定义的变量个数均为1个;

E.大小(SIZE):变量定义语句中,分配给同一个变量名的所有变量的总的字节数,其值为该变量的类型与长度的成绩;

其中,段地址、偏移地址和类型属性是变量的主属性,而长度和大小属性是变量的辅助属性;

(2).属性操作符:

操作符 表达式 含义

SEG SEG 变量名或标号 取出变量名或标号所在段的段地址

OFFSET OFFSET 变量名或标号 取出变量名或标号所在段内的偏移地址

TYPE TYPE 变量名或标号 取出变量名或标号的类型(变量所占用的字节数)

LENGTH LENGTH 变量名 取出变量的长度

SIZE SIZE 变量名 取出变量的大小

这些操作符不能单独构成语句,只能作为表达式的组成部分,并且表达式的求值也是在汇编过程中完成的;

6.强制类型转换操作符PTR

格式:数据类型 PTR 地址表达式

格式中的"数据类型"可以是BYTE、WORD、DWORD、NEAR、FAR;前三种类型是变量的类型,后两种类型是标号的类型;格式中的表达式可以是变量、标号、其它地址表达式;

PTR操作符的功能是用来重新定义已定义的变量或标号的类型,其作用域只在当前语句中; 例如:

DATA1 DW 02H

MOV BYTE PTR DATA1,AL

这条指令中,是把DATA1的类型转换为BYTE类型,然后把AL中的内容存放到DATA1的最低一个字节中;作用域只在这条MOV语句中,过了这条语句,DATA1仍然是DW类型,即:DATA1原来的类型并没有被修改;

❻ 谁能教我一些常用的汇编语言

MOV Z,AX
POP AX
ENDM
形成加法宏定义ADDITION.同样,宏调用
DEFMAC SUBTRACT,SUB
形成减法的宏定义.当然在形成这些宏定义后,就可以使用宏调用
ADDITION VAR1,VAR2,VAR3
而展开成:
+ PUSH AX
+ MOV AX,VAR1
+ ADD AX,VAR2
+ MOV VAR3,AX
+ POP AX
10.这里再介绍一个宏定义的变元中使用的伪操作%,它的格式是:
%expression
汇编程序把跟在%之后的表达式的值转换成当前基数下的数,在展开期间,用这个数来取代哑元.
宏定义:
MSG MACRO COUNT,STRING
MSG&COUNT DB STRING
ENDM
ERRMSG MACRO TEXT
CNTR=CNTR+1
MSG % CNTR,TEXT
ENDM
宏调用:
...
CNTR=0
ERRMSG 'SYNTAX ERROR'
...
ERRMSG 'INVALID OPERAND'
...
宏展开:
...
+ MSG1 DB 'SYNTAX ERROR'
...
+ MSG2 DB 'INVALID OPERAND'
...

❼ 汇编语言的编程方法

题目:a=1+2

mov a,#01h
add a,#02h

hehe!
能看懂吗?

如何学好汇编语言

AX BX DX CX 分别是 四个寄存器

基址寄存器 bx,bp
变址寄存器 si,di

所有的寻址方式如下:
立即寻址 mov ax,常数
直接寻址 mov ax,[地址(常数)]
寄存器寻址 mov ax,通用寄存器
寄存器间接寻址 mov ax,[(bx,bp,si,di)中的一个]
寄存器相对接寻址 mov ax,[(bx,bp,si,di)+偏移量]
基址变址寻址 mov ax,[基址寄存器+变址寄存器]
相对基址变址寻址 mov ax,[基址寄存器+变址寄存器+偏移量]

要想学好汇编还是要靠自己努力的,得花大量的课余时间在电脑上练习,不然老师讲的在清楚,资料再全,也没用的。而学习的动力在于兴趣,兴趣的产生在于培养。

❾ 汇编语言怎么学啊

你用做题目,然后在做题目过程中不懂的就看书,书是大概看一遍就去做题目,不要老想着把书完全弄懂,通过做题目也可以帮助你理解的,我前一年学了汇编,100分制,我考了个70多分,反正我就是用这个方法,不知道对你有没有用,其实汇编该记的还是要背哦

❿ 常用汇编语言的通俗解释!!

掌握汇编语言是有点难度的,首先很敬佩你的勇气,我N年前初中时代也是跟你的情况一样,学习了很长时间,现在终于可以指点一下好学的同学。

就你出的问题是一个MCS-51系列的单片机数据存储指令:

MOV是英文MOVE(移动)的简写。30H是一个RAM存储单元的地址,
MOV 30H,#16H 的意思是把一个数值(16H的十进制数等于 22)
放在内存单元30H中。立即数是指纯数值量,指令编译成可运行程序时与MOV指令放在一起,CPU不用到别的地方取数。

飞娥软件技术交流平台-汇编教程专集:
地址:
8086/8088汇编语言教程(8-16位编程)经典16位汇编语言教程:www.Feiesoft.com/asm
8086/8088汇编语言指令教程:www.Feiesoft.com/cmd/asm
win32汇编语言指令教程:www.feiesoft.com/cmd/win32asm
Masm32汇编语言参考:www.feiesoft.com/masm32
Windows32位汇编语言教程:www.feiesoft.com/win32asm
MCS-51单片机教程: www.Feiesoft.com/mcs51

阅读全文

与常用汇编方法相关的资料

热点内容
idea如何打包没有main方法的包 浏览:158
手机桌面免费下载方法 浏览:202
素描拉线正确方法 浏览:63
吉林进口疏通器使用方法视频 浏览:594
爱玛电动车喇叭按钮安装方法 浏览:429
查电脑配置方法 浏览:463
抛长竿的正确使用方法 浏览:172
最简单的赠品引流方法 浏览:519
工字的研究方法 浏览:745
练习钢琴的训练方法 浏览:266
过敏有哪些方法皮肤 浏览:272
辨音连读的方法和技巧 浏览:358
速度环检测速度的方法 浏览:915
家庭常用的消毒方法有含氯含醇 浏览:542
纸币怎么折简单的方法 浏览:496
走错车道解决方法 浏览:698
单位小批量生产常用哪些方法 浏览:256
小米屏幕乱跳解决方法 浏览:822
鱼线轮的种类及其使用方法 浏览:386
金华婚姻修复方法操作步骤 浏览:347