第四章--汇编语言程序设计

合集下载

汇编语言程序设计

汇编语言程序设计

汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。

⼆、8086汇编语⾔程序的⼀个例⼦Pg90。

§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。

指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。

也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。

⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。

3.常量出现在汇编语⾔源程序中的固定值称为常量。

(1)数值常量①⼆进制:以字母B结束。

②⼗进制:以字母D或⽆字母结束。

③⼋进制:以字母Q(或O)结束。

④⼗六进制:以字母H结束。

(2)字符常量指⽤单引号或双引号引起的字符或字符串。

4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。

⼀个标识符不能超过31个字符,不能以数字开头。

5.保留字汇编语⾔中具有特殊意义的字符序列。

6.注释⼀⾏中分号以后的部分。

⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。

⼆、符号具有⼀定意义的字符序列。

1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。

1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。

汇编语言程序设计

汇编语言程序设计

第4章 汇编语言程序设计
例4.4 显示两位压缩BCD码值(00~99) ,要求不显示前导0。 本例一方面要排除前导0的情况,另一方面 对于全0情况又必须显示一个0,所以形 成了两个双分支结构的程序。
第4章 汇编语言程序设计 DATA SEGMENT BCD DB 04H ; 给出一个BCD码数据 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BEGIN: MOV AX, DATA MOV DS, AX MOV DL,BCD ;取BCD码 TEST DL,0FFH ;如果这个BCD码是0,则显示为0 JZ ZERO TEST DL,0F0H ;如果这个BCD码高位是0,不显示 JZ ONE MOV CL,4 ;BCD码高位右移为低位 SHR DL,CL OR DL,30H ;转换为ASCII码 MOV AH,2 ;显示 INT 21H
第4章 汇编语言程序设计 ADC MOV MOV MUL ADD DX,0 W+4,DX AX,A B+2 W+2,AX ;部分积2的高16位与进位相加 ;结果保存到从W+4开始的内存单元 ;取被乘数的低16位 ;与乘数的高16位相乘,得到部分积3 ;部分积3的低16位与W+2开始的内存单元相加 ;结果保存在从W+2开始的内存单元 ;部分积3的高16位与W+4开始的内存单元及 ;进位相加,结果保存在从W+4开始的内存单元 ;把进位值保存在从W+6开始的内存单元 ;取被乘数的高16位 ;与乘数的高16位相乘,得到部分积4 ;部分积4的低16位与W+4开始的内存单元相加 ;结果保存在从W+4开始的内存单元 ;部分积4的高16位与W+6开始的内存单元及 ;进位相加,结果保存在从W+6开始的内存单元

第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)

四章汇编语言程序设计ppt课件

四章汇编语言程序设计ppt课件
指令助记符:MOV,ADD,…. 指示性(伪指令)操作符:DB,DW,SEGMENT,
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

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

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

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

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

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

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

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

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

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

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

单片机应用技术(第三版)第四章汇编语言程序设计课件

单片机应用技术(第三版)第四章汇编语言程序设计课件
第4章 汇编语言程序设计
第4章 汇编语言程序设 计 实训4 信号灯的控制2
4.1 概述 4.2 简单程序设计 4.3 分支程序设计 4.4 循环程序设计 4.5 查表程序 4.6 子程序设计与堆栈技术 本章小结 习题4
第4章 汇编语言程序设计
实训4 信号灯的控制2
1. 实训目的 (1) 掌握汇编语言程序的基本结构。 (2) 了解汇编语言程序设计的基本方法和思路。 2. 实训设备与器件 (1) 实训设备:单片机开发系统、微机等。 (2) 实训器件与电路:参见实训1电路图。 3. 实训步骤与要求 (1) 运行程序1,观察8个发光二极管的亮灭状态。
ORG 0000H ;程序从地址0000H开始存放
START: MOV P1,#00H
;把立即数00H送P1口,点亮
;所有发光二极管
ACALL DELAБайду номын сангаас ;调用延时子程序
MOV P1,#0FFH
;灭掉所有发光二极管
第4章 汇编语言程序设计
(2) 在单片机开发调试环境中,将内部RAM的20H单元内
容修改为00H,运行程序2,观察8个发光二极管的亮灭状态;
重新将内部RAM的20H单元内容修改为80H,再次运行程序2,
观察8个发光二极管的亮灭状态。
(3) 运行程序3,观察8个发光二极管的亮灭状态。
程序1:所有发光二极管不停地闪动。

