4.2汇编语言程序的基本形式与设计举例 程序设计是为了解决某一个问题,将指令有序地组合在 起。程序有繁有简,有些复杂的程序往往是由简单的基本 程序所构成的,程序设计的基本形式包括不同类型程序的设 计方法和技巧,掌握了这些方法和技巧将有利于熟练地编制 单片机的各种应用程序。 1.顺序程序 顺序程序是指无分支、无循环结构、也不调用子程序的 程序,这是最简单的程序结构。顺序程序执行的流程是依指 令在存储器中的存放顺序进行的。 電子工掌出版社 Publishing House of Electronics Inoustry
4.2 汇编语言程序的基本形式与设计举例 程序设计是为了解决某一个问题,将指令有序地组合在 一起。程序有繁有简,有些复杂的程序往往是由简单的基本 程序所构成的,程序设计的基本形式包括不同类型程序的设 计方法和技巧,掌握了这些方法和技巧将有利于熟练地编制 单片机的各种应用程序。 1. 顺序程序 顺序程序是指无分支、无循环结构、也不调用子程序的 程序,这是最简单的程序结构。顺序程序执行的流程是依指 令在存储器中的存放顺序进行的
例1:把累加器中的8位无符号二进制数转换成3 位(2个字节)BCD码形式。百位数存入片内的21H 单元,十位数和个位数存入相邻的22H单元。这个 题目实际上是数制转换的问题,要把二进制数转换 为十进制数(BCD码形式)。一个8位的二进制数最 大为11113,转换结果为255,共有3位,所以 在编程时要考虑最多存放3个BCD码的情况。题目要 求把最高位放在21H,而十位数和个位数以压缩BCD 码的形式放在于22H。 我们采用除法指令来实现 電子工掌出版社 Publishing House of Electronics Inoustry
例1:把累加器中的8位无符号二进制数转换成3 位(2个字节)BCD码形式。百位数存入片内的21H 单元,十位数和个位数存入相邻的22H单元。 这个 题目实际上是数制转换的问题,要把二进制数转换 为十进制数(BCD码形式)。一个8位的二进制数最 大为11111111B,转换结果为255,共有3位,所以 在编程时要考虑最多存放3个BCD码的情况。题目要 求把最高位放在21H,而十位数和个位数以压缩BCD 码的形式放在于22H。 我们采用除法指令来实现
实现程序如下: BINBCD: MOV B, #100 DIV AB ;A除以100,商为百位数 M0V21H,A;保存百位数 MOV A, #10 XCH A, B ;余数送入A中,除数送入B中 DIV AB ;余数除以10,得十位数 SWAP A ;将十位数交换到高半字节 ADD A, B ;十位数加个位数 M0V22H,A;转换结果的十位数和个位数存22H RET 電子工掌出版社
实现程序如下: BINBCD:MOV B,#100 DIV AB ;A除以100,商为百位数 MOV 21H,A ;保存百位数 MOV A,#10 XCH A,B ;余数送入A中,除数送入B中 DIV AB ;余数除以10,得十位数 SWAP A ;将十位数交换到高半字节 ADD A,B ;十位数加个位数 MOV 22H,A ;转换结果的十位数和个位数存22H RET
例2:设在片内RAM中,20H和21H单元各存放有一个8位数 要求拼装一个新字节并送30H保存,其低5位取自20H单元 低5位,高3位取自2H单元中的低3位 实现程序如下: MOV 30H, 20H ;20H单元中的数据送入30H单元 ANL30H,#0001113;屏幕高3位 MOV A, 21H ;21H单元中的数据送入A SWAP A ;将A中的数据高低3位交换,即循环左移4次 RL A ;将A中的数据再循环左移1次 ANLA,#11100006屏蔽A中数据的低5位 ORL 30H, A ;完成拼装 電子工掌出版社
例2:设在片内RAM中,20H和21H单元各存放有一个8位数 据,要求拼装一个新字节并送30H保存,其低5位取自20H单元 中的低5位,高3位取自21H单元中的低3位。 实现程序如下: MOV 30H,20H ;20H单元中的数据送入30H单元 ANL 30H,#00011111B ;屏幕高3位 MOV A,21H ;21H单元中的数据送入A SWAP A ;将A中的数据高低3位交换,即循环左移4次 RL A ;将A中的数据再循环左移1次 ANL A,#11100000B ;屏蔽A中数据的低5位 ORL 30H,A ;完成拼装
例3:做3个字节的无符号数的加法。设 个加数存放在内部RAM的50H、51H、52H单元, 另一个加数存放在内部RAM的53H、54H、55H单 元,相加结果存放在内部RAM的50H、51H、52H 单元,均从高字节开始存放,进位存放在位寻 址区的00H位中。 電子工掌出版社 Publishing House of Electronics Inoustry
例3:做3个字节的无符号数的加法。设一 个加数存放在内部RAM的50H、51H、52H单元, 另一个加数存放在内部RAM的53H、54H、55H单 元,相加结果存放在内部RAM的50H、51H、52H 单元,均从高字节开始存放,进位存放在位寻 址区的00H位中