微机原理第八章微型计算机的程序设计.ppt
《微机原理第八章微型计算机的程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理第八章微型计算机的程序设计.ppt(91页珍藏版)》请在三一办公上搜索。
1、第八章 微型计算机的程序设计,顺序结构程序分支结构程序循环结构程序子程序结构,重点:,程序设计方法顺序结构程序分支结构程序循环结构程序子程序结构,8.1 程序设计步骤,1.分析问题2.建立数学模型3.确定算法4.绘制程序流程图5.内存分配6.编制程序7.程序调试,data segment a1 db hellon!,0dh,0ah,$data endsStack1 segment para stack.Stack1 endscode segment assume cs:code,ds:data,ss:stack1 start:mov ax,data mov ds,ax mov ah,4ch i
2、nt 21hcode ends end start,看一个例子,数据段,堆栈段,代码段,8-1 顺序程序设计,补充:二进制编码的十进制数,二进制编码的十进制数 就是BCD码(Binary Coded Decimal)。压缩BCD码 是用4位二进制数表示一位十进制数。一个字节表示两位十进制数。如:1001 0110B 表示 96 D非压缩BCD码 是用一个字节表示一位十进制数。高4位总是0。如:0000 1001B 表示 9D 两种BCD码的编码对照表,两种BCD码的编码对照表,1.BCD数加法调整指令DAA和AAA(P196),DAA-两个压缩BCD数相加调整指令:(AL AL=8AHDAA;
3、AL=90H,AAA-两个非压缩BCD数相加调整指令若(AL AH=01H,【例8.1】的程序段为:stack segment stack stackdw 32 dup(0)stackstack endsdata segmentW1 DW 8931HW2 DW 5678HSUM DB3 DUP(0)data endscodesegmentbeginproc farassume ss:stack,cs:code,ds:datapush dssub ax,axpush ax,mov ax,datamov ds,axMOV AL,BYTE PTR W1;AL=31H(+78H)ADD AL,BYTE
4、 PTR W2;AL=A9H,CF=0,AF=0DAA;BCD数加法调整指令;AL=09H,CF=1MOV SUM,ALMOV AL,BYTE PTR W1+1;AL=89H(+56H)ADC AL,BYTE PTR W2+1;AL=E0H,CF=0,AF=1DAA;AL=46H,CF=1MOV SUM+1,ALMOV SUM+2,0;处理向万位的进位RCL SUM+2,1;也可用指令ADC SUM+2,0retbegin endpcode endsend begin,例8.2 非压缩BCD数W1与W2(均为字变量)相加,将其和送到SUM字节变量中。,data segmentW1 DW 080
5、9H;即89DW2 DW 0607H;即67DSUM DB3 DUP(0);一个字节放1位BCD码,用来放加完后的值156data ends,MOV AX,W1;AX=0809H,W2为0607HADD AL,BYTE PTR W2;AL=10H,CF=0,AF=1AAA;属于第一种情况,故;AL为(AL+06H)AL=05H,AH=01H;第一种情况处理:AL=(AL+06H)&0FH,因0FH+06H=15H,故AL=05H,AH=AH+1=0+1=01H,所以AX=0105HMOV WORD PTR SUM+1,AX;(SUM+1)=05,(SUM+2)=01,此句也可表达为MOV SU
6、M,AL;见P151,2.BCD数减法调整指令DAS和DAA(自看,P198),DAS-两个压缩BCD数相减调整指令:(AL AL=DEH,有借位DAS;AL=78H,保持借位即134-56AAS-两个非压缩BCD数相减调整指令,3.非压缩BCD数乘除法调整指令AAM和AAD(P199,自看),顺序程序设计举例:例7.7 镜子程序,P183-184,data segmentOBUF DB 0DH,0AH,$IBUF DB 0FFH,0,255 DUP(0)data ends,MOV DX,OFFSET OBUF;显示提示符“”并回车换行MOV AH,O9INT 21HMOV DX,OFFSET
7、 IBUF;输入并显示字符串MOV AH,10INT 21HMOV BL,IBUF+1MOV BH,0MOV IBUFBX+2,$MOV DL,0AH;换行MOV AH,2INT 21HMOV DX,OFFSET IBUF+2;再显示输入的字符串MOV AH,9INT 21H,8.2 分支程序设计,特点:利用改变标志位的指令和转移指令来实现。无条件转移指令:JMP(见P207)条件转移指令:Jcond short-label(偏移地址送到IP)特点:满足条件,则实现段内转移;80386开始才可以转移到代码段的任何位置。,8.3 循环程序设计,8.3.2 重复控制指令,LOOP short-la
8、belLOOPZ short-label 或 LOOPE short-labelLOOPNZ short-label 或LOOPNE short-labelJCXZ short-labelJECXZ short-label共同点:均受CX或EXC的值控制,详见P214-215,8.3.3 单重循环设计举例,例8.11 计算Z=X+Y,其中X和Y是双字变量分析:双字变量是4个字节,则和可能占5个字节,作业8.4 编写求两个4位非压缩BCD数之和,将和送显示器显示的程序。(P261),分析:两加数各要4个字节单元,可以为DD类型;考虑到进位,和要5个字节单元,另外,输出到显示器的结束符号$需要一个
9、单元存放,故共需6个字节。因此,数据段定义为:data segment W1 DD 01020304HW2 DD 05060708HSUM DB 5 DUP(0)DB$data ends,代码段中的核心语句,MOV CX,4MOV SI,0MOV DI,4;要在SUM+4中放个位,SUM+0中放最高位的进位。XOR AX,AX;清CFA1:MOV AL,BYTE PTR W1SI;ADC AL,BYTE PTR W2SIAAAMOV SUMDI,ALINC SIDEC DILOOP A1MOV SUMDI,0RCL SUMDI;以上是得到加的结果,放在SUM中。下面是输出到显示器的程序语句MO
10、V DX,OFFSET SUMMOV AH,09INT 21H,作业8.5 编写求两个4位压缩BCD数之和,将和送显示器显示的程序。(P261),分析:两个加数各要2个字节单元,可以为DW类型;考虑到进位,和要3个字节单元,另外,输出到显示器的结束符号$需要一个单元存放,故共需4个字节。因此,数据段定义为:data segment W1 DW 1234HW2 DW 5678HSUM DB 3 DUP(0)DB$data ends,代码段中的核心语句,MOV CX,2MOV SI,0MOV DI,2;要在SUM+2中放个位,SUM+0中放最高位的进位。XOR AX,AX;清CFA1:MOV AL
11、,BYTE PTR W1SI;ADC AL,BYTE PTR W2SIDAAMOV SUMDI,ALINC SIDEC DILOOP A1MOV SUMDI,0RCL SUMDI;以上是得到加的结果,放在SUM中。下面是输出到显示器的程序语句MOV DX,OFFSET SUMMOV AH,09INT 21H,作业8.17 编写求输入算式加数1+加数2的和并送显。(加数及其和均为4位(即指压缩)BCD数,P262),分析:要求先有屏幕显示输出加数1+加数2:,然后从键盘输入两个4个字节的BCD数,加完后送显。用到的变量:W1和W2因为从键盘输入,均不确定是几位十进制,故需确定其最大位数不超过要用
12、W1,例6.2,将内存(10050)单元的内容拆成两段,每段4位,并将它们分别 存入内存(10051)和(10052)单元。即(10050)单元中的低4位放入(10051)单元中的低4位,而(10050)单元中的高4位放入(10052)单元中的低4位。,开始,初始化,用间址方法取数到AL,用AND指令将该数“与”OFH取得低4位,存入内存(10051)单元,再取出原始数到AL,逻辑右移得高4位,存入内存(10052)单元,暂停,逻辑右移得高4位,存入内存(10052)单元,程序段如下:,MOV AX,1000HMOV DS,AX;给段寄存器DS赋值MOV SI,50HMOV AL,SI;把物理
13、地址为10000H+0050H=10050H;中的存储内容给ALAND AL,0FH;把AL中的前4位清0,取得低4位值MOV SI+1,AL;把得到的低4位放到(10051H)单元MOV AL,SI;再取出需拆字节放到AL中MOV CL,4SHR AL,CL;逻辑右移4次,前4位补0;MOV SI+2,AL;放入(10052)单元,AND AL,F0HMOVE SI+2,AL,6-3、分枝结构程序,两分支结构,多分支结构,例6.3 求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800)单元中。,分析:不知AX与BX中数的大小,故需先判断谁大,然后用大的减小的才可求得绝对
14、值,其流程图如图6-5,开始,初始化,清CF,AX-BX AX,AX 内存(2800和(2801)单元,暂停,逻辑右移得高4位,存入内存(10052)单元,AX-BX0,AX-BX AXBX 内存(2800和(2801)单元,否,是,相应程序段如下(p141),CLC SUB AX,BX JC AA;进位位为1,就转移到AA MOV DI,2800H MOV DI,AX HLTAA:SUB BX,AX MOV DI,2800H MOV DI,BX HLT,例6.4 从外设71号中取一个数M,判断其值是否在10和20之间,即10M20.如果M20H,则送0FFH给外设73H;如果M10,则送00
15、H给外设73H;如果10M20,则送88H给外设73H.,分析:根据题意,我们可以看出这是一个需要两次判断M大小的问题。我们可以先判M是否大于10,再判M是否大于20。(2)根据解决问题的思路,我们先画出程序流程图,如下图所示。从图6中程序流程图来看,两个分支都要“回归”原程序。(3)编制的程序如下:,相关程序段如下(p142),START:IN AL,71H;将71H端口的字节读入AL CLC;清除CF CMP AL,10;AL-10,结果不返回 JC LP1;小于10转LP1 CMP AL,20;AL-20,结果不返回 JC LP2;10AL20 转LP2 MOV BL,0FFH;将0FF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 第八 微型计算机 程序设计

链接地址:https://www.31ppt.com/p-6363372.html