第4章汇编语言程序设计课件

第4章汇编语言程序设计课件

29
MASTERLI
‘H’‘E’‘L’‘L’‘O’
例2:操作数可以是字符串MASTERLI DB ‘HELLO’汇编后如下:
注意下面的不同DB ‘AB’41 ‘A’ 42 ‘B’
‘AB’‘B’ ‘A’
42
41
DW
30
例3:ABC DB 0, 1, ?, ?, ?LPI DW ?, 54, ? 汇编后如下图示:
第4章 汇编语言程序设计4.1 汇编语言源程序机器语言—用二进制来表示指令和数据。B0 64 什么意思?这就是机器语言。既不直观, 又不易理解和记忆。MOVAL,64H ;大家很清楚,这就是助记符。助记符—反映指令的功能和主要特征,便于人们 理解和记忆。
1
指令除了操作码以外,还有一个操作数问题。操作数可能放在存储器中,这就涉及一个地址问 题。程序中遇到转移指令或调用指令,涉及地址转 移,若采用具体地址就不很方便,一旦有错,改动就 很麻烦。于是人们采用标号或符号来代替地址,例:LP1: …┇LOOP LP1汇编语言 是用助记符、符号地址以及标号等符号 书写的程序。用汇编语言编写的程序叫源程序。
18
(3) 关系运算符EQ(相等),NE(不等),LT(小于),GT(大于), LE(小于或等于),GE(大于或等于)。关系运算符的两个操作数必须都是数字或者是 同一段内的两个存储器地址。关系为真,结果为0FFFFH;关系为假,结果为0。例:MOV BX, PORT_VAL GE 5若PORT_VAL的值大于等于5,则汇编后为:MOV BX, 0FFFFH若PORT_VAL的值小于5,则汇编后为:
(4) 取值运算符和属性运算符:分析和规定存储器的属性。
20
若BUFFER1存储区是用如下伪指令定义的: BUFFER1 DB 100 DUP(?)则 TYPE BUFFER1等于1。

第4章-汇编语言程序设计

第4章-汇编语言程序设计
第4章 汇编语言程序设计
*
目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss
.data
.text
RAM
E2PROM
ROM
第4章 汇编语言程序设计
*
3. 段定义伪指令
汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分:
;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;0123h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令
;初始化数据段 ;3组数据放入.data段
第4章 汇编语言程序设计
*
汇编语言源程序:
链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。
第4章 汇编语言程序设计
*
4.2.1分段结构 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
第4章 汇编语言程序设计
*
C源文件
C编译器
汇编 源文件
汇编器
汇编 源文件
COFF 目标文件
链接器
可执行的 COFF文件
宏源文件
存档器
宏库
存档器
目标 文件库
建库工具
运行时 支持库
EPROM 编程器
交叉引用 列表器
调试工具
绝对地址 列表器
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章汇编语言程序设计1编程将片内40H〜60H单元中的内容送到以3000H为首的存储区内。

答:MOV R1,#40HMOV R2,#21HMOVDPTR,#3000HL1:MOVA,@R1MOVX@DPT,R AINCR1INC DPTRDJNZ R2,L12、编程计算下列算式的程序1) 23H+45H+ABH+03H=MOV A,#23HADDA,#45HADDA,#0ABHXCH A,B;溢出处理ADDCA,#00HXCH A,BADDA,#03H;A中为结果低位,B中为高位2) CDH+15H-38H-46H=MOV A,#0CDHADD A,#15HSUBB A,#38HSUBB A,#46H 3) 1234H+8347H=MOV A , #34HADD A , #47HMOV 30H , AMOV A , #12HADDC A , #83HMOV 31, A ;30H 存结果低位, 31H 存结果高位4)AB123H-43ADCH=CLR CMOV A , #23HSUBB A , DCHMOV 30H , AMOV A , #0B1HSUBB A , #3AHMOV 31H , AMOV A , #0AHSUBB A ,, #04HMOV 32H , A ;30H 为低位, 32H 为高位3、设有两个4位BCD 码,分别存放在 23H 22H 单元和33H 、32H 单元中,求他们的和,并 送入43H 、42H 单元中(低位在低字节,高位在高字节) 。

