汇编语言程序设计技巧详解(附例题)技术交流

四种基本结构:顺序结构、分支结构、循环结构和子程序。

【例】将R0单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中R2(存高位)和R1(存低位)中。

参考程序:

ORG2000H

MOVA,R0;取值

ANLA,#0FH;取低4位

ADDA,#30H;转换成ASCII码

MOVR1,A;保存结果

SWAPA;高4位与低4位互换

ANLA,#0FH;取原来的高4位

MOVR2,A;保存结果

SJMP$

END

【例】求R2中补码绝对值,正数不变,负数变补。

MOVA,R2

JNBACC.7,NEXT;为正数?

CPLA;负数变补

INCA

MOVR2,A

NEXT:SJMPNEXT;结束

【例】求符号函数Y=SGN(X)

+1当X>0

SGN(X)=0当X=0

-1当X<0

SYMB:MOVA,40H;取X

JZSTOR;X=0,Y=X

JBACC7,MINUS;X<0

MOVA,#1;X>0,Y=+1

SJMPSTOR

MINUS:MOVA,#0FFH;X<0,Y=-1

STOR:MOV41H,A;保存Y

RET

如:分支号=0,程序转移到ADDR0处;当分支号=1,程序转移到ADDR1处;…。

MTJS:MOVDPTR,#TAB;取表首地址

CLRC

RLCA;分支号×2

MOVCA,@A+DPTR;取分支地址低位

PUSHACC;入栈保存

MOVCA,@A+DPTR;取分支地址高位

RET;分支地址→PC,转移

TAB:DWADDR0;分支地址表

DWADDR1

ADDR0:…;程序段0…

【例】根据R0的值转向7个分支程序。R0<10,转向SUB0;R0<20,转向SUB1;……R0<60,转向SUB5;R0>=60,转向SUB6;

分析:这里应该利用JMP@A+DPTR

指令直接给PC赋值,使程序实现转移

参考程序如下:

MOVDPTR,#TAB;取转移指令表首地址

MOVA,R0;取数

MOVB,#10

……

DIVAB;A/10,商在A中

RLCA;A←2A

JMP@A+DPTR;PC←A+DPTR

TAB:AJMPSUB0;转移指令表

AJMPSUB1

AJMPSUB2

AJMPSUB6

循环程序结构是汇编语言程序中常见的一种程序结构。所谓循环,就是让计算机反复执行某一段程序。使用循环程序可以省略很多类似的代码,提高程序的代码密度。

循环程序主要包含以下三个方面:

设置循环的初始状态,如工作单元的清零,循环次数的设置等。在设置初始条件时要小心,否则很容易让程序多执行(或少执行)一次。

即循环程序的主体,是要求计算机重复执行的部分。这部分程序应该特别注意精简,因为要重复多次,所以这部分的精简程度决定了整个循环程序的执行效率。

包括对循环计数器的修改和循环结束条件的判断等内容。

【例】把内部RAM中从ST1地址开始存放的数据传送到以ST2开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为00H,而其它字节均不为0。并设源地址与目的地址空间不重叠。

分析:显然,我们可以利用判断每次传送的内容是否为0这一条件来控制循环。利用判A转移控制的循环流程图如下图所示。

START:MOVR0,#ST1

MOVR1,#ST2

LOOP:MOVA,@R0

JZENT

MOV@R1,A

INCR0

INCR1

SJMPLOOP

ENT:RET

例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。

MOVA,@R0

MOVR2,A;循环计数器←n

CLRA;结果单元清0

MOVR3,A

ADD1:INCR0;修改指针

JNCNEXT;处理进位

INCR3;有进位,高字节加1

NEXT:DJNZR2,ADD1;循环控制:数据是否加完?

MOV40H,A;循环结束,保存结果

MOV41H,R3

例将内存一串单字节无符号数升序排序。

步骤:

每次取相邻单元的两个数比较,决定是否需要交换数据位置。

第一次循环,比较N-1次,取到数据表中最大值。

第二次循环,比较N-2次,取到次大值。

第N-1次循环:比较一次,排序结束。

SORT:MOVA,#N-1;N个数据排序

MOVR4,A;外循环次数

LOOP1:MOVA,R4

MOVR3,A;内循环次数

MOVR0,#TAB;设数据指针

LOOP2:MOVA,@R0;取二数

MOVB,A

CJNEA,B,L1;比较

L1:JNCUNEX;A≥B,不交换

DECR0;否则交换数据

MOV@R0,A

UNEX:DJNZR3,LOOP2;内循环结束?

DJNZR4,LOOP1;外循环结束?

能完成某项特定功能的独立程序段,可被反复调用。

子程序设计

如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。

选用不同的参数传递方式。

【例】将R4R5R6中三个字节数据对半分解,变成6个字节,存入显示缓冲区(DISMEM0~DISMEM5)。

1)子程序UFOR1的功能:将A累加器中单字节数据,对半分解成两个字节,存入R0所指向的相邻两个单元

UFOR1:MOV@R0,#0

XCHDA,@R0;保存低半字节

INCR0;修改指针

MOV@R0,#0

SWAPA

XCHDA,@R0;保存高半字节

2)调用子程序UFOR1之前,将待分解的内容送A,存放地址送R0。

【例】利用MCS-51仿真实验板,外部扩展四个双色发光二极管HL1、HL2、HL3和HL4分别模拟北(HL1)、西(HL2)、东(HL3)、南(HL4)四个方向交通灯,连接电路如下图所示:

