汇编语言格式

合集下载

汇编语言

汇编语言

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

用汇编语言按着规定的语法规则编写的程序称为汇编语言源程序(*.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定义,各段顺序任意,段的数目按需要确定,原则上不受限制。

汇编语言设计实践:第4部分 基本汇编语言

汇编语言设计实践:第4部分 基本汇编语言
第四章 基本汇编语言
4.1 汇编语言语句种类及其格式
汇编语言的程序格式
• 完整的汇编语言源程序由段组成,段由指令语句与 伪指令语句构成
• 一个汇编语言源程序可以包含若干个代码段、数据 段、附加段或堆栈段,段与段之间的顺序可随意排 列
• 需独立运行的程序必须包含一个代码段,并指示程 序执行的起始点,一个程序只有一个起始点
• 所有的指令语句必须位于某一个代码段内,伪指令 语句可根据需要位于任一段内或段外
汇编语言的语句可以分为指令语句和伪指令语句
•指令语句——产生使CPU产生动作、可供机器
执行的机器目标代码
•伪指令语句——不产生CPU动作、在程序执行
前由汇编程序处理的说明性语句,例如,数据说明、 变量定义等等
2
一、指令语句
每一条指令语句在汇编时都要产生一个可供CPU执 行的机器目标代码,它又叫可执行语句。
指令语句的一般格式为: 标号 : 操作码
, 操作数
; 注释
一条指令语句最多可以包含4个字段 例 L1:MOV AH,0A0H ;将0A0H放入AH
3
1.标号字段
标号是可选字段,它后面必须有“:”。标号是一条 指令的符号地址,代表了该指令的第一个字节存放 地址。
注释字段可以是一条指令的后面部分,也可以是 整个语句行。
例:
LABEL1: ADD AX,BX; 功能为AX<=(AX)+(BX)
;后面的程序段将完成两次对存储器的访问
MOV AX, W_VAR1
MOV W_VAR2, AX
7
二、伪指令语句
伪指令语句又叫命令语句。 伪指令本身并不产生对应的机器目标代码。它仅 仅是告诉汇编程序对其后面的指令语句和伪指令 语句的操作数应该如何处理。

Linux 汇编语言开发指南

Linux 汇编语言开发指南

二、Linux 汇编语法格式绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的。

但在 Unix 和 Linux 系统中,更多采用的还是 AT&T 格式,两者在语法格式上有着很大的不同:1.在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。

例如:2.在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。

例如:3.AT&T 和 Intel 格式中的源操作数和目标操作数的位置正好相反。

在Intel 汇编格式中,目标操作数在源操作数的左边;而在 AT&T 汇编格式中,目标操作数在源操作数的右边。

例如:4.在 AT&T 汇编格式中,操作数的字长由操作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示操作数为字节(byte,8 比特)、字(word,16 比特)和长字(long,32比特);而在 Intel 汇编格式中,操作数的字长是用 "byte ptr" 和 "word ptr" 等前缀来表示的。

例如:5.在 AT&T 汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上'*'作为前缀,而在 Intel 格式中则不需要。

6.远程转移指令和远程子调用指令的操作码,在 AT&T 汇编格式中为"ljump" 和 "lcall",而在 Intel 汇编格式中则为 "jmp far" 和 "call far",即:7.与之相应的远程返回指令则为:8.在 AT&T 汇编格式中,内存操作数的寻址方式是section:disp(base, index, scale)而在 Intel 汇编格式中,内存操作数的寻址方式为:section:[base + index*scale + disp]由于 Linux 工作在保护模式下,用的是 32 位线性地址,所以在计算地址时不用考虑段基址和偏移量,而是采用如下的地址计算方法:disp + base + index * scale下面是一些内存操作数的例子:三、Hello World!真不知道打破这个传统会带来什么样的后果,但既然所有程序设计语言的第一个例子都是在屏幕上打印一个字符串 "Hello World!",那我们也以这种方式来开始介绍 Linux 下的汇编语言程序设计。

第4章 汇编语言程序设计

第4章  汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)

ARM汇编语言的语法知识