答: MOV A ,22HADD A ,32HMOV 42H ,AMOV A ,23HADDC A ,33HMOV 43H ,A4、略答: MOV R0, #8MOV R1, #50HMOV A , #00HL1: ADD A , @R1INC R1DJNZ R0, L1MOV B , #8DIV ABMOV 5AH , A6、编写计算下式的程序。

设乘积和平方结果均小于 255。

a 、b 值分别存在片外3002H 单元中,结果存于片外 3000H 单元中。

25 ,a b1)Y a b ,a ba b ,a bMOV DPTR , #3001HMOVX A , @DPTRMOV 30H , A ;a 暂存30H 单元INC DPLMOVX A , @DPTRCJNE A , 30H , L1 ;是否 a=bMOV A , #25SJMP SAVEL1: JNC L2MOV B , 30H5、编程计算片内 RAM 区 50H H 59H 单元中数的平均值,结果存放在 5AH 中。

3001H 和MUL ABSJMP SAVEL2:MOV B,AMOV A,30HDIV ABSAVE:MOV DPTR,#3000HMOVX@DPR,T A(a b) 2 10,(a b)210(2)Y(a b)2,(a b)210 (a2b) 2 10,(a b)210MOV DPTR,#3001HMOVX A,@DPTRMOV30H,AINC DPTRMOVX A,@DPTRA,30HADDMOV B,A(a +b)2MUL AB;MOV31H,ACJNE A,#10,L1SJMP SAVEL1:JC L2CLR CSUBB A,#10SJMP SAVE7、设有两个长度均为 15的数组,分别存放在以 200H 和210H 为首地址的存储区中,试编 程求其对应项之和,结果存放到以 220H 为首地址的存储区中。

答: MOV DPH , #02HMOV R1, #15MOV R2, #00H ; 数组 1 首地址低位MOV R3, #10H ; 数组 2 首地址低位MOV R4, #20H ; 和首地址低位L1: MOV DPL , R2MOVX A , @DPTRMOV R1, AMOV DPL , R3MOVX A , @DPTRADD A , R1MOV DPL , R4MOVX @DTP ,R AINC R2INC R3INC R4DJNZ R1, L1SJMP $数和零的个数。

SAVE: MOV DPTR ,#3000HMOVC @DPT ,R AL2: ADD A ,#10答: MOV 30H , #00H ;正数计数器8、设有 100 个无符号数,连续存放在以 2000H 为首地址的存储区中,试编程统计正数、负MOV31H,#00H;负数计数器MOV32H,#00H;零计数器MOVDPTR,#2000HMOVR1,#100L4:MOVX A,@DPTRINC DPTRCJNEA,#0,L1INC32HSJMP L2L1:JCL3INC30HSJMP L2L3:INC31HL2:DJNZR1,L4SJMP$9、将片外数据存储器地址为1000H〜1030H的数据块,全部搬迁到片内并将原数据块区域全部清零。

答:MOV R0,#30HMOVR2,#31HMOVDPTR,#1000HLP:MOVX A,@DPTRMOV@R,0 AANDA,#00HMOVX@DPT,R AINC R0RAM 30H〜60H 中,DJNZR2, LPSJMP $ 10、试编写一子程序,是 R1、R0指向的两个片外 RAM 连续单元中的高 4位二进制数,合并 成一个字节,装入累加器A 中。

已知R0指向低地址,并要求该单元高四位放在 A 中高四位。

答: MOVX A , @R1ANL A , #0F0HSWAP AMOV R2, AMOVX A , @R0ANL A , #0F0HORL A , R211、试编程把以2040H 为首地址的连续 50个单元的无符号数按降序排列,存放到以3000H为首地址的存储区中。

