版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5、汇编语言程序设计,基本要求: 程序要结构化,(简明,易读,易调试) 执行速度快。 占用存储空间少,(即存储容量小),汇编程序的基本步骤:,(1)分析问题,描绘出数学模型。 (2)确定算法。 (3)绘制程序框图。 (4)分配存储器及工作单元。 (5)编制程序。 (6)静态检查。 (7)上机调试、试运行。,例:编写一个程序查找一定内存单元中的最大自然数。,分析问题,确定数学模型。 确定算法。 绘制程序框图。 分配存储器及工作单元。 编制程序。 静态检查。 上机调试、试运行。,DATASEGMENT PARA;定义数据段 D1DB 85,77,90,87,69,92,78; DATAENDS ;
2、 数据段结束 STACKSEGMENT PARA STACK;定义堆栈段 DW20 DUP (0); 堆栈段位20个字节 STACKENDS ; 堆栈段结束 CODESEGMENT ;定义代码段 ASSUMECS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX;初始化DS MOVBX,OFFSET D1;设置数据指针,MOVCX,7;设置计数器 DECCX MOVAL,BX;取第一个数 LOP:INCBX CMPAL,BX;与下一个数比较 JAENEXT;下一个数不大转移 MOVAL,BX;大数存入AL NEXT:DECCX JNZLOP;
3、CX0继续 MOVDL,AL;显示最大数(?) MOVAH,2 INT21H CODEENDS;代码段结束 END START ;源程序结束,程序的基本结构,顺序结构 分支结构 循环结构 子程序结构,1、顺序结构,顺序结构程序本身很简单,按程序的编写顺序逐条执行。它依赖于计算机能够顺序执行语句的特点,只要语句安排的顺序是正确的就可以了。,例: 把非压缩的十进制数DATl转化为压缩的十进制数。 完成上述功能的程序段为: MOV AX,DATl;例如AX=0204H MOV CL,4 SAL AH, CL;AH=20,AX=2004H ROL AX, CL;AX=0042H ROL AL, CL
4、MOV BYTE PIR DATl,AL;DAT1中为24H为压缩的十进制数 . . .,2、分支结构,例: 设计一字符比较程序,将键入的字符与存储单元的字符相比较,相同显示YES,不同显示NO,DATA1SEGMENT D1DBPLEASE INPUT A CHARACTER: $ D2DBA DYESDBYES,$ DNODBNO,$ DATA1ENDS STACK1SEGMENTPARASTACK DW20 DUP(0) STACK1ENDS CODESEGMENT ASSUMECS:CODE,DS:DATA1,SS:STACK1,START:MOVAX,DATA1; 数据段寄存器DS初
5、始化 MOVDS,AX LEADX,D1; 取被加数D1数据区的首地址 MOVAH,09H; 功能号为09H,调显示功能 INT21H MOVAH,7;从键盘得到一个字符,不回显 INT21H MOVBL,D2 CMPAL,BL JZYES,LEADX,DNO JMPNO YES:LEADX,DYES NO:MOVAH,09H;显示 INT21H MOVAH,4CH; 功能号为4CH,返回DOS INT21H CODEENDS ENDSTART,3、循环结构,例:求100个数的和。,DATA1SEGMENT SEDW100 DUP(?) YDW? DATA1ENDS STACK1SEGMENT
6、PARASTACK DW20 DUP(0) STACK1ENDS CODESEGMENT ASSUMECS:CODE,DS:DATA1,SS:STACK1 START:MOVAX,DATA1; 数据段寄存器DS初始化 MOVDS,AX,MOVAX,0 ADDAX,SE ADDAX,SE+2 ADDAX,SE+4 ADDAX,SE+198 MOVY,AX CODEENDS ENDSTART,加100次,改为循环设计: XORAX,AX MOVBX,OFFSET SE MOVCX,100 LOP:ADDAX,BX;循环体 INCBX INCBX DECCX JNZLOP;CX 0,循环 MOVY,
7、AX CODEENDS ENDSTART,例:统计一个数据块中正数、负数和0的个数。,DATASEGMENT MN DB 76H,0A8H,34H,0BBH,90H,00H NN DB 3 DUP(0) DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX LEADI,MN MOVBX,0 MOVAH,0 MOVCL,NN-MN;数据块长度送CL,MOVCH,0 LINE1:MOVAL,DI ANDAL,AL;送标志判断 JZLINE3;0,转到LINE3 JNSLINE2;正,转到LINE3 INCAH
8、;负 JMPLINE4 LINE2:INCBH JMPLINE4 LINE3:INCBL LINE4:INCDI,LOOPLINE1 MOVDI,OFFSET NN MOVDI,AH;存负数的个数 INCDI MOVDI,BH ;存正数的个数 INCDI MOVDI,BL ;存0的个数 MOVAH,4CH;返回DOS INT21H CODEENDS ENDSTART,子程序设计,1、主子程序之间的信息交换(参数传递) 2、现场保护,重复出现的程序段,例: 16进制变换为ASCII DATASEGMENT ;定义数据段 D1DB 37H,48H,0A7H,97H D2DB 8 DUP(38H),
9、$ DATAENDS ; 数据段结束 STACKSEGMENT PARA STACK;定义堆栈段 DW20 DUP (0); 堆栈段位20个字节 STACKENDS ; 堆栈段结束,CODESEGMENT ;定义代码段 ASSUMECS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX;初始化DS LEABX,D1;设置数据指针 LEASI,D2 MOVCX,D2-D1;设置计数器 AGAIN:MOVAL,BX;取第一字节数 MOVDL,AL PUSHCX MOVCL,4,SHRAL,CL;高位移到低位 POPCX CALLCHANGE MOVA
10、L,DL ANDAL,0FH;屏蔽高位 CALLCHANGE INCBX LOOPAGAIN;CX不等于0循环 LEADX,D2 MOV AH,09H INT 21H MOVAH,4CH; 功能号为4CH,返回DOS INT21H,;转换子程序CHANGE 入口:AL低半子节为要转换的16进制数, ;SI为要存放转换后ASCII的间址寄存器。 CHANGEPROC CMPAL,10 JLJIA0 ADDAL,A-0-10;A-F值 JIA0:ADDAL,0;0-9值 MOVSI,AL;存ASCII INC SI RET CHANGEENDP CODEENDS;代码段结束 ENDSTART ;源程序结束,汇编语言编程练习:,1、在给定的数据区域中,找出最大数。 2、在给定的数据区域中,找出最大数 和最小数。,VARDW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物(安徽卷)(考试版)-2026年高考考前预测卷
- 搜索排序模型AB测试设计方案
- 临床药学服务体系建设标准
- 临时用电防火分区施工管理规定
- 混凝土搅拌运输车辆调度保障方案
- 消息队列吞吐率评估执行文档
- 模具工序刀具寿命优化制度
- 次世代视频编解码体验升级计划方案
- 激光切割车间来料检验规范
- 预制楼梯施工机械进场准备措施
- 2026山东菏泽生物医药职业学院招聘工作人员120人农业考试参考题库及答案解析
- 3.4 我们来造“环形山”课件(内嵌视频) 2025-2026学年教科版科学三年级下册
- 广东省茂名电白区七校联考2026届中考一模数学试题含解析
- 直播基地规划建设方案报告
- (新疆二模)新疆2026年普通高考三月适应性检测文科综合试卷(含答案)
- 喷漆房安全管理制度
- 《无人机导航定位技术》全套教学课件
- 山东中烟工业有限责任公司招聘笔试题库2026
- 公交车驾驶员的职业素养及规范
- (正式版)HGT 20593-2024 钢制化工设备焊接与检验工程技术规范
- JJG 638-2015液压式振动试验系统
评论
0/150
提交评论