ARM汇编语言的语法知识
指令执行的条件码 加载的目标寄存器 地址表达式
地址表达式expr的取值范围: 当地址值不是字对齐时,其取值范围为-64K~64K; 当地址值是字对齐时,其取值范围为-256K~256K; 当地址值是16字节对齐时,其取值范围将更大; 该地址必须与ADRL伪指令在同一个代码段中 .
• ARM伪指令——大范围的地址读取
指令执行的条件码 加载的目标寄存器 地址表达式
地址表达式expr的取值范围: 当地址值不是字对齐时,其取值范围为-255~255字节; 当地址值是字对齐时,其取值范围为-1020~1020字节; 当地址值是16字节对齐时,其取值范围将更大; 该地址必须与ADR伪指令在同一个代码段中.
• ARM伪指令——中等范围的地址读取
;单元,并初始化为0
• ARM汇编语言伪指令----数据定义伪操作
MAP MAP用于定义一个结构化的内存表的首地址.此时,内存 表的位置计数器设置成该地址值.该伪操作可以用"^"代替.
MAP伪操作举例
LTORG伪操作通常放在无条件跳转指令之后,或者子程
序返回指令之后,这样处理器就不会错误地将数据池中的
数据当做指令来执行.
用LTORG伪指令定义数据缓冲池举例
Funel
;子程序
LDR R1, =0x8000;将0x8000加载到R1
MOV PC, LR
LTORG
;定义数据缓冲池,存放0x8000
Data SPACE 40 ;从当前位置开始分配40字节的内存
使用示例:
height DN width SN lower FN
6 ;将VFP双精度寄存器6名称定义为height 16 ;将VFP单精度寄存器16名称定义为width 6 ;将浮点寄存器6名称定义为lower

第四章 汇编语言程序格式

第四章 汇编语言程序格式

.model small .data …… .code start: mov ax, @data mov ds, ax …… mov ax, 4c00h int 21h end start
9
段组定义伪操作
dseg1 dseg1 dseg2 dseg2 segment …… ends segment …… ends word public ‘data’
DATA_BYTE DATA_WORD
DB DW
10,4,10H,? 100,100H,-5,?
14
ARRAY
DB DB DW
‘HELLO’ ‘AB’ ‘AB’
ARRAY
48H 45H 4CH
4CH
4FH 41H 42H 42H 41H
PAR1 PAR2 ADDR_TABLE
DW DW DW
100,200 300,400 PAR1,PAR2
.STARTUP .EXIT [ return_value ]
13
数据定义及存储器分配伪操作:
[变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释] 助记符:DB DW DD DF DQ DT
DATA_BYTE 0AH 04H
10H
DATA_WORD 64H 00H 00H 01H FBH FFH -
12 ; (bx)=0 ; (bx)=2 ; (bx)=2
?
datagroup group data1,data2
code segment assume cs:code, ds:datagroup
; (bx)=0
程序开始和结束伪操作:
TITLE text
NAME module_name

汇编语言学习第4章

汇编语言学习第4章

不同而不同。
(名字项,常称为标号) 标号是程序设计人员自己定义的表示符号,用来表示本语句的符号地址
(即该指令的偏移地址,也就是该单元与其所处段基址的偏移量)是可有
可无的,只有当需要用符号地址来访问该语句时才需要。 2.operation(操作符)
操作符项可以是指令、伪操作或宏指令的助记符。对于指令,作用是指出
1.等价语句EQU
等价语句的一般使用格式如下: SYMBOL EQU EXPRESSION
作用是用左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名, 也不能被重新定义。
(1)用符号名代表常量或表达式
例4.14 (2)用符号名代表字符串 例4.15 (3)用符号名代表关键字或指令助记符 例4.16
例4.21
2.定义字变量的伪指令为DW
一个变量占一个字空间
例4.22:WORD1 DW DW 89H, 1909H, -1 0ABCDH, ?, 0
上面的定义语句经汇编后所产生出的内存单元分配情况如下:
… 89 00 09 19 FF FF CD AB --00 00 …
例4.23
3.双字变量定义伪指令DD 每个双字变量占用二个连续的字单元(四个字节)。
功能和作用,而不应该只写出指令的动作。
4.2运算符号
4.2.1算术运算符
算术运算符有:+、-、*、/和MOD。 其中: +、-、*、/就是我们算术中常用的加、减、乘、除。 MOD算符是模运算。指除法运算后得到的余数。 例如:5 MOD 2为1。 注意:算术运算符可以用于数字表达式或地址表达式中,但当它用于地址 表达式时,只有当其结果有明确的物理意义时才是有效的。 例如:将两个地址相乘或相除是无意义的。地址可以做加减运算,但也必 须注意物理意义。例如把两个不同段的地址相加减也是无意义的。 例4.1 例4.2

