第四章汇编工具

合集下载

第4章 汇编语言程序设计习题解答

第4章 汇编语言程序设计习题解答

习题4.10 习题
• 下面程序段是实现从键盘输入十个一位 进制数后 下面程序段是实现从键盘输入十个一位10进制数后 累加,最后累加和以非压缩BCD码形式存放在 码形式存放在AH 累加,最后累加和以非压缩 码形式存放在 高位) 低位) (高位)和AL (低位)中。试把程序段中所空缺 的指令填上。 的指令填上。 XOR BX ,BX ;BX清零 清零 MOV CX,10 ; 传送数据长度 LOP:MOV AH,01H;中断 中断INT 21H的01H号调用 中断 的 号调用 INT 21H ;中断调用 中断调用P172, 键入值送入 中 键入值送入AL中 中断调用 MOV AH,BH ;将BH的内容传 的内容传AH 将 的内容传 ADD AL,BL ;BL与AL的值相加 结果在 中 的值相加,结果在 与 的值相加 结果在AL中 AAA ;非压缩 非压缩BCD码加法调整 非压缩 码加法调整 MOV BX,AX ;累加结果送 累加结果送BX 累加结果送 LOOP LOP ;CX-1→CX,判断 判断CX≠0,下列要求在数据段中依次书写各数据定义语句: 试按下列要求在数据段中依次书写各数据定义语句: 为首字节的连续存储单元中存放20H个重 (1)以DA1为首字节的连续存储单元中存放 ) 为首字节的连续存储单元中存放 个重 复的数据序列: , , 个 ,一个7。 复的数据序列:2,3,10个4,一个 。 为字符串变量, (2)DA2为字符串变量,用字变量(DW)设置一字 ) 为字符串变量 用字变量( ) 符串; 符串;‘STUDENTS’(按次顺序存放在各单元中)。 (按次顺序存放在各单元中)。 赋值以DA1为首地址 (3)用等值语句给符号 )用等值语句给符号COUNT赋值以 赋值以 为首地址 的数据区共占有的字节数, 的数据区共占有的字节数,此等值语句必须放在最 后一语句。 后一语句。 解答: 解答: ),7) (1)DA1 DB 20H DUP(2,3,10 DUP(4), ) ) ( , , ( ), (2)DA2 DW ‘TS’, ‘DU’,‘NE’,’ST’, ) , , , , (3) COUNT EQU DA2- DA1 )

汇编语言设计实践:第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
二、伪指令语句
伪指令语句又叫命令语句。 伪指令本身并不产生对应的机器目标代码。它仅 仅是告诉汇编程序对其后面的指令语句和伪指令 语句的操作数应该如何处理。

汇编语言 第四章 汇编语言

汇编语言 第四章 汇编语言

4.1.4 特殊运算符
1.属性替换运算符
(3)短取代运算符SHORT 告诉汇编程序,目标标号在本条指令的 -128~+127 个字节的范 围内,生成节省一个字节的机器指令。一般情况下可以不用。 例如: JMP SHORT NEXTBRACH … NEXTBRACH: MOV EAX,ECX

4.1.4 特殊运算符

4.1.4 特殊运算符
1.属性替换运算符
(2)段地址取代运算符“:” 又称为段地址运算或者跨段前缀。用于临时给定变量,标号或 者地址表达式指定一个段属性,地址表达式EA和类型保持不变。在 指令中替代默认的段以形成物理地址。 例如: MOV DX,ES:[BX + DI];EA = BX +DI,PA =ES ;*16 + EA,临时替换默认的DS

4.1.4 特殊运算符
2.属性分离运算符
TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变 量的类型对应字节数;如果是标号,则返回代表标号类型的数值。 MOV CL,TYPE ARRAYW ;若变量ARRAYW为字类型,则CL=2
4.1.4 特殊运算符
(1)LENGTH运算符 功能:当变量由数据定义伪指令定义,并且表达式带有一个DUP项 时,LENGTH取DUP项前面的重复系数;如果表达式有多个DUP项 嵌套时,仍然取第一个DUP项前的数字,LENGTH变量的取值为1. DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 4,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX

第四章 汇编语言程序设计

