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

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

【例】将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.第2章最简单的C程序设计顺序程序设计第2章最简单的C程序设计-顺序程序设计 https://bbs.pinggu.org/thread-13043304-1-1.html
2.Java程序设计Java程序设计 以下是一个基于顺序表的储户管理系统的C语言代码实现: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 // 储户结构体 typedef struct { char accountNumber[20]; char name[50]; float balance;https://blog.csdn.net/2402_83162337/article/details/144398383
3.顺序结构程序设计顺序结构程序设计 所谓顺序结构程序,是指程序中的语句完全按照它们的排列次序执行. 顺序结构程序一般由四个部分组成: 1. 定义变量部分; 2. 已知变量赋值或输入部分; 3. 未知变量求值部分; 4. 输出结果部分. 顺序结构程序的编写方法,与求解物理题很相似. 1. 变量相当于物理量,有几个物理量就定义几个变量.并https://etcnew.sdut.edu.cn/meol/analytics/resPdfShow.do?resId=574337
4.《顺序结构程序设计》教学设计《顺序结构程序设计》教学设计 一,教学目标 1. 理解顺序结构的执行流程,掌握顺序结构程序设计的一般过程. 2. 掌握程序中变量,表达式,常用函数,赋值语句的使用. 3. 在程序编写的过程中,锻炼学生发现问题,分析问题和解决问题的能力. 二,学习者分析 该班学生共 45 人,思维和能力方面都不错,对新媒体新技术的接受https://zcy.sxedu.org/file/download?id=ATTA2c587ca1f69f455bba2e85611d0658bb
5.第4课顺序结构程序设计优质教学课件PPT第四课顺序结构程序设计认识顺序结构顺序结构是程序设计中最简单常用的结构,按照从上到下依次执行各条语句,直到程序结束。理解顺序结构华氏转摄氏摄 氏转华氏顺序求三角形面积4等腰三角形223作高法—— s 面积 d 底边 h 高 s = d h / 2h认识海伦公式海 http://www.360doc.com/document/22/1223/12/69593754_1061194402.shtml
6.第2章软件过程虽然没有把维护阶段进一步划分成更小的阶段,但是实际上每一项维护活动都应该经过提出维护要求(或报告问题),分析维护要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修改程序,测试程序,复查验收等一系列步骤,因此,实质上是经历了一次压缩和简化了的软件定义和开发的全过程。 每一项维护活动都应该准确地记录下https://www.ryjiaoyu.com/book/onlinechapter/46629
7.详细设计java详细设计包括哪些内容?E.W.Dijkstra在60年代中期提出结构程序设计的概念 ?结构化程序设计技术:采用自顶向下逐步求精的设计方法和单入口单出口的控制结构,并且只包含顺序、选择和循环三种结构。 ?C.Bohm和G.Jacopini在数学上证明了只用“顺序”、“选择”和“循环”这三种基本的控制结构可以实现任何单入口和单出口的程序 https://blog.51cto.com/u_16099317/11008241
8.软件评测师考点59——程序设计语言的三种控制结构程序设计语言的三种控制结构是软件评测师考试的重要考点,经常出现在上午场的客观选择题当中,下午场白盒测试也会涉及。控制成分指明语言允许表述的控制结构,程序开发人员使用控制成分来构造程序中的控制逻辑。理论上已经证明,可计算问题的程序都可以用顺序、选择和循环这三种控制结构来描述。下面就该知识点并结合例题进行总结https://www.modb.pro/db/143627
9.转载arm汇编语言学习笔记一个程序可以由多个汇编源文件组成,多个文件间会互相引用符号(变量或标号)。当在一个源文件中定义的一个符号希望其他文件引用时,则必须用导出伪指令定义这个符号;如果这个文件引用了外部定义的符号,则必须用导入伪指令定义这个符号。 5、顺序程序设计 举例 https://www.jianshu.com/p/cd8d3de1caf7
10.课程顺序结构程序的执行流程是直线型的,而组成顺序结构的基本语句是输入语句、输出语句、赋值语句等程序语句。本章重点讨论了使用顺序结构设计程序的方法,C语言中输人、输出库函数的用法以及赋值运算符和表达式的用法。(二)学习目标1、理解C语言的三种基本控制结构的思想;2、理解并掌握C语言顺序结构的设计方法;3、学会使用https://higher.smartedu.cn/course/62354ca59906eace048cfb15
11.转发“浙江省教育技术中心关于举办第二十届全省中小学电脑制作作品(含设计说明文档、源文件、演示视频、作品缩略图)大小建议不超过100MB。 相关教程和帮助文档可登陆#查询。 (7)计算机程序设计 用计算机程序语言编写的软件,可以是单机软件、面向互联网的应用服务系统、手机APP等形态。在内容上可以是辅助学习工具、管理信息系统、益智游戏,以及互联网+、人工智能、大数据等方面的新https://aj.zjer.cn/index.php?r=portal/content/view&id=2573469
12.C语言程序设计的试题及答案大家在考程序员时,C语言程序设计大家有了解吗?下面瑞文网小编为大家分享了C语言程序设计的试题及答案,供大家参考。 第一章 基础知识 一、填空 1. 每个 C 程序都必须有且仅有一个___ 函数。 2. C 语言程序开发到执行通常要经过 6 个阶段即编辑、预处理https://www.ruiwen.com/shiti/1000898.html
13.C语言程序设计习题解析与实验指导(含答案)C语言程序设计习题解析与实验指导(含答案).pdf 关闭预览 想预览更多内容,点击免费在线预览全文 免费在线预览全文 主教材习题答案及解析1-3章 第1章初识计算机、程序与C语言 一、单选题 1.“程序存储思想”提出来的。 A.DennisM.RitchieB.AlanTuringC.JohnVonNeumannD.KenThompsom https://max.book118.com/html/2024/0814/7004123105006143.shtm
14.《程序的顺序结构》教案(精选7篇)[课程目标] 通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程.在具体问题的解决过程中,理解程序框图的三种基本逻辑结构:顺序、条件分支、循环.[教学目标] 理解程序框图的概念;会用通用的图形符号表示算法,掌握算法的顺序结构,了解算法的条件结构与循环结构;掌握画程序框图的基本规则.[目标解析] 1.知道用https://www.360wenmi.com/f/filexepzb1nq.html
15.WEB安全新玩法[9]重置密码之验证流程防绕过一般来说,业务流程中出现多个操作环节时,是需要顺序完成的。程序设计者往往按照正常用户的操作顺序实现功能,而忽略了攻击者能够绕过中途环节,直接在后续环节上进行非法操作。iFlow业务安全加固平台能够在不修改网站程序的情况下,强制流程的顺序执行。 某网站系统在用户重置密码时,需进行算术题人机识别验证,再进入邮箱验证https://cloud.tencent.com/developer/article/1854569