模块化设计是指把一个具体的功能分解成多个小的模块,各个模块之间相互独立,而又可以相互传递参数。分解成的小模块程序功能单一,易于调试和修改,而在模块内部要注意多使用子程序调用,一个子程序可以被多次调用,节省空间而且便于阅读。在程序中应该尽量使用循环结构,这样可以节省内存,提高执行效率,不过要注意循环的初始值和循环的结束条件。

注意:由于中断是随机产生的,因此在处理中断程序时,一定要注意保存程序现场(保护标志寄存器和中断处理程序用到的寄存器),以便执行完毕后恢复。在进行子程序调用时,经常使用累加器A(参数多时还可以使用寄存器或存储器)进行参数传递。

THE END
1.选择与循环实践顺序结构程序设计,选择结构程序设计循环结构:循环结构又称重复结构。这种结构是当给定的条件成立时,重复执行某一循环体,直到条件不满足为止。 二、常见的输入函数和输出函数 三、顺序结构程序设计 顺序结构是结构化程序设计的三种基本结构之一,是最简单、最常见的程序结构,它的特点是:按照语句的先后顺序,自前向后逐条依次执行。数序结构是由一系列顺序https://blog.csdn.net/qq_41860950/article/details/79662349
2.顺序结构程序设计顺序结构程序设计 所谓顺序结构程序,是指程序中的语句完全按照它们的排列次序执行. 顺序结构程序一般由四个部分组成: 1. 定义变量部分; 2. 已知变量赋值或输入部分; 3. 未知变量求值部分; 4. 输出结果部分. 顺序结构程序的编写方法,与求解物理题很相似. 1. 变量相当于物理量,有几个物理量就定义几个变量.并https://etcnew.sdut.edu.cn/meol/analytics/resPdfShow.do?resId=574337
3.《顺序结构程序设计》教学设计《顺序结构程序设计》教学设计 一,教学目标 1. 理解顺序结构的执行流程,掌握顺序结构程序设计的一般过程. 2. 掌握程序中变量,表达式,常用函数,赋值语句的使用. 3. 在程序编写的过程中,锻炼学生发现问题,分析问题和解决问题的能力. 二,学习者分析 该班学生共 45 人,思维和能力方面都不错,对新媒体新技术的接受https://zcy.sxedu.org/file/download?id=ATTA2c587ca1f69f455bba2e85611d0658bb
4.顺序结构程序设计顺序结构程序设计 初级 刘光蓉 武汉轻工大学 任务 数据集 排行榜 C语言语句 数据的输入与输出 顺序结构 顺序结构是程序设计语言最基本的结构,其包含的语句是按照书写的顺序依次执行,且每条语句都将被执行,其N-S流程图如下图所示,图中A块和B块是顺序执行的结构关系。 https://rank.chinaz.compgedu.educoder.net/shixuns/9ejlzrkv/challenges
5.python程序设计顺序结构相关代码python顺序结构例题python程序设计顺序结构相关代码 python顺序结构例题 一.顺序结构: 1.按照从上到下的顺序结构执行代码,中间没有任何的判断和跳转,知道程序结束 2.对象的布尔值: Python的一切皆是对象,所有对象都有一个布尔值 获取对象布尔值的方法,使用内置函数bool() 以下对象的布尔值都是False:https://blog.51cto.com/u_16213628/10565397
6.顺序结构它将程序结构限制为三种基本结构:序列、选择和循环。在高级语言的编程中,顺序编程是编程的基础。Sequence structure的程序按照程序的顺序一个接一个地执行,直到程序完成,并且对程序的进程没有控制。 结构化程序设计的提出:序列结构是结构化程序设计的一部分,结构化程序设计的概念最早是由荷兰科学家E.W.Dijikstra提出的https://www.qwbaike.cn/doc-view-9800.html
7.c语言程序设计(上海电力大学)课程顺序结构程序设计举例 文欣秀 ● 3.7 顺序结构常见错误 文欣秀 第四章 分支结构程序设计 ● 4.1 问题的引入 叶文珺 ● 4.2 条件的表示 叶文珺 ● 4.3 简单分支程序设计 叶文珺 ● 4.4 多分支程序设计 叶文珺 ● 4.5 用switch语句实现多分支结构 叶文珺 ● 4.6 综合案例 叶文珺 https://higher.smartedu.cn/course/62354cef9906eace048e289e
8.《程序的顺序结构》教案(精选7篇)我是平和县大溪中学信息技术教师江文权,我说课的题目是活动八《体验顺序、分支结构程序设计》 一、说教材 1、本节课选自福建教育人民出版社出版《信息技术》教材。本教材贯彻“以学生为主体,教师为主导”的方针,把提高学生的积极性,培养学生的创新能力作为教育的根本目标。本节课所学的顺序、分支结构是Visual Basic程https://www.360wenmi.com/f/filexepzb1nq.html
9.跟着博主玩转计算机组成结构3.2.7 微指令和程序指令的关系 3.2.8 设计微指令应当追求的目标 五、指令流水 1.指令流水原理 1.1 五级流水: 1.2 六级流水: 2.影响流水线性能因素 2.1结构相关 资源相关 3.流水线性能 3.1吞吐率 3.2加速比 3.3效率 4.超级流水线技术 4.1超标量技术 https://cloud.tencent.com/developer/article/1732527
10.语言类实习报告5篇7 程序运行? 10 8 附录:(源程序清单)? 12 一、课程设计题目 《通讯录管理系统》 二、实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C语言源程序并具备https://www.unjs.com/fanwenku/89027.html
11.C语言入门到精通第一章第四节—基础篇顺序结构的NS流程图C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。 C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C+https://www.jianshu.com/p/dbee4e1109e7