第四章 汇编语言程序设计知识

4.1 编程的步骤、方法和技巧

4.1.1 编程步骤

1.分析问题

2.确定算法

3.画程序流程图

4.编写程序

       LOOP1:MOVA,#00H

1)标号

标号是用户定义的符号地址。一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。

标号可以由赋值伪指令赋值。如果标号没有赋值,则汇编程序就把存放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。

2)操作码

3)操作数

(1)工作寄存器名;(2)特殊功能寄存器名;(3)标号名,包括赋值标号、指令标号;(4)常数;(5)用来表示程序计数器的当前值;(6)表达式,例如:MOV A,SUM+1

5.注释

4.1.2 编程的方法和技巧

1.模块化的程序设计方法

1)程序功能模块化的优点

实际的应用程序一般都由一个主程序(包括若干个功能模块)和多个子程序构成,每一个程序模块都能完成一个明确的任务。

①单个模块结构的程序功能单一,易于编写、调试和修改。

②便于分工。

③程序可读性好,便于功能扩充和版本升级。

④对程序的修改可局部进行,其它部分可以保持不变。

⑤对于使用频繁的子程序可以建立子程序库,便于多个模块调用。

2)划分模块应该遵循的原则:

①每个模块应具有独立的功能,即单模块的功能高内聚性。

②模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。

③模块长度适中。20条~100条的范围较合适。

2.编程技巧

①尽量采用循环结构和子程序

②尽量少用无条件转移指令。

③对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。

④在中断处理程序中,由于中断程序是随机产生的,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。可能会遇到以中断前的状态标志为依据的条件转移指令

⑤用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压入堆栈。

⑥对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。

4.1.3 汇编语言的基本结构

汇编语言有四种结构形式:顺序结构、分支结构、循环结构和子程序结构

1. 顺序程序

程序按顺序一条一条地执行指令。

2.分支程序

程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。

分支程序又分为单分支和多分支结构。

多分支程序是首先把分支程序按序号排列,然后按序号值进行转移。

在89C51指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态作为条件进行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用这些指令可以完成0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移。

例:128种分支转移程序。

功能:根据入口条件转移到128个目的地址。

入口:(R3)=转移目的地址的序号00H~7FH。

出口:转移到相应子程序入口。

JMP_128:       MOV      A,R3

RL          A

MOV      DPTR,#JMPTAB

JMP        @A+DPTR

JMPTAB:         AJMP     ROUT00

AJMP     ROUT01     

┇                 ┇

AJMP     ROUT7F

(AJMP占两个字节,所以要乘以二)

3.循环程序

循环程序是最常见的程序组织形式。其结构包括四部分:

1)置循环初值

对于循环程序中所使用的工作单元,在循环开始时应置初值。

例如,工作寄存器设置计数初值,累加器A清0,以及设置地址指针、长度等。

2)循环体(循环工作部分)

重复执行的程序段部分,分为循环工作部分和循环控制部分。循环控制部分每循环一次,检查结束条件,当满足条件时,就停止循环,往下继续执行其他程序。

3)修改控制变量

在循环程序中,必须给出循环约束条件。在单片机中,一般用一个工作寄存器Rn作为计数器,对该计数器赋初值作为循环次数。

4)循环控制部分

根据循环结束条件,判断是否结束循环。89C51可采用DJNZ指令来自动修改控制变量并能结束循环。

4.2 伪指令

1.ORG汇编起始指令

ORG 2000H

下一条指令从2000H开始

2.END 汇编结束命令

END命令汇编程序结束汇编

3.EQU赋值命令

AA EQU R1

DELAY EQU 07EBH

4.DATA数据地址赋值命令

类似EQU,但DATA可以后定义先使用,且只能把数据赋值给字符名

5.DB 定义字节命令

ORG 2000H

DB ‘ABC’

DB 26H,03H

6.DW 定义字命令

该命令把DW后的16位数据项或项表从当前地址连续存放

7.DS 定义存储空间命令

从指定地址开始保留DS之后表达式的值所规定的的存储单元

8.bit 位地址符号命令

其功能是把位地址赋值给字符名

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容