汇编语言程序设计方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014-1-21
13
[例3.4.5] 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中
ST1和ST2单元中分别存放着一个8位无符号二进制数,要求 找出其中的大数并存入ST3 单元中。
START:CLR MOV MOVX MOV INC MOVX SUBB JNC XCH BIG0: INC MOVX RET BIG1: MOVX SJMP C DPTR,#ST1 A,@DPTR R2,A DPTR A,@DPTR A,R2 BIG1 A,R2 DPTR @DPTR,A A,@DPTR BIG0 ;进位位清“0” ;设置数据指针,指向ST1 ;取第一个数 ;第一个数存R2 ;数据指针加1,指向ST2 ;取第二个数 ;两数比较(第二个数-第一个数) ;第二个数大转BIG1(C=0无借位跳) ;第一个数大整字节交换继续 ;指向ST3单元 ;存大数
3.4
汇编语言程序设计方法
3.4.1 汇编程序约定 3.4.2 汇编程序设计步骤 3.4.3 顺序程序 3.4.4 分支程序 3.4.5 循环程序 3.4.6 算术运算程序
2014-1-21
1
3.4.1
汇编程序约定
汇编语言程序: 用汇编语言编写的、完成特定功能的指令序列。 汇编程序: 能将汇编语言源程序转换成机器语言目标程序的 系统软件。
3.4.3
顺序程序
顺序程序按顺序依次执行的程序,又称简单程序。 程序走向只有一条路径,是复杂程序结构的基础。
例:双字节变补程序(设数据在R4R5中): MOV A ,R 5 ;取低字节 CPL A ADD A,#01H ;低字节变补 MOV R 5,A MOV A, R4 ;取高字节 CPL A ADDC A,#80H ;高字节变补 MOV R4,A
=:去FH 思路: Ta=T55? ≠: Ta>T55:去JW Ta<T55:Ta=T54? =:去FH ≠: Ta<T54:去SW Ta>T54:去FH 算法: (1) Ta>T55:去JW (2) Ta<T54:去SW (3) T55≥Ta≥T54:去FH
2014-1-21
19
程序:
CJNE AJMP LOOP1:JNC CJNE AJMP LOOP2:JC FH: RET A,55H,LOOP1 ;Ta ≠T55:转向LOOP1 FH JW
50H 51H 52H
高字节
53H 54H 55H
R1→ 55H
低字节 中字节 高字节 低字节 中字节
低字节
+
高字节
低字节
00H CY
50H 51H 52H
54H 53H R0→52H 51H 50H 20H
加数
被加数 和
高字节
...
00H
CY
8
2014-1-21
程序:
MOV MOV MOV MOV
一、多次使用条件转移指令,形成两个以上判断框。 [例3.4.8] :求符号函数Y=SGN(X) +1 (当 X>0) SGN(X)= 0 (当 X=0) -1 (当 X<0)
SYMB: MOV A,40H ;取X 保存Y JZ STOR ;X=0跳,Y=X JB ACC.7,MINUS ;X<0(A.7=1跳) 结 束 MOV A,# 01H ;X>0,Y=+1 内部RAM SJMP STOR ... MINUS:MOV A,#0FFH ;X<0,Y= -1 41H Y(函数) STOR: MOV 41H,A ;保存Y 40H X(变量) ... RET
2014-1-21 22
解:程序如下
SGNL:ANL P1,#11100011B;红绿黄灯灭 ORL P1,#00000011B;置P1.0、P1.1输入态, P1.5~P1.7状态不变 SL0: JNB P1.0,SL1 ;P1.0=0,S0未按下,转判S1 JNB P1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮 YELW:SETB P1.4 ;黄灯亮 CLR P1.2 ;红灯灭 CLR P1.3 ;绿灯灭 SJMP SL0 ;转循环 SL1: JNB P1.1,YELW ;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮 GREN:SETB P1.3 ;绿灯亮 CLR P1.2 ;红灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环 RED: SETB P1.2 ;红灯亮 CLR P1.3 ;绿灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环
汇编语言程序到机器语言程序的转换过程称为汇编。 1、手工汇编:人工查指令表汇编。用于设计短小程序或调试 程序的场合。 2、机器汇编:用汇编程序进行汇编。
2014-1-21
2
源程序使用机器汇编要考虑汇编程序的约定:
1)按指令格式和语法规则编写程序。 常数的表示: 十进制数:20 十六进制数:87H,0F0H 二进制数:01011001B 字符: ‘H ’ 字符串: “Hello”。 2)使用伪指令提供汇编信息。
2014-1-21
开 处 处 处 结
始 理 理 理 束
7
举例(顺序)
[例3.4.1] 三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H
单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加 之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H 位中。
内部RAM
2014-1-21
20
[例3.4.10]已知电路如图4-5所示,要求实现: ① S0单独按下, 红灯亮,其余灯 灭; ② S1单独按下, 绿灯亮,其余灯 灭; ③ 其余情况, 黄灯亮。
2014-1-21 21
解:程序如下
SGNL:ANL P1,#11100011B; ORL P1,#00000011B; SL0: JNB P1.0,SL1 ; JNB P1.1,RED ; YELW:SETB P1.4 ; CLR P1.2 ; CLR P1.3 ; SJMP SL0 ; SL1: JNB P1.1,YELW ; GREN:SETB P1.3 ; CLR P1.2 ; CLR P1.4 ; SJMP SL0 ; RED: SETB P1.2 ; CLR P1.3 ;绿灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环
2014-1-21 4
3.4.2
汇编语言程序设计步骤
一、确定方案和计算方法; 二、了解应用系统的硬件配置、性能指标; 三、建立系统数学模型,确定控制算法和操作步骤; 四、画程序流程图; 开 始 表示程序结构和程序功能。
五、编制源程序。 1.合理分配存储器单元和了解 I/O接口地址。 2.按功能设计程序,明确各程序 之间的相互关系。 3.用注释行说明程序,便于阅读、 修改和调试。 六、程序的调试
[例3.4.6] 将ASCII码转换为十六进制数。设ASCII码放在
累加器A中,转换结果放到B中。 解:由ASCII码表(表1-4)可知,30H~39H为0~9的 ASCII码,41H~46H为A~F的ASCII码。将ASCII码减30H(0~ 9)或37H(A~F)就可获得对应的十六进制数。程序如下:
温控系统结构框图
电热箱 电热丝
温度传感器
放 大
模
A/D
数
单 片
设定值
调节电压
控温
双向可控硅
光隔驱动
控制信号
机
打印输出
~ 电源
电热箱单片机温控系统结构框图
电热箱采用电热丝加热,由双向可控硅控制加热量的大小; 温度传感器检测电热箱内的温度,经放大与A/D转换后进入单片机; 单片机将设定的温度值与检测到的电热箱中的实际温度进行比较, 并调节运算后,发出控制信号经光电隔离器去驱动双向可控硅以调节 加在电热丝的电压,从而控制电热箱的温度。
2014-1-21
3
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
2014-1-21 18
举例(多分支)
[例3.4.9]
某温度控制系统,采集的温度值(Ta)放在累加器A中。此外, 在55H单元存放控制温度上限值(T55)。 在内部RAM54H单元存放控制温度下限值(T54),
若Ta>T55,程序转向JW(降温处理子程序);
若Ta<T54,则程序转向SW(升温处理子程序); 若T55百度文库Ta≥T54,则程序转向FH(返回主程序)。
影响条件 条件满足? N 处 理 段 Y
影响条件 条件满足? N 处 理 1 Y 处 理 2
2014-1-21
12
3.4.4.1
单重分支程序
一个判断决策框,程序有两条出路。两种分支结构: [例3.4.4] 求R2中补码绝对值: 正数不变,负数变补。 MOV A,R2 JNB ACC.7,NEXT ;为正数?为0跳 CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
片内 RAM 42H 0 十 41H 0 个 40H 十 个
;保存数据个位
;十位换到低半字节
;保存数据十位
3.4.4 分支程序
根据不同条件转向不同的处理程序,这种结构的程序称为 分支程序。 80C51指令系统中的条件转移指令、比较转移指令和位转 移指令,可以实现分支程序。 由条件转移指令构成程序判断框部分,形成程序分支结构。
内部RAM
...
41H 价格(结果) 40H 重量(变量)
...
;是,转至WETC(C=1即G<5跳) ;否则M=3G+2(G-5)
G=5? =:跳WETC ≠:G<5:跳WETC G>5:顺序执行
;存结果M
3.4.4.2
多重分支程序
开 始 取 X Y Y=0 X=0 ? N Y Y=-1 X<0? N Y=+1
2014-1-21
15
[例3.4.7]
FRT: MOV MOV MOV MUL MOV MOV CJNE SJMP L1: JC SUBB RLC ADD SJMP WETC: MOV L2: MOV RET
行李计价:当G≤5,M=G×3; 当G>5,M=G×3+(G-5)×(5-3) 。
A,40H R 3, A B,# 03H AB R 2, A A , R3 A,# 05H,L1 WETC WETC A,#05H A A, R 2 L2 A , R2 41H,A ;取行李重量计价单位G ;M=G×3 ;暂存3G ;取回G ;G=5 ? G≠ 5 跳L1
2014-1-21 10
[例3.4.3] MOV MOV MOV ANL INC MOV MOV SWAP ANL INC MOV
压缩式BCD码分解成为单字节BCD码。 ;设指针 ;取一个字节 ;暂存 ;高半字节清0
R0,#40H A,@R0 R 2,A A,#0FH R0 @R0,A A ,R 2 A A,#0FH R0 @R0,A
R0,#20H @R0,A C,ACC.0 00H,C
MOV MOV MOV ADD MOV DEC DEC MOV ADDC MOV DEC DEC MOV ADDC MOV CLR ADDC MOV
R0,#52H R1,#55H A,@R0 A,@R1 @R0,A R0 R1 A,@R0 A,@R1 @R0,A R0 R1 A,@R0 A,@R1 @R0,A A A,#00H 00H,C
2014-1-21
处
理 Y 处 理
条件满足? N 处 处 结 理 理 束
5
流程图符号和说明:
将CPU要执行的操作写在一个个框内,并以一定的次序,用 带方向箭头的直线把这些框连接起来,指示出CPU的操作过程。 此方框图结构称程序框图或程序流程图。
2014-1-21 6
常用程序结构:
顺序程序、分支程序、循环程序、公用子程序。
; Ta=T55 :返回
;若CY=0,表明Ta >T55,转降温处理程序
A,54H,LOOP2 ; Ta ≠T54:转向LOOP2 FH SW
; Ta=T54 :返回
;若CY=1,表明Ta <T54,转升温处理程序 ; T55≥Ta≥T54,返回主程序
若Ta>T55,程序转向JW(降温处理子程序); 若Ta<T54,则程序转向SW(升温处理子程序); 若T55≥Ta≥T54,则程序转向FH(返回主程序)。
;被加数的低字节地址 ;加数的低字节地址
;低字节相加 ;存低字节相加结果
;中间字节带进位相加 ;存中间字节相加结果
;高字节带进位相加 ;存高字节相加结果
;存放进位的单元地址 ;进位送00H位保存
9
2014-1-21
例3.4.2
将R2中BCD码数转为二进制数存进R2。
ORG 2000H BCD2B:MOV A, R2 ;取入口数据 ANL A, #0F0H ;取出十位 SWAP A ; 高4位 低4位 MOV B, #0AH MUL AB ;十位乘10 MOV R3,A ;积暂存进R3 MOV A, R2 ;再取入口数据 ANL A, #0FH ;取出个位 ADD A, R3 MOV R2,A ;结果 R2 RET ;若不是子程序可用END