第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),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.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

第4章 汇编 语言程序设计

第4章  汇编 语言程序设计

DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处 NOP
HERE:SJMP
HERE
上述4个字段应该遵守的基本语法规则如下。
10
1.标号字段
语句所在地址的标志符号,才能被访问。如标号 “START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由1~8个ASCII码字符组成,第一个字符必须是
8
汇编语言语句是符合典型的汇编语言的四分段格式:
标号字段 (LABLE) 操作码字段 (OPCODE) 操作数字段 (OPRAND) 注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔;
操作数字段和注释字段之间的分界符用分号“;”。
表示的机器语言程序,才能识别和执行。
完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得 到的以“0”、“1”代码形式表示的机器语言程序称为目标 程序。
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。 2.高级语言
功能是把P1.6的位地址赋给变量QA。
4.2
汇编语言源程序的汇编
“汇编”?汇编可分为手工汇编和机器汇编两类。
22
4.2.1
手工汇编
通过查指令的机器代码表(表3-2),逐个把助记符指令 “翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出 错,只有小程序或受条件限制时才使用。实际中,多采用“ 汇 编程序”来自动完成汇编。
16
重叠。例如:
ORG …… ORG …… ORG …… 2000H 2500H 3000H

第四章 汇编语言程序格式

第四章 汇编语言程序格式

.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章汇编语言程序设计
将汇编语言程序汇编成目标程序后,还要进行 调试,排除程序中的错误。只有通过上机调试并得 出正确结果的程序,才能认为是正确的程序。
4.2 伪指令
伪指令是在机器汇编中告诉汇编程序 如何汇编、对汇编过程进行控制的命令。 伪指令与汇编语言指令不同,只在源程序 中出现,不产生任何机器代码,在程序的 运行过程中不起作用,故称为“伪指令”。
处理 判断 连接
2.绘制程序流程图 简单的问题可由文字说明, 当问题复杂时,将文字说明的步骤以图形符号表示, 称流程图。
3.编写源程序 用汇编语言把流程图所表明的 步骤描述出来,实现流程图中每一框内的要求,从 而编制出一个有序的指令流,即汇编语言源程序。
4.汇编、调试 汇编语言是用指令助记符代替机 器码的编程语言,所编写的程序是不能在计算机上 直接执行的,因此利用它所编写的汇编语言程序必 须转换为单片机能执行的机器码形式的目标程序才 能运行,我们把这一过程称为汇编,进行汇编的程 序称为汇编程序。
4. 定义字伪指令DW
[标号:] DW 16位字数据表
该指令的功能与DB相似, 区别仅在于从指定地
址开始存放的是指令中的16位数据, 而不是字节串。
每个16位数据要占两个存储单元, 高8 位先存(低位
地址), 低 8 位后存(高位地址)。
1403H 3CH
ORG 1400H DATA1:DW 324AH,3CH
散转程序是分支程序的一种, 它可根据运算结果或输入数 据将程序转入不同的分支。MCS - 51 指令系统中有一条跳转指 令JMP@A+DPTR,用它可以很容易地实现散转功能。该指令 把累加器的8位无符号数与16位数据指针的内容相加, 并把相加 的结果装入程序计数器PC,控制程序转向目标地址去执行。

汇编语言学习第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

第四章汇编语言语法

第四章汇编语言语法