8086汇编语言语句的类型和格式

8086汇编语言语句的类型和格式
表达式中常用的运算符有以下几种:
⑴ 算术运算符:+、-、*、/和取模运算。
⑵ 逻辑运算符:、、和。
⑶ 关系运算符:、、、、、。结果只有两个全 1或全0。
⑷ 分析运算符:利用分析运算符可以把一个存 储单元地址分解为段地址和偏移地址等。分析运算符 有 、 、、和等。
分析运算符表达式
带分析运算符的表达式
: ,2[] ;取一个字节加数 1 0F8H,60H,0,74H,3 ;被加数 第一条语句是指令语句,其中“:”是名字,“”是指令助记符, “,2[]”是操作数,“;”后面是注释部分;第二条语句是伪指 令语句,其中“1”是名字,“”是伪指令定义符,“0F8H, 60H,0,74H,3”是操作数,“;”后面是注释部分。
⑵ 定义变量的类型为,给变量分配字操作数。
⑶ 定义变量的类型为,给变量分配双字操作 数。
除了常数、表达式和字符串外,问号“?”也 可以作为数据定义伪指令的操作数,此时仅给变量保 留相应的存储单元,而不赋与变量某个确定的初值。
当同样的操作数重复多次时,可用重复操作符 “”表示,其形式为:
n (初值[,初值…0])
1) 名字
汇编语言语句的第一个组成部分是名字()。在指令语句 中,这个名字是一个标号。指令语句中的标号实质上是指“:”后 面指令所在的存储地址(逻辑地址)。供、和等指令作操作数使用, 以寻找转移目标地址。并非每条指令语句必须有标号,但如果 一条指令前面有一标号,则程序中其它地方就可以引用这个标 号。在例5.1中,、就是标号。标号后面有一个冒号。
• , K3
;()←20H,返回前面的数值
• , K4
;()←01H
• , K3
;()←40H
• , K4
;()←04H
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AL, BUF1
ADD AL, BUF2
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2
11.3.2 汇编语言源程序上机过程
源程序 汇编 目标程序 连接 可执行程序 .asm masm .obj link .exe
04:22
13
操作数为字符串
STRING1 DB ‘HELLO’
STRING2 DB ‘H’, ‘E’, ‘L’, ‘L’, ‘O’ 字符串用DB定义,被定义串以单引号括起来
串中可包含数字符、大小写英文字母、回车符、 换行符、 空格、?、$、下划线_ 等
字符串以ASCII码形式存储在存储单元中。
STRING1 ‘H’ +1 ‘E’ +2 ‘L’ +3 ‘L’ +4 ‘O’
NEAR (近) 段内转移 FAR (远) 段间转移
04:22
9
11.3.4 伪指令
➢ 处理器选择伪指令 ➢ 数据定义和存储器分配伪指令 ➢ 段定义伪指令 ➢ 程序开始和结束伪指令 ➢ 表达式赋值伪指令 ➢ 地址计数器与对准伪指令 ➢ 基数控制伪指令
04:22
10
(一)处理器选择伪指令
.8086 .286 .286P .386 .386P .486 .486P .586 .586P
1、段属性——变量所在段的起始地址 2、偏移属性——从段起始地址到定义变量的位置之间的字节数 3、类型属性——该变量所保留的字节数
DB 1个字节 DW 2 个字节 DD 4个字节 DQ 8个字节 DT 10个字节
04:22
8
标号也有三种属性:
1、段属性——定义标号所在段的起始地址 2、偏移属性——从段起始地址到定义标号的位置之间的字节数 3、类型属性——表示它的转移特性
04:22
11
(二)数据定义伪指令
格式:[变量名] 定义符 操作数项表 操作:为变量分配存储单元并将初值置入相应单元中
定义符可为:
DB—— 定义字节 DW ——定义字(2个字节) DD——定义双字(4个字节) DF——定义六字节 DQ——定义八字节 DT——定义十字节
操作数项表可为:
1、常数或表达式 2、字符串 3、?表达式 4、带DUP 的表达式
2、字符串常量 用单引号括起来的一个或多个字符,如‘A’、’AB’ 字符用ASCII码形式存储
常量的应用:
(1)在指令语句中作立即数 MOV CX, 100 (2)在指令语句中作位移量 MOV AX, 34[SI] (3)在数据定义语句中作初值 X DB 12H, 34H
04:22
7
变量和标号
变量有三种属性:
11.3.1 源程序结构概览
数据段 说明:
堆栈段 1、各段顺序无关 2、除代码段外,可缺省 3、可有若干个数据段, 若干代码段
代码段 附加段
END [标号]
04:22
1
汇编语言程序例
04:22
DATA SEGMENT
BUF1 DB 34H
BUF2 DB 2AH
SUM DB ?
DATA ENDS
CODE SEGMENT
[标号:]指令助记符[[目的操作数][,源操作数]][;注释] 其中,[ ]表示可选项;
1、标号
标号是后续指令的符号名称,可用符号是:
字母:A--Z, a--z
数字符: 0--9
专用字符:?, _, @, $
标号长度不超过31个字符
2、指令助记符 指令助记符是汇编指令的符号代码,不可缺省。
汇编源程序时,系统使用内部对照表将每条指令的 助记符译成相应的机器码。
选择8086指令系统(一般不用写) 选择80286指令系统 选择保护方式下的80286指令系统 选择80386指令系统 选择保护方式下的80386指令系统 选择80486指令系统 选择保护方式下的80486指令系统 选择Pentium指令系统 选择保护方式下Pentium的指令系统
当源程序使用了286及以上的机型新增加的指令时,应该在程序开始使用相应的 处理器选择伪指令。
04:22
12
操作数是常数或表达式 X1 DB 40H ;为X1分配1个字节,初值40H
X2 DW 250*250 ;为X2分配2个字节,初值62500
X3 DD 10203040H ;为X3分配4个字节,初值为10203040H
X4 DQ (120+50)/10 ;为X4分配8个字节,初值17
X5 DB 10, 20, 30 ;多项定义,X5被分配3个字节,初值分别为10,20,30,地址 从低到高,各个值间用逗号分开
04:22
14
区分 S1 DB ‘AB’ 与 S2 DW ‘AB’
它们的存储情况为:
S1 ‘A’ ‘B’
S2 ‘B’ ‘A’
操作数项为?
?用于预留空间,不置初值
Y1 DB 2留2个字
Y3 DD ? ;预留4个字节
Y4 DQ ? ;预留8个字节
Y5 DT ?
;预留10个字节
04:22
15
操作数项带重复定义符DUP
格式: N DUP(操作数项表) 操作:以N所示次数定义操作数项表内容 VAR1 DW 2 DUP(2, 4), 1476H
VAR2 DB 2 DUP(?, 2 DUP(‘A’, ‘B’) ) 存储情况为:
04:22
5
3、目的操作数 1)参与指令操作 2)暂存操作结果
除立即寻址方式外,其他寻址方式均适用于目的操作数.
4、源操作数
提供原始数据或操作对象,面向所有寻址方式
5、注释
注释在系统汇编时并不产生机器码 注释可以放在指令语句尾,也可单独使用 注释前面的“;”不可缺少
04:22
6
常量
常量有两种:
1、数值常量 二进制数 以B结尾,如01011101B 八进制数 以Q结尾,如235Q 十进制数 以D结尾或没有结尾字母,如98D或98 十六进制数 以H结尾,如5BH
结果
执行
debug
DOS下执行
04:22
3
11.3.3 汇编语言语句格式
有三类语句: 指令语句——完成操作功能,能翻译成机器代码 伪指令语句——为汇编程序在翻译源程序时提供
有关信息 宏指令语句——由若干条指令语句组成的语句
通用语句格式: [名字] 操作项 [操作数] [;注释]
04:22
4
指令语句格式
相关文档
最新文档