汇编语言程序设计第四章 汇编语言程序格式
4第四章 ARM汇编语言程序设计

2、 DCD(或DCDU,DCD也可用“&”代替) DCD( DCDU,DCD也可用“ 代替) 也可用 代替
语法格式: 语法格式:
标号
DCD( DCDU) DCD(或DCDU)
表达式
DCD( DCDU) DCD ( 或 DCDU ) 伪指令用于分配一片连续 的字存储单元并用伪指令中指定的表达式初 始化。 其中, 始化 。 其中 , 表达式可以为程序标号或数字 表达式。 表达式。 DCD分配的字存储单元是字对齐的 分配的字存储单元是字对齐的, 用DCD分配的字存储单元是字对齐的,而 DCDU分配的字存储单元并不严格字对齐 分配的字存储单元并不严格字对齐。 用DCDU分配的字存储单元并不严格字对齐。
使用示例: 使用示例:
DataTest DCD 4,5,6 ; 分 配 一 片连续的字存储单元并初始化。 片连续的字存储单元并初始化。
SPACE(SPACE也可用 也可用“ 代替) 3、 SPACE(SPACE也可用“%”代替)
语法格式: 语法格式:
标号
SPACE
表达式
SPACE伪指令用于分配一片连续 SPACE伪指令用于分配一片连续 的存储区域并初始化为0 其中, 的存储区域并初始化为 0 。 其中 , 表 达式为要分配的字节数。 达式为要分配的字节数。
1、 GBLA、GBLL和GBLS
语法格式: 语法格式: GBLA(GBLL或GBLS) 全局变量名
GBLA、GBLL和GBLS伪指令用于定义一个 、 伪指令用于定义一个ARM程 和 伪指令用于定义一个 程 序中的全局变量,并将其初始化。 序中的全局变量,并将其初始化。 GBLA伪指令用于定义一个全局的数字变量, 并初始 伪指令用于定义一个全局的数字变量, 伪指令用于定义一个全局的数字变量 化为0; 化为 ; GBLL伪指令用于定义一个全局的逻辑变量, 并初始 伪指令用于定义一个全局的逻辑变量, 伪指令用于定义一个全局的逻辑变量 化为F( 化为 (假); GBLS伪指令用于定义一个全局的字符串变量 , 并初 伪指令用于定义一个全局的字符串变量, 伪指令用于定义一个全局的字符串变量 始化为空; 始化为空;
汇编语言设计实践:第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
二、伪指令语句
伪指令语句又叫命令语句。 伪指令本身并不产生对应的机器目标代码。它仅 仅是告诉汇编程序对其后面的指令语句和伪指令 语句的操作数应该如何处理。
汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。
汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
第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)
第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
第四章 汇编语言程序格式

.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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例: 操作数可以是常数,或者
0 A 10d
04
4
表达式(根据表达式可以求得一 个常数),如
1 0 10h
6 4 100d 00
DATA_BYTE DB 10,4,10H DATA_WORD DW 100,100H,-5
0 0 100h 01
F B -5 FF
DATA_DW
DD 3*20,0FFFDH 3 C
6
4)经DEBUG的调试
7
8
9
伪操作
又称伪指令: 是在汇编期间由汇编程序处理的操作 不是机器指令,不是程序运行时执行的 主要完成数据定义、分配内存、程序框
架定义、指示程序结束等功能 相似于高级语言的指示性语句
10
4.2.1 数据定义及存储器分配伪操作
格式:[变量名] Mnemonic Oprand,…Oprand[;Comments] 操作数(Oprand)把数据放入指定的单元
14
可以用DW或DD伪操作把变量或标号的偏移地址 (DW)或整个地址(DD)存入存储器。 用DD操作存入地址时:
第一个字为偏移地址,第二个字为段地址。
例: PARAMETER_TABLE DW PAR1 DW PAR2 DW PAR3 INTERSEG_DATA DD DATA1 DD DATA2
start:
;starting execution address
;set up stack for return
push ds
;save old data segment
sub ax,ax
;put zero in AX
push ax
;save it on stack
;set DS register to current
第四章 汇编语言程序格式
4.1汇编程序功能
汇编语言程序的建立及汇编过程:
编辑程序
EDIT.exe Notepad. exe
PROGR.ASM 文件
汇编程序
PROGR.OBJ 文件
MASM.exe
连接程序
LINK.exe
EXE程序还需经DEBUG的调试
PROGR.EXE 文件
1
在计算机上运行汇编语言程序的步骤是:
;set DF flag to forward
mov c
rep movsb
;move entire string
ret
;return to DOS
main endp
;end of main part of program
;----------------------------------------------------
0 0 60d
00
汇编程序在汇编期间在存储器中
00
存入数据,如图所示
FD
F F 0FFFDh 00
00
12
例 :操作数也可以是字符串,如: MESSAGE DB ‘HELLO’
例:DATA DW ‘AB’, ‘CD’
注意:1、不能写为 DW ’ABCD‘ 2、用DB与DW来定义字符串的区别
例 :操作数?可以保留存储空间,但不存入数据。 如: ABC DB 0,?,?,?,0 DFF DW ?,52,?
3
;MAIN PART OF PROGRAM GOES HERE
lea si,source_buffer ;put offset addr of source buffer in SI
lea di,dest_buffer ;put offset addr of dest buffer in DI
cld
extra ends
2
code segment
;define code segment
;----------------------------------------------------
main proc far
;main part of program
assume cs: code, ds: data, es: extra
;define data segment
source_buffer db 40 dup('a')
data ends
;****************************************************
extra segment
;define extra segment
dest_buffer db 40 dup(?)
助记符(Mnemonic)字段说明所用伪操作的数据类型,常用的 有以下几种: DB: 字节(8位) DW: 字(16位) DD: 双字(32位) DQ: 四个字(64位),存放双精度浮点数。 DT: 十个字节,形成压缩的BCD码。
11
数据定义伪操作:把数据存入存储单元;分配空间; DW和DD可存储偏移地址或完整的地址。
mov ax,data
;data segment addr
mov ds,ax
;into DS register
;set ES register to current extra segment
mov ax,extra
;extra segment addr
mov es,ax
;into ES register
13
操作数可以使用复制操作符来复制某个操作数。 其格式为:
repeat_count DUP(operand,……operand)
repeat_count:可以是一个表达式,它的值应该 是一个正整数,用来指定括号中的操作数的重复次数。
例:ARRAY1 DB 100 DUP(?)
例 :DUP操作可以嵌套, ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3)
code ends
;end of code segment
;****************************************************
end start
;end of assembly
4
2)用MASM程序把ASM文件转换成OBJ文件;
5
3)用LINK程序把OBJ文件转换成EXE文件;
1)用编辑程序建立源文件: ex_movs.asm
;例:把40个字母a的字符串从源缓冲区传送到目的缓冲区。
;PROGRAM TITLE GOES HERE-ex-movs
;****************************************************
data segment