微机原理及应用第五章程序设计.docx
《微机原理及应用第五章程序设计.docx》由会员分享,可在线阅读,更多相关《微机原理及应用第五章程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
![微机原理及应用第五章程序设计.docx](https://file1.bdocx.com/fileroot1/2022-11/16/b2c08455-f4b2-44c2-8470-3152bdac07ef/b2c08455-f4b2-44c2-8470-3152bdac07ef1.gif)
微机原理及应用第五章程序设计
第五章程序设计的基本方法
§5.1基本源程序结构
一:
过程定义法(P137)
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
STARTPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX;上述为固定写法
程序正文
RET;过程返回到DOS
STARTENDP;结束过程定义
CODEENDS;结束代码段
ENDSTART;结束汇编
二:
主程序定义法(P138)
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DAT
MAIN:
MOVAX,DATA
MOVDS,AX
MOVES,AX
程序正文
MOVAH,4CH
INT21H;21H号中断退出到DOS
CODEENDS;结束代码段
ENDMAIN;结束汇编
§5.2基本程序设计
一:
顺序程序设计
1:
特点:
IP值线性增加
0
1
8
27
64
125
216
6
216
2:
用查表法求Z=X的立方值TABLE0
A:
定义数据段1
DATASEGMENT2
TABLEDB0,1,8,27,64,125,2163
XVALDB64
YVALDB?
5
DATAENDS6
B:
定义堆栈段
一般不定义,由汇编程序自动生成
C:
定义代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
LEABX,TABLE
MOVAL,XVAL
XLAT
MOVYVAL,AL
RET
STARTENDP
CODEENDS
ENDSTART
3:
已知一个长度为100个字节的数据块存放在2000H:
1000H开始的地址中,现要将该数据块移动到2000H:
1010H开始的地址中,用串传送指令编写完整的汇编语言源程序。
DATASEGMENTAT2000H
ORG1000H
AVR1DB100DUP(?
)
ORG1010H
AVR2DB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,AVR1
LEADI,AVR2
MOVCX,100
ADDSI,99
ADDDI,99
STD;DF=1
REPMOVSB
RET
MAINENDP
CODEENDS
ENDMAIN
二:
条件程序设计
1:
特点:
IP值受条件转移指令的影响而跳变
2:
实现表达式1(X>0)
Y=0(X=0)X在-128~+127之间
-1(X<0)
A:
波形图Y
1
-1X
B:
流程图
Y
NN
Y
C:
源程序
DATASEGMENT
XDB-3
YDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE;DS:
DATA
MAINPROCNEAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAL,X
CMPAL,0
JGEBIGER
MOVAL,0FFH;-1的补码为FFH
MOVY,AL;Y=-1
JMPNEXT
BIGER:
JEEQUL;Y=1或Y=0
MOVAL,1
MOVY,AL;Y=1
JMPNEXT
EQUL:
MOVY,AL;Y=0
NEXT:
RET
MAINENDP
CODEENDS
ENDMAIN
三:
循环程序设计
1:
特点:
IP值受计数器CX中的值的变化而改变
2:
计算100
S=∑i
i=1
A:
流程图
N
Y
B:
源程序
DATASEGMENT
SUMDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE;DS:
DATA
MAIN:
MOVAX,DATA
MOVDS,AX
MOVAX,0
MOVCX,100
AGAIN:
ADDAX,CX
DECCX
JNZAGAIN
MOVSUM,AX
MOVAH,4CH
INT21H
CODEENDS
ENDMAIN
§5.5实用程序设计
一:
代码转换程序
数的各种进制表示之间的转换
例5.19输入十进制数,输出转换后的十六进制数表示
例5.20输入十六进制数,输出转换后的十进制数表示
《例5.19》十进制数到十六进制数的转换
1:
功能
A:
从键盘输入小于65535的十进制数
B:
显示输入数的十六进制表示
注:
输入12(回车),显示000C.输入45678(回车),显示B26E
2:
流程图(223页,图5.33)
A:
调用过程KEYDTOB
将输入的十进制数转换为二进制数
B:
调用过程CRLF
将当前光标移动到下列首行
C:
调用过程BTOHSCR
将二进制数转换为十六进制字符并显示
D:
调用过程CRLF
将当前光标移动到下列首行
E:
跳转为死循环,Ctrl_break退出
3:
特点
A:
单模块(文件)管理,多过程外理
B:
无数据段定义
C:
代码段由多个过程组成
1):
一个主过程MAIN
2):
三个子过程KEYDTOB,BTOHSCR,CRLF
4:
主过程MAIN
MAINPROCFAR
REPEAT:
CALLKEYDTOB
CALLCRLF
CALLBTOHSCR
CALLCRLF
JMPREPEAT
MAINENDP
5:
子过程KEYDTOB
✓入口参数:
输入0~9的ASCII码→AL
✓出口参数:
转换为二进制→BX
KEYDTOBPROCNEAR
MOVBX,0;出口参数寄存器BX清0
KEYIN:
MOVAH,01H
INT21H;键入字符ASCII码到AL
SUBAL,30H;30H~39H减30H后为0~9
CMPAL,0
JLEXIT;键入小于0的字符退出
CMPAL,9
JGEXIT;键入大于9的字符退出
MOVAH,0
XCHGAX,BX
MOVCX,10
MULCX
XCHGAX,BX
ADDBX,AX;完成(AX)=(AX)*10
JMPKEYIN
EXIT:
RET
KEYDTOBENDP
✓键入47(回车)后,BX中值的分析
A:
键入4,(AL)=4,(AX)=4,(BX)=0
XCHXAX,BX(AX)=0,(BX)=4
MULCX(AX)=0,(BX)=4
XCHXAX,BX(AX)=4,(BX)=0
ADDBX,AX(AX)=4,(BX)=4
B:
键入7,(AL)=7,(AX)=7,(BX)=4
XCHXAX,BX(AX)=4,(BX)=7
MULCX(AX)=40,(BX)=7
XCHXAX,BX(AX)=7,(BX)=40
ADDBX,AX(AX)=7,(BX)=47=00101111B=2FH
6:
子过程BTOHSCR
♦入口参数:
BX中的二进制数
♦出口参数:
十六进制数的ASCII码→DL
BTOHSCRPROCNEAR
MOVCH,4;BX中含4个十六进制数
ROTATE:
MOVCL,4;位移值放CL
ROLBX,CL;小循环4位,即BX中高4位移到低4位
P4
P3
P2
P1
;BX=
P3
P2
P1
P4
;BX=
P1
P4
MOVAL,BL;AL=
00H
P4
ANDAL,0FH;AL=
ADDAL,30H;十六进制数中,0~9的ASCII码为30H~39H
CMPAL,3AH
JLPRINT;于3AH,为数0~9
ADDAL,07H;大于39H,为数A~F,ASCII码值为41H~46H
PRINT:
MOVDL,AL
MOVAH,02H
INT21H;显示字符0~9及A~F
DECCH
JNZROTATE;循环显示4次
RET
BTOHSCRENDP
6:
子过程CRLF
✓无入口,出口参数,功能为回车换行
CRLFPROCNEAR
MOVDL,0DH;0DH为回车的ASCII码
MOVAH,02H
INT21H
MOVDL,0AH;0AH为换行的ASCII码
MOVAH,02H
INT21H
RET
CRLFENDP
7:
汇编源程序结构
DECTOHEXSEGMENT
ASSUMECS:
DECTOHEX
MAINPROCFAR
MAINENDP
KEYDTOBPROCNEAR
KEYDTOBENDP
BTOHSCRPROCNEAR
BTOHSCRENDP
CRLFPROCNEAR
CRLFENDP
DECTOHEXENDS
ENDMAIN
二:
数表的处理
数表中数的插入,删除,排序,检索等处理
《例5.24》气泡法排序程序
1:
功能
表中数据从乱序25,46,3,75,5,30到升序3,5,25,30,46,75
2:
方法
A:
全比较法
若表数据项为N
1):
第一次,经比较将最小数放入表顶
2):
第二次,经比较将次小数放入表次顶
.
3):
第N-1次,经比较将最大数放入表底
注:
N项数将进行N-1次排序操作
B:
标志位识别法
设排序标志F
1):
若标志F=-1,进行比较排序程序
2):
若标志F=0,数已排好,退出比较排序