




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.3汇编语言程序设计基本方法4.3.1程序设计概述1、汇编语言程序设计的一般步骤:(1)分析题意,确定算法(2)根据算法画出程序框图(3)根据框图编写程序(4)上机调试程序汇编语言程序的上机过程1、用文字编辑工具(EDIT或记事本)将源程序输入,其扩展名为.ASM。2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3、用LINK将.OBJ文件连接成可执行的.EXE文件。4、在DOS状态下运行产生的.EXE文件。5、若程序本身在屏幕上无显示或未出现预期结果,用DEBUG查看程序结果或者调试程序。6、如果修改了源程序,则必须重新进行汇编、连接,运行。myfile.asm编辑程序汇编程序连接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe(如:MASM、TASM等)(如:DOS下的EDIT、window下的记事本)(如:LINK、TLINK等)程序运行步骤及生成的文件汇编程序的主要功能:检查源程序,给出出错信息。产生目标文件(.obj)和列表文件(.lst)。
展开宏指令。汇编程序功能4.3.1程序设计概述2、几个关键点(1)数据(原始数据)输入方式①用数据定义伪指令提供数据②用立即数的形式提供数据③用键盘提供数据(2)数据(运算结果)输出方式①用数据定义伪指令预留存储单元,②在显示器上显示输出,(3)返回DOS的方式分支结构复合结构:多种程序结构的组合…顺序结构循环结构3、汇编语言程序的基本结构子程序结构4.3.2顺序结构程序设计顺序结构是一种最简单最基本的程序结构。在汇编语言中,顺序结构的程序主要由数据传送、算术运算或者逻辑运算等指令组合而成。程序实行时,一直线方式一条接着一条指令顺序执行。顺序结构程序设计举例1编写一个完整的汇编语言源程序,要求把数据段D_SEG中的NUM1和NUM2相加,并把结果存放在SUM中。其中NUM1,NUM2和SUM均为字变量,NUM1赋值为1234H,NUM2赋值为5678H。(代码段段名用C_SEG)。参考答案D_SEG SEGMENTNUM1 DW 1234HNUM2 DW 5678HSUM DW ?D_SEG ENDSC_SEG SEGMENTASSUMECS:C_SEG,DS:D_SEGSTART:MOVAX,D_SEGMOVDS,AX参考答案MOVAX,NUM1ADDAX,NUM2MOVSUM,AXMOVAX,4C00HINT21HC_SEGENDS ENDSTART顺序结构程序设计举例2题目:双字长数相加分析:利用16位加法指令分两次分别做高16位和低16位的加法运算。程序:DATA SEGMENTNUM1 DW0F271H,5B68HNUM2 DW5698H,0AC6DHSUM DW ?,?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,NUM1ADDAX,NUM2MOVSUM,AXMOVAX,NUM1+2ADCAX,NUM2+2MOVSUM+2,AXMOVAX,4C00HINT21HCODEENDS ENDSTART4.3.3分支结构程序设计分支程序根据条件的不同作不同的处理判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制分支结构程序流程分支程序的结构形式(二)相当于高级语言中的CASE语句判定条件分支语句体1分支语句体2条件1分支语句体n……条件2条件n分支结构:两分支,判断正负在NUM字节单元中有一个有符号数,判断其正负,如果为负数,则把“-”存入DL中,否则把“+”存入DL中DATASEGMENTNUMDB-1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX分支结构:两分支,判断正负
CMPNUM,0JNSNEXTMOVDL,’-’JMPEXITNEXT:MOVDL,’+’EXIT:MOVAX,4C00HINT21HCODEENDSENDSTART特别注意分支的出口换用JS条件转移指令改写后的程序
CMPNUM,0JSNEXTMOVDL,’+’JMPEXITNEXT:MOVDL,’-’思考:还可以用哪些条件转移指令改写?分支结构:三分支,符号函数分支结构:三分支,符号函数程序MY_DSEGMENTMEMSDB08HMEMDDB?MY_DENDSMY_CSEGMENTASSUMECS:MY_C,DS:MY_DSTART:MOVAX,MY_DMOVDS,AX分支结构:三分支,符号函数程序
MOVAL,MEMSCMPAL,0JNSNEXTMOVAL,-1;x<0,y=-1JMPDONENEXT:JEDONE;x=0,y=0MOVAL,1;x>0,y=1DONE:MOVMEMD,ALMOVAX,4C00HINT21HMY_CENDSENDSTART分支结构:两分支,判断奇偶(参考程序一)DATASEGMENTMEMDW12MEMADW?MEMBDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,MEMTESTAX,1JNZNEXTMOVMEMB,AXJMPDONENEXT:MOVMEMA,AXDONE:MOVAX,4C00HINT21HCODEENDSENDSTART分支结构:两分支,判断奇偶(参考程序二)DATASEGMENTMEMDW12MEMADW?MEMBDW?DATAENDS分支结构:两分支,判断奇偶(参考程序二)CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,MEMSHRAX,1JCNEXTRCLAX,1;恢复ax的值MOVMEMB,AXJMPDONENEXT:RCLAX,1;恢复ax的值MOVMEMA,AX分支结构:两分支,判断奇偶(参考程序二)DONE:MOVAX,4C00HINT21HCODEENDSENDSTART分支结构注意事项注意选用合适的条件转移指令,使程序简捷高效。编写分支程序,需留心分支的开始和结束。特别要注意分支的结束,一般要在先写的分支的最后加上无条件转移指令JMP,使其跳转到最后写的分支的后面。作业:第四章课后题1、3多分支程序设计多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。判定条件分支语句体1分支语句体2条件1分支语句体n……条件2条件n多分支程序设计的实现方法多分支可以化解为双分支或单分支结构的组合;利用地址表形成多分支。循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体循环指令和转移指令可以实现循环控制4.3.4循环结构程序设计DO-WHILE结构控制条件初始化循环体YN控制条件初始化循环体YNDO-UNTIL结构循环结构程序的形式初始化:设置循环的初始状态,如设置循环次数、变量等。循环体:循环的工作部分及修改部分控制条件:根据对循环条件的判断结果,控制循环的执行或结束。主要有:计数控制、特征值控制、地址边界控制。循环结构程序的组成循环控制条件是循环程序设计的关键,必须结合对算法的分析与考虑合理地选择。同时,必须仔细地考虑边界情况出现的可能性,以免在特殊情况下造成错误。
注意事项:循环结构:统计负数的个数DATASEGMENTBUFFDB67H,9EH,-6AH,0ABH,6DHMEMDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX循环结构:统计负数的个数
MOVCX,5;设置循环次数
LEABX,BUFFXORDL,DLNEXT:MOVAL,[BX]ADDAL,0JNSAA1INCDLAA1:INCBX LOOPNEXT循环结构:统计负数的个数
MOVMEM,DL MOVAX,4C00HINT21HCODEENDS ENDSTART循环结构:统计负数的个数(另外的方法)NEXT:MOVAL,[BX]SHLAL,1ADCDL,0;负数的最高有效位是1AA1:INCBX LOOPNEXT编程实现1+2+3+……+100,把和存放在内存字单元SUM中。解答:DATASEGMENTSUM DW?DATAENDS循环结构:求累加和举例1CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXXORAX,AX;累加和寄存器AX清0 MOVCX,100;设置循环次数
MOVDX,1NEXT:ADDAX,DX ;从1,2,...,99,100正序累加
INCDX LOOPNEXT MOVSUM,AX ;将累加和送入指定单元
MOVAH,4CHINT21HCODEENDS ENDSTART代码段参考一CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXXORAX,AX;累加和寄存器AX清0 MOVCX,100;设置循环次数NEXT:ADDAX,CX ;从100,99,...,2,1倒序累加
LOOPNEXT MOVSUM,AX ;将累加和送入指定单元
MOVAH,4CHINT21HCODEENDS ENDSTART代码段参考二例:求首地址为ARRAY的20个字之和,结果存入TOTAL中。解答:DATASEGMENTARRAYDW20DUP(0101H)TOTAL DW?DATAENDS循环结构:求累加和举例2循环结构:求累加和举例2CODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATA MOVDS,AXMOVCX,20MOVAX,0MOVSI,AXSTART:ADDAX,ARRAY[SI]ADDSI,2LOOPSTARTMOVTOTAL,AX MOVAH,4CHINT21HCODEENDS ENDBEGIN循环结构在屏幕上显示一列20个*显示一个*后光标移到下一行开始处的程序段。MOVAH,02HMOVDL,’*’INT21HMOVAH,02HMOVDL,0DH;回车符号INT21HMOVAH,02HMOVDL,0AH;换行符号INT21H循环结构:在屏幕上显示一列20个*CODESEGMENTASSUMECS:CODEBEGIN:MOVCX,20NEXT:MOVAH,02HMOVDL,’*’INT21HMOVAH,02HMOVDL,0DH;回车符号
INT21HMOVAH,02HMOVDL,0AH;换行符号
INT21HLOOPNEXT MOVAH,4CHINT21HCODEENDS ENDBEGIN循环结构:统计偶数的个数并显示DATASEGMENTBUFFDB0,1,2,3,4,-1,-2,-3,-4DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXLEABX,BUFFMOVCX,9XORDL,DL循环结构:统计偶数的个数并显示LOOP1:TESTBYTEPTR[BX],1JNZNEXTINCDLNEXT:INCBXLOOPLOOP1ADDDL,30HMOVAH,2INT21H循环结构:统计偶数的个数并显示
MOVAX,4C00HINT21HCODEENDS ENDSTART4.3.5子程序设计把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率子程序的设计方法过程定义伪操作(P93)
过程名
PROC[属性]
……
RET过程名 ENDP
其中过程名为标识符,它又是子程序入口的符号地址,与标号的作用相同。
属性(Attribute)是指类型属性,可以是NEAR或FAR。用户对过程属性的确定原则很简单,即:
(1)如果调用程序和过程在同一个代码段中,则使用NEAR属性。
(2)如果调用程序和过程不在同一个代码段中,则使用FAR属性。CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA……CALLSUBP……MOVAH,4CHINT21HSUBPPROC……RETSUBPENDPCODEENDSENDSTART带子程序结构的源程序框架举例子程序结构:在屏幕上显示一列20个*CODESEGMENTASSUMECS:CODEBEGIN:MOVCX,20NEXT:CALLDISPLOOPNEXT MOVAX,4C00HINT21HRETDISPPROCMOVAH,02HMOVDL,’*’INT21H子程序结构:在屏幕上显示一列20个*
MOVAH,02HMOVDL,0DH;回车符号
INT21HMOVAH,02HMOVDL,0AH;换行符号
INT21HDISPENDPCODEENDS ENDBEGIN4.4中断调用4.4.1DOS系统功能调用1.什么是DOS系统功能调用系统功能调用是DOS为用户提供的常用子程序(80多个),可在汇编语言程序中直接调用。这些子程序的主要功能包括:(1)设备管理(如键盘、显示器、打印机、磁盘等的管理)。(2)文件管理和目录操作。(3)其他管理(如内存、时间、日期等管理)。2.DOS功能调用方法DOS功能调用的子程序已按顺序编号——功能号(00H~68H),其调用方法是:(1)功能号→AH。(2)入口参数→指定寄存器(有的无此项)。(3)INT21H。用户只须给出以上三方面信息,DOS即可根据所给信息自动转到相关子程序执行。3.常用的系统功能调用(1)键盘输入①1号调用——从键盘输入单个字符。调用格式:MOV AH,1INT 21H功能:等待从键盘输入一个字符并送入AL(2)显示输出2号调用——在显示器上显示输出单个字符调用格式:
MOV DL,待显示字符的ASCII码
MOV AH,2INT 21H功能:将DL中的字符送显示器显示。例1:在屏幕上显示字母AMOVDL,’A’MOV AH,2INT 21H例1程序的完整格式CODESEGMENTASSUMECS:CODESTART:MOVDL,’A’MOVAH,2INT 21HMOVAH,4CH;结束程序,返回DOSINT21HCODEENDSENDSTART接收键盘输入的小写字母,显示其大写CODESEGMENTASSUMECS:CODESTART:MOVAH,1INT21H;接收键盘上的单字符输入
SUBAL,20H;变成大写字母的ASCII码
MOVDL,ALMOVAH,02HINT21H;单字符显示输出
MOVAH,4CH;结束程序,返回DOSINT21HCODEENDSENDSTART例2:从键盘上接收一个字符,然后显示在下一行CODESEGMENTASSUMECS:CODESTART:MOVAH,1INT21H;接收键盘上的单字符输入
MOVAH,02HMOVDL,0DH;回车符号
INT21HMOVAH,02HMOVDL,0AH;换行符号
INT21HMOVDL,ALMOVAH,02H;单字符显示输出
INT21HMOVAH,4CH;结束程序,返回DOSINT21HCODEENDSENDSTART例3:在DAT字节单元中有一个有符号数,判断其正负,如果为负数,则显示“-”,否则显示“+”。DATASEGMENTDATDB-1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省苏州市同里中学2024-2025学年初三年级第一次模拟考试(二)数学试题含解析
- 江苏省四校联考2025届高三第二学期月考(三)英语试题含解析
- 家具定制交易合同
- 版个人房屋建设承包协议案例
- 铝门采购合同
- 2《让家更美好》表格式公开课一等奖创新教学设计 统编版七年级上册道德与法治
- 建筑项目劳动力计划和主要设备供应计划
- 人教部编版二年级上册课文4口语交际:商量教案设计
- 经管营销多维-广东溢达-问题分析与解决培训核心片段记录-1021-22
- 八年级数学下册 第20章 数据的初步分析20.2 数据的集中趋势与离散程度 1数据的集中趋势第2课时 中位数与众数教学设计 (新版)沪科版
- 科学知识点(知识清单)五年级上册科学粤教版
- 设备维修规程
- 西川煤矿整合区矿山地质环境保护与土地复垦方案
- Unit 6 Lesson 1 A Medical Pioneer教学设计 高中英语北师大版(2019)必修第二册
- 英语答题卡2023年全国小学生英语能力测评(NEPTP)低年级组
- 国家开放大学《哲学基础》形考任务1-3参考答案
- 输电线路外力破坏危害及特点
- 医院工作中常见的法律风险和对策专家讲座
- (完整word版)扣字词汇124
- 升压站建筑工程施工作业指导书
- GB/T 24825-2009LED模块用直流或交流电子控制装置性能要求
评论
0/150
提交评论