INCDPTR 答: MOV R2, #50 MOV R3, #20H MOV R4, #40H MOV R5, #30H MOV R6, #00H MOV DPH , R3 MOV DPL , R4 MOVX A , @DPTR INCDPTR MOV R3, DPH SEND: ;源地址;目的地址 ;SEND 各2040H 数据块移入3000H 存储区MOV MOV MOV R4,DPL DPH,R5 DPL,R6MOVX@DPT,R AINC DPTRMOV R5,DPHMOV R6,DPLDJNZ R2,SENDMOV R2,#49;重复次数CMP1:MOV DPTR,#3000HMOV R3,#49;比较次数CMP2:MOVX A,@DPTRMOV B,AINC DPTRMOVX A,@DPTRCJNE A,B,L1L1:JC NOMOVEMOV30H,ACLR CMOV A,DPLSUBB A,#01HMOV DPL,AMOV A,30HMOVX@DPT,R AINC DPTRMOV A , BMOVX @DPT ,R ANOMOVE: DJNZ R3, CMP2 ; 50 个数重复一遍?DJNZ R2, CMP1 ;排序结束?LJMP $12、试编一查表程序,从首地址为 2000H,长度为100的数据块中找出 ASCII 码为A,将其 地址送到 20A0H 和20A1H 单元中。

13、设在200H 〜204H 单元中,存放5个压缩BCD 码,编程将他们转换成ASCII 码,存放到 以205H 单元为首地址的存储区。

答: MOV R2, #05HMOV R3, #02H 答: MOV MOV GO_ON: MOVX CJNE MOVMOVMOV MOVX INC XCH MOVX SJMP IFEND: INC DJNZ OVER: SJMP DPTR , #2000HR2, #100A , @DPTRA , #41H ,IFENDA , DPHB , DPLDPTR , #20A0H@DPT ,R ADPTRA , B@DPT ,R AOVERDPTRR2, GO_ONOVERMOV R4,#00H MOV R5,#02H MOV R6,#05H MOV DPH,R3 MOV DPL,R4MOVXA,@DPTRINC DPTR MOV R3,DPH MOV R4,DPL MOV B,A SWAP AANL A,#0FH ORL A,#30H MOV DPH,R5 MOV DPL,R6MOVX@DPT,R AINC DPTR MOV A,B ANL A,#0FH ORL A,#30HMOVX@DPT,R AMOV R5,DPHMOV R6,DPLDJNZ R2,CHLP CHLP:14、有一无符号数据块长度在 30H 单元中,其首地址为 31H 单元,求出数据块中最大值, 并存入 40H 中。

答:MOV R0, #31HMOVR1, 30HMOV 40H ,#00HLOOP: MOVA , @R0CJNEA , 40H , L1SJMPAGAIN L1:JNC L2SJMPAGAIN L2:MOV40H , A AGAIN: INCR0DJNZR1, LOOPSJMP$15、略16、在以2000H 为首地址的存储区内,存放 20个用ASCII 码表示的0〜9之间的数,试编BCD 码,并以压缩 BCD 码的形式存在 3000H 〜3009H 单元中。

答: MOVR2, #10 MOV DPL , R4 MOVX A , @DPTR ANL A , #0FH程,将它们转换成 LP:MOVR3, #20HMOV R4,#00HMOV R5,#30HMOV R6,#00HMOV DPH, R3SWAP A XCH A,B INCDPTRMOVXA,@DPTRANLA,#0FHORL A,BINCDPTRMOV R3,DPHMOV R4,DPLMOV DPH,R5MOVDPL,R6MOVX@DPT,RAINCDPTRMOV R5,DPHMOVR6,DPLDJNZ R2,LPSJMP$17、试编程实现下列逻辑表达式功能。

设P1.7〜P1.0为8个变量的输入端,而其中又作为变量的输出端。

;输入端定义X0EQUP1.0X1EQUP1.1X2EQUP1.2X3EQUP1.3X4EQU P1.4P1.7X6 EQU P1.6 X7EQUP1.7(1) 丫 X °X !X 2 X 3X 4X 5X 6 X 7MOV C, X0 ANL C, X1 ANL C, /X2 ORL C, X3 MOV OOH, C MOV C, X4 ANL C, X5 ANL C, X6 ORL C, /X7 ORLC, OOH MOVP1.7, CMOV c, X O ANL c, X 1CPL CMOV OOH,(MOV C, X 2 ANL C, X 3 ANL C, X 4CPLCX5 EQU P1.5 (2) Y XXX 2X 3X 4X 5X 6X 7MOV01H,CMOVC,X5ANL C,X6ANL C,X7CPL CORLC,O1HCPL CORL C,00HMOV P1.7 ,C18、略19、略20、试编写延时1s、1min、1h 子程序。

相关文档
最新文档