LABEL FAR MOV AX,[SI] ,
3、段定义伪指令语句 、 SEGMENT…ENDS (1)段结构定义伪指令语句 SEGMENT ENDS 指令格式: 指令格式: 段名 逻辑段内容 段名 ENDS SEGMENT 定位类型 组合类型 分类名’ ‘ 分类名 ’
功能:将一个逻辑段的内容定义成一个整体。 功能:将一个逻辑段的内容定义成一个整体。 4种定位类型:PARA、BYTE、WORD和PAGE 种定位类型:PARA、BYTE、WORD和 6种组合类型:NONE、PUBLIC、COMMON、AT、STACK和MEMORY 种组合类型:NONE、PUBLIC、COMMON、AT、STACK和 (2)段分配伪指令语句 指令格式: CS:段名,DS:段名,SS:段名,ES: 指令格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名 功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系。 功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系。
1、数据定义伪指令语句 共有五条: DB、 DW、 DD、 DQ和 DT, 分别用来定义字节、 共有五条 : DB 、 DW 、 DD 、 DQ 和 DT , 分别用来定义字节 、 字 、 双 字、8字节和10字节。 字节和10字节。 10字节 指令格式: 指令格式:
变量名 变量名 助记符 助记符 操作数1 操作数2 操作数n 操作数1,操作数2,……操作数n 操作数 n ;注释 DUP(操作数1 操作数2 操作数n DUP(操作数1,操作数2,……操作数n) ;注释 操作数
第4章 汇编语言语法和 章 汇编语言语法和DOS功能调用 功能调用
4.1 汇编语言程序的格式 例4-1 试求小于100的所有非零偶数,并把结果存入以BUFF开始 的内存区。 1 2 3 4 5 MY_DATA SEGMENT BUFF DB 50 DUP(?) MY_DATA ENDS MY_CODE SEGMENT ASSUME CS:MY_CODE, DS: MY_DATA 6 START: MOV AX, MY_DATA 7 MOV DS, AX ; 定义数据段 ; 设置缓冲区 ; 定义数据段结束 ; 定义代码段 ; 规定CS和DS的内容 ; DS初始化为MY_DATA

第四章:8086汇编语言程序设计

第四章:8086汇编语言程序设计

第 4章
汇编语言程序设计
汇编语言程序设计
(2)尽量采用循环结构和子程序 (2)尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、 采用循环结构和子程序可以使程序的长度减少、 占用内存空间减少。 占用内存空间减少。 多重循环,注意各重循环的初值和循环结束条件, 多重循环,注意各重循环的初值和循环结束条件, 死循环”现象; 避免出现 “死循环”现象; 通用的子程序, 通用的子程序,除了用于存放子程序入口参数的寄 存器外, 存器外,子程序中用到的其它寄存器的内容应压入堆栈 进行现场保护, 进行现场保护,并要特别注意堆栈操作的压入和弹出的 平衡; 平衡; 中断处理子程序除了要保护程序中用到的寄存器外, 中断处理子程序除了要保护程序中用到的寄存器外, 还应保护标志寄存器。 还应保护标志寄存器。
1、汇编语言的语句格式
汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言一般由四部分组成。 汇编语言一般由四部分组成。
其典型的汇编语句格式: 其典型的汇编语句格式: 标号: 标号:操作码
例如: 例如: START: START:MOV AL,30H AL,30H ;(AL)=30H (AL)=30H 30
第 4章
汇编语言程序设计
汇编语言程序设计
经过任务分析、算法优化后, 经过任务分析、算法优化后, 在微型机上使用编 首先, 首先,要对单片机应用 就可以进行程序的总体构思, 就可以进行程序的总体构思, 辑软件编写源程序, 辑软件编写源程序, 系统预完成的任务进行 确定程序的结构和数据形式, 确定程序的结构和数据形式, 在使用交叉汇编的 深入的分析, 深入的分析,明确系统 并考虑资源的分配和参数的 方法对源程序进行 的设计任务、 的设计任务、功能要求 计算等。 计算等。然后根据程序运行 汇编, 汇编,然后采用串 和技术指标。其次, 和技术指标。其次,要 的过程, 的过程,勾画出程序执行的 算法是解决具体问题 行通信的方法, 行通信的方法,把 对系统的硬件资源和工 逻辑顺序, 。同一个问题 逻辑顺序,用图形符号将总 的方法。 的方法 汇编得到的目标程 作环境进行分析。 ,, 作环境进行分析。这是 体设计思路及程序流向绘制 的算法可以有多种, 的算法可以有多种 序传送到单片机内, 序传送到单片机内 单片机应用系统程序设 在平面图上, 在平面图上,从而使程序的 结果也可能不尽相同, 结果也可能不尽相同, 并进行程序运行和 计的基础和条件 结构关系直观明了, 结构关系直观明了,便于检 所以, 调试 所以,应对各种算法 查和修改。 查和修改。 进行分析比较,并进 进行分析比较, 行合理的优化

mcs-51第四章答案汇编语言程序设计

mcs-51第四章答案汇编语言程序设计

mcs-51第四章答案汇编语言程序设计第四章汇编语言程序设计1 题若晶振为12MHz,试编制延时2ms和1s子程序。

答:延时2ms:DELY: MOV R7, #10DLY0: MOV R6, #98NOPDLY1: DJNZ R6, DLY1DJNZ R7, DLY0RET延时1s:DELY: MOV R0, #50LP11: MOV R1, #100LP22: MOV R2, #100LP33: DJNZ R2, LP33DJNZ R1, LP22DJNZ R0, LP11RET4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。

答:方法一:先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。

若符号位为1,则用0减去该数即可。

编程如下:ORG 1000HMOV A, 20HJNB ACC.7, DONECLR CCLR ASUBB A, 21HMOV 21H, ACLR ASUBB A, 20HMOV 20H, ADONE: SJMP $END方法二:可用变反加“1”来完成。

ORG 1000HMOV A, 20HJNB ACC.7, DONECPL AMOV 20H, AMOV A, 21HCPL AMOV 21H, ACLR CMOV A, 21HADD A, #1MOV 21H, AMOV A, 20HADDC A, #0MOV 20H, ADONE: SJMP $END5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。

答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。

ORG 1000HSTART: MOV R7, #07HMOV R3, #00HMOV A, 30HMOV R0, #31HLOOP: ADD A, @R0JNC NEXTINC R3NEXT: INC R0DJNZ R7, LOOPMOV 38H, AMOV R7, #3LOOP1: CLR CMOV A, R3RRC AMOV R3, AMOV A, 38HRRC AMOV 38H, ADJNZ R7, LOOP1SJMP $END方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。

第4章 汇编语言程序设计

第4章 汇编语言程序设计

例: 三字节无符号数相加,其中被加数在内部RAM 的50H、51H和52H 单元中;加数在内部RAM的53H、 54H和55H单元中;要求把相加之和存放在50H、 51H和52H单元中,进位存放在位寻址区的00H位中。
内部RAM
50H 51H 52H
高字节 低字节
53H 54H 55H
R1→55H
结 束
常用程序结构:
顺序程序、分支程序、循环程序。
4-3
顺序程序
顺序程序又称简单程序,程序走向只有一条路径。 例:双字节求补程序(设数据在R4R5中): 开 始 CLR C MOV A,R5 ;取低字节 处 理 CPL A ADD A,#01H ;低字节变补 处 理 MOV R5,A MOV A, R4 ;取高字节 处 理 CPL A ADDC A,#00H ;高字节变补 结 束 MOV R4,A
片内 RAM 42H 0 十 41H 0 个 40H 十 个
4 -- 4
分支程序(参见书P49-57)
分支程序就是在程序执行过程中要判 断某些条件,当条件成立后程序转移到不 同的功能处运行。在MCS-51单片机中条件 转移指令都可以用在分支程序中。 (复习、参见书P38---39) (1)测试条件符合转移,如: JZ、JNB …等
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
在源程序中只能有一条END指令

单片机 第四章 80C51单片机汇编语言程序设计

单片机 第四章 80C51单片机汇编语言程序设计

(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
(后续)
4.2.4 子程序设计
3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序
(接上)
6.在子程序调用时,还要注意参数传递的问题
子程序的基本结构
MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序 ┇ SUB:PUSH PSW PUSH ACC ;现场保护 ;
过程B
是 出口 (c) 循环结构
出口 (b) 分支结构
4.2.1
顺序程序结构
是汇编语言程序的最简单也是最基本的程序结 构。程序执行时一条接一条地按顺序执行指令, 无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A , #30H ADD A , #58H MOV 30H , A SJMP $
二、定时程序 (2)多重循环定时程序(单片机频率为6MHz) 例 MOV R5,#TIME1 LOOP2: MOV R4,#TIME2 ;单周期指令 LOOP1: NOP ;单周期指令 NOP DJNZ R4,LOOP1 ;双周期指令 DJNZ R5,LOOP2 ;双周期指令 RET 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2µs 总时间=循环体时间+4µs
机器编辑->交叉汇编->串行传送
(过程图见教材92页)
单片机的开发过程
设计硬件 软件编程 软件仿真调试 源代码烧入单片机 插入单片机脱机工作 模数电路/单片机硬件 MCS51汇编语言/C
计算机/MEDWIN环境

第四章 汇编语言一

第四章 汇编语言一

4-3
DOS系统功能调用
例:程序结束后返回DOS操作系统
MOV AH,4CH INT 21H
M1 M2
01H 02H 05H 00H 05H 00H 05H 00H 41H 42H 43H 44H 42H 41H 44H 43H
M3
M4
4-2 伪指令
DATA M1 M2 M3 M4 DATA SEGMENT DB ‘ABCDEF’;字符串必须用DB定义 DW 3 DUP(0), 2 DUP( 6,7) ; DW‘AB’ ;每个元素仅允许为2个字符 DW 100 DUP(?); ? 预留存储空间 ENDS
数据段
附加段
程序段
堆栈段
代 码 段
4-1 汇编语言源程序 1、汇编语言:使用助记符、符号地址和标号编程

START:MOV AL,TABLE 标号 符号地址
2、汇编程序:
.ASM 汇编语言 源程序 汇编 程序 .OBJ 目标 程序 链接 程序 .EXE 可执行 程序
4-1 汇编语言源程序
二、汇编语言程序设计与执行过程
第四章 汇编语言程序设计 主要内容:
• 汇编语言源程序的结构 • 汇编语言语句格式 • 伪指令 • 功能调用 • 汇编语言程序设计
第四章 汇编语言程序设计 4-1 汇编语言源程序
一、源程序的结构:
数 据 段
DATA X Y Z DATA CODE SEGMENT DB 30H DB 40H DB ? ENDS SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X ADD AL,Y MOV Z,AL MOV AH,4CH INT 21H CODE ENDS END START

第4章 汇编语言程序格式

第4章 汇编语言程序格式

WORD——从字边界(偶数地址)开始
DWORD——从双字边界(4的倍数地址)开始 PAGE——从低8位物理地址为0处开始
(2) 组合类型(combine_type)说明程序连接时的段合并方法,可以是:
PRIVATE——私有段,不与其它模块中的同名段合并——默认值 PUBLIC——公有段,连接时与其它模快中的同名段合并成一个段
4.2.1 处理机选择伪操作
.8086 . 286 . 286P . 386 . 386P 选择8086指令系统 选择80286指令系统 选择保护模式下的80286指令系统 选择80386指令系统 选择保护模式下的80386指令系统
. 486
. 486P . 586
选择80486指令系统
选择保护模式下的80486指令系统 选择Pentium指令系统
CS:CSEG,DS:DATAGROUP
START:MOV MOV ……
AX,DATAGROUP DS,AX
4.3.3 程序开始和结束伪操作
1. 开始伪操作
在程序的开始可以用NAME或TITLE作为模块的名字,NAME的格式是: NAME 模块名
如果程序中没有使用NAME伪操作,则也可使用TITLE,其格式为: TITLE text
例4.2 .MODEL SMALL .STACK 100h .DATA 例4.3 .MODEL SMALL .STACK 100h .CONST …… .DATA …… AX,@DATA DS,AX .CODE START: MOV AX,DGROUP
……
.CODE START: MOV MOV …… MOV INT END AX,4C00H 21H START
③ uninitialized data

第四章 汇编语言程序设计基础

第四章  汇编语言程序设计基础

4.2.2 分支程序的设计方法 ★条件控制 ★逻辑尺控制 ★地址跳转表控制
1. 条件控制——利用比较和条件转移指令实现分支,是最常用的 程序设计方法。
பைடு நூலகம்
例如,求解函数:
练习题2. 编写程序,比较两个字符串STRING1和STRING2所 含字符是否完全相同,若相同则显示“MATCH”,若不同则显示 “NO MATCH”。 答案: datarea segment string1 db ‘asfioa’ ;定义字符串STRING1 string2 db ‘xcviyoaf’ ;定义字符串STRING2 mess1 db ‘MATCH’,’$’ ;定义显示字串“MATCH” mess2 db ‘NO MATCH’,’$’ ;定义显示字串“NO MATCH” datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds ;将ds:00入栈 sub ax,ax push ax mov ax,datarea ;装填数据段及附加段 mov ds,ax mov es,ax
程序流程图
mov ch,4 rotate: mov cl, 4 rol bx,cl mov al,bl and al,0fh add al,30h ;’0’-’9’ ASCII 30H-39H cmp al,3ah jl printit add al,7h ;’A’-’F’ ASCII 41H-46H printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate
例4.3 将首地址为A的N字数组按照从小到大的次序整序(气 泡算法,多重循环) A dw 32,85,16,15, 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例子
TMS320C54x Assembly Language Tools User’s Guide Page 4-14
5、段程序计数器(SPC)定位指令
SPC用于记录每个段的当前的指针位置, 便于编译器分配各个段 .align其后只能是20-27间的2的幂值, 其后不带参数,默认为128,即对准页 边界,为1表示对准字边界,为2表示对 准偶数边界,为N表示对准页内的第N 个字边界 通常作用是使SPC对准字边界,偶地址 边界或者页边界
TMS320C54x Assembly Language Tools User’s Guide Page 4-10
4、常数初始化
对于初始化段,可以使用下列伪指令定义初 始化数据 .long .word/.int .byte .string 例子同前页 对于未初始化段,可以使用下列伪指令来保 留空间 .space 例如: lable: .space 19 表示当前段中保留19bit空间,首地址为lable。 也可以如前面例子中 .bss sym, 19 ; Reserve space in .bss
注释域:
如果从第一列开始,可以使用;或者*, 否则使用;。 每行所以字符不可以超过200个,否则 200个以后的自动截去。
三、常用汇编伪指令
1、汇编伪指令的作用 将代码和数据汇编进特定的段; 为未初始化的变量保留存储空间; 存储器初始化; 定义全局变量
2、COFF文件格式
TMS320C54x Assembly Language Tools User’s Guide Page A-2,A-3
TMS320C54x Assembly Language Tools User’s Guide PAGE1-2
二、汇编基本语法
1、文件的内容 汇编语言指令; 汇编伪指令; 注释语句; 一个例子为EXER3.ASM文件。
2、详细语句构成介绍
一个语句包含四个命令域:
[label][:] instruction [operand list] [;comment]
四、宏定义
Programs often contain routines that are executed several times. Instead of repeating the source statements for a routine, you can define the routine as a macro, then call the macro in the places where you would normally repeat the routine. This simplifies and shortens your source program.If you want to call a macro several times, but with different data each time, you can assign parameters within a macro. This enables you to pass different information to the macro each time you call it.
指令域:
不可以从第一列开始; 有汇编语言指令和汇编伪指令; 例如: 汇编语言指令 stm #1,ar0 汇编伪指令 .data .set
操作数域:
操作数包括常数,符号,或者二者混合 关于汇编语言指令中操作数前缀: #-----用于表示立即数的前缀,其后可以是 一个数字,也可以是一个存储器映射寄存器 寄存器名(相当于存储器映射寄存器地址); *------用于表示间接寻址的一个前缀,其后 可以是寄存器名,也可以是常数(绝对地址 寻址*(lk)); @-----用于算术指令集; 关于汇编伪指令中的立即数: 汇编伪指令中的立即数少有用,有也不需要 加#前缀。 $表示当前PC值,B $是常用指令
Sபைடு நூலகம்CTIONS { .text: load = PRO1, run = PRO2 PAGE0 .vect: >PRO2 PAGE0 .data align(128): >DAT PAGE1 .bss: {}>DAT PAGE1 }
4、链接执行
lnk500 [ -options] filename 1 . ... filename n
3、命令文件编辑
文件包含参数,存储器指令,段指令 具体格式如例子: Page 139 参数:定义参加链接的目标文件; -m -e -o -c (Page 7-6) 存储器指令语法:
段指令语法:
TMS320C54x Assembly Language Tools User’s Guide Page 7-33
2、常用参数
-c:若使用该选项,编译器忽略字母的 大小写。例如abc与ABC是一样的。系 统缺省为区分大小写。 -i:设置搜索路径。通知编译器在指定 的搜索路径中去查找.copy,.include中 的文件。用法举例:-ic:\c54x。 -l: (小写的L)在编译时产生列表文 件,缺省后缀为.lst
4、链接时的几个细节
程序如何重定位? 手册 p 2-16 课本 p109
程序何时定位?
编译时定位 链接时定位 加载时定位
5、系统默认状态
TMS320C54x Assembly Language Tools User’s Guide Page 7-53;课本 Page 132 表明工程没有命令文件,也可以进行编译, 系统不一定会报错,但用户无法控制各个段 的位置,而由于DSP程序和数据空间在物理 上的复用,可能造成段间相互重叠情况。 注意,链接和汇编本质上是一个可执行文件, 但在实现上确实通过CCS里面的菜单和属性 设置完成
例子
File1.obj -o file1.out -e _c_int00 -m file1.map MEMORY { PAGE 0: PRO1 :origin=2000h,length=1000h PRO2:origin=3000h,length=500h PAGE 1: DAT:origin=80h,length=1000h }
3、段定义
.text 默认初始化段,放置执行代码 .data 默认初始化段,放置初始化数据 .bss 默认未初始化段,放置中间数据 .sect 定义一个有名称的初始化段,段 名自己定义 ,放置执行代码,使用方法 .sect “段名称字符串” .usect 定义一个有名称的未初始化段, 段名自己定义,放置中间数据,使用方 法 .usect “段名称字符串”
六、链接工具
1、链接的作用 TMS320C54x Assembly Language Tools User’s Guide Page 7-2 链接首先要求用户编写一个命令文件; 合并输入段; 为输出段定义空间所在地址
2、实现工具
存储器指令 根据选择使用的DSP型号,把程序和 数据空间进行分块,对每块命名,并定 义每块的起始地址和长度 段指令 定义所有的段在程序执行时,所应 该存放的存储器的位置
3、段定义
段分为初始化和未初始化段。 初始化段分为系统默认段和用户定义段, 非初始化段也分为系统默认段和用户定 义段。 系统默认初始化段为text和data段,用户 定义段通过伪指令.sect实现。 系统默认非初始化段为bss段,用户定义 非初始化段则是通过伪指令.uset实现。 text,data,bss,既是段名称,也是伪指 令。
五、汇编参数
1、语法格式
asm500 [ input file [ object file [ listing file] ] ] [ -options] input file: 汇编源文件名,缺省后缀为.asm object file: 编译输出的OBJ文件名,缺省后缀 为.obj listing file: 产生的列表文件名,缺省后缀 为.lst options: 编译器使用的各种选择。
编辑好汇编语言源文件后,我们需 要对这个文件进行“汇编”,从而生成 一个.obj后缀的中间文件。 最后,我们需要通过一个“链接” 动作,把.obj文件生成一个DSP可以执 行的文件,后缀为.out。链接的作用是 分配执行文件代码在DSP内部程序空间 的和数据空间的位置。这些分配,通过 一个后缀为.cmd的文件告诉链接命令。
-mg: 汇编源程序使用代数指令集 或在源代码中使用 -s:将所有的符号都放入符号表。 若不使用该选项,编译器仅将全局 变量放入符号表 -v: 指定版本。特别是需要使用 BOOTLOADER时,应加-v548开 关
其他参数:TMS320C54x Assembly Language Tools User’s Guide Page 3-4 编译指令执行和参数设置,在CCS 中进行
例子: 我们要完成下面任务 .text initializes words with the values 1, 2, 3, 4, 5, 6, 7, and 8. .data initializes words with the values 9, 10, 11, 12, 13, 14, 15,and 16. var_defs initializes words with the values 17 and 18. .bss reserves 19 words. xy reserves 20 words.
选项可以在命令文件中设置,效果一样 文件也可以在命令文件中设置,通常使用系 统默认值,即不需设置 具体执行也是在CCS中 LNK500生成的OUT文件不是纯二进制代码文件, 而是包含代码、符号表、代码定位信息的复 合文件 通过查看MAP文件可以获得变量、子程序等符 号的具体地址。注意:MAP文件只列出全局变 量的地址。(用.global说明的符号)
相关文档
最新文档