版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章汇编程序第一页,共六十二页,编辑于2023年,星期五第四章汇编语言程序设计汇编语言语句的类型和组成伪操作命令
DOS系统功能调用和BIOS中断调用汇编语言程序设计第二页,共六十二页,编辑于2023年,星期五汇编语言语句的组成1.指令性语句。即执行性语句(指令)包括四部分:[标号:]指令操作码[操作数][;注释]AGAN:ADCSUM,AX 2.指示性语句。即说明性语句(伪指令),由四部分组成:[名字]伪指令[操作数][;注释]SUM DW0 ;为结果保留一个字3.宏指令语句。[宏名]宏操作助记符[操作数][;注释]第三页,共六十二页,编辑于2023年,星期五汇编语言对标识符的规定可用符号包括数字、字母和特殊符号?、$、@、_。数字不能作为名字(变量或标号)的第一个符号。名字的长度不能超过31个字符。汇编语言中有特定含义的保留字,如操作码、寄存器名等,不能作为名字使用。不区分字母的大小写。第四页,共六十二页,编辑于2023年,星期五DATA SEGMENT ;定义数据段XDB2 DATA ENDS ;数据段定义结束STACKSEGMENTPARASTACK‘STACK’ ;定义堆栈段DB100DUP(?) ;100字节的栈空间STACK ENDS ;堆栈段定义结束CODE SEGMENT ;定义代码段ASSUMEDS:DATA,SS:STACK,CS:CODE ;对各段进行说明BEGIN:MOVAX,DATA ;DS初始化为DATA MOVDS,AXMOVBH,XCODE ENDS ;代码段结束
END BEGIN ;整个程序结束
汇编语言程序结构定义存储单元的数据定义堆栈第五页,共六十二页,编辑于2023年,星期五汇编语言开发过程
一、上机前的软件准备:MS-DOS操作系统(如:MSDOS6.22,MSDOS7.0等)文本编辑器(如:EDIT.COM,TURBO.EXE,TC.EXE,C.EXE等)汇编程序(如:MASM.EXE,ASM.EXE等)连接程序(如:LINK.EXE等)调试程序(如:DEBUG.EXE等)第六页,共六十二页,编辑于2023年,星期五编辑文本编辑器,如EDIT.COM源程序:文件名.asm汇编汇编程序,如ML.EXE目标模块:文件名.obj连接连接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如CodeView应用程序错误错误错误错误汇编语言程序的开发过程第七页,共六十二页,编辑于2023年,星期五OFFSET运算符当OFFSET运算符置于变量或标号前时,汇编程序就自动计算出该变量或标号在它段内的偏移地址。如:BUFFERDB34,56,79,12MOVSI,OFFSETBUFFER运算符第八页,共六十二页,编辑于2023年,星期五运算符2.PTR运算符表达式返回一个与原操作数具有相同的段基址和偏移量,但类型不同的操作数。格式:类型PTR地址表达式如:MOVBYTEPTR[SI],20HMOVWORDPTR[SI],20H第九页,共六十二页,编辑于2023年,星期五基本伪指令--符号定义伪指令
基本形式: 符号名 EQU 表达式 符号名 =常数表达式功能:给表达式指定一个等价的符号名。说明:(1)=后的表达式只能是常数,对于字符或字符串,汇编时按整数处理。例如:
COUNT = 20 MOVCX,COUNT ;等价于MOVCX,20(2)EQU后的表达式可以是数值、字符串、寄存器名、指令助记符等。(3)EQU不能重复定义,而=可重复定义,其作用域从定义点到重新定义之前。第十页,共六十二页,编辑于2023年,星期五基本伪指令--数据类型定义伪指令DB(DefineByte)DW(DefineWord)DD
(DefineDWord)操作数可以为:(1)数值表达式;(2)ASCⅡ码字符串;(3)地址表达式;(4)?(只保存内存空间,未定义初始值);(5)DUP子句格式:重复次数DUP(操作数,…,操作数)DUP子句可以嵌套。第十一页,共六十二页,编辑于2023年,星期五DB、DW的应用特点DATASEGMENTARE1DB20H,30HARE2DW2030HARE3DB‘AB’ARE4DW?DATAENDS20H30H30H20H41H42H00H00HARE1ARE2ARE3 ARE4V1DB20DUP(?)V2DW4DUP(3,5)V3DB5DUP(3DUP(2),7)V4DB10DUP(‘ABCD’)基本伪指令--数据类型定义伪指令第十二页,共六十二页,编辑于2023年,星期五基本伪指令--地址计数器伪指令$表示下一个地址变量的偏移地址值
SORTDSEGMENTARRAYDB25,46,3,75,5COUNTEQU$-ARRAYSORTDENDSARRAY的偏移地址值为0000H$的偏移地址值为0005HCOUNT=0005H–0000H=525463755ARRAY0000H0005H$第十三页,共六十二页,编辑于2023年,星期五汇编语言程序设计程序设计一般应按下述步骤进行(对于给定的课题进行程序设计):1.依据设计任务,建立数学模型。2.确定算法或求解的具体步骤和方法。3.绘制出程序流程框图。4.分配存储空间及工作单元(包括寄存器)。5.依据流程图编写程序。6.静态检查(检查指令是否合适,是否有语法和格式错误)。7.上机调试。第十四页,共六十二页,编辑于2023年,星期五基本程序设计顺序程序设计指令指针IP值线性增加条件程序设计
IP值受标志位的影响而跳变循环程序设计
IP值受计数器CX中的值不为零而循环第十五页,共六十二页,编辑于2023年,星期五DOS系统功能调用
DOS系统将输入/输出管理程序编写成一系列子程序,不仅系统可以使用,用户也可以像调用子程序一样方便的使用它们。在IBMPC系统中,除了DOS系统中有一组输入/输出子程序可供用户调用外,在系统的ROM中也有一组输入/输出管理程序可供用户使用,这组程序常称为ROMBIOS(ROMBasicI/OSystem)。第十六页,共六十二页,编辑于2023年,星期五DOS系统功能调用DOS共提供了约100个功能调用,按其完成的功能大致可以分为以下几类:基本输入/输出的管理(如键盘、显示器等)文件管理目录管理等调用方法:为了使用的方便,DOS所有功能的子程序已按序编号—功能号,从00H-68H。DOS规定用软件中断指令INT21H进入DOS功能调用子程序的总入口,再以具体的功能号进入相应各个子程序的入口。第十七页,共六十二页,编辑于2023年,星期五DOS系统功能调用具体调用方法为:①MOVAH,功能号②[入口参数→指定寄存器]③INT21H④[取出口参数]常用功能子程序功能号键盘输入单字符01H键盘输入字符串0AH输出单字符02H输出字符串09H返回操作系统4CH第十八页,共六十二页,编辑于2023年,星期五带回显的字符输入,功能号01H功能:从标准输入设备(如键盘)输入一个字符,并显示在标准输出设备(如CRT)上。如无字符输入,则等待。入口参数:无返回值:AL=输入字符的ASCII码例:MOVAH,01H ;功能编号
INT21H ;调用
CMPAL,0DH ;输入字符是回车符吗?
…第十九页,共六十二页,编辑于2023年,星期五字符输出,功能号02H功能:将一个字符(ASCII码)输出到标准输出设备(如CRT)上入口参数:DL=即将输出字符的ASCII码返回值:无例:MOVDL,‘$’;欲输出一个“$”符号
MOVAH,02H ;功能编号
INT21H ;调用第二十页,共六十二页,编辑于2023年,星期五输出字符串,功能号09H功能:向标准输出设备输出以“$”为结束符的字符串(“$”符不显示),串中不含控制符入口参数:地址指针DS:DX,指向待输出的字符串首址返回值:无例:
STRDB‘TodayisMonday.$’;即将输出的字符串
… LDSDX,STR ;DS:DX为指针
MOVAH,09H ;功能编号
INT21H ;调用第二十一页,共六十二页,编辑于2023年,星期五带缓冲区的字符串输入,功能号0AH功能:由用户提供缓冲区,从标准输入设备输入一个以回车符(0DH)结束的字符串并接收在缓冲区内,同时回显在标准输出设备上(不显示回车符)。入口参数:地址指针DS∶DX,指向接收缓冲区的首址返回值:无例:STRDB20,?,20DUP(?);用户定义的缓冲区
LENDB? ;实际串长单元
LDSDX,STR ;DS:DX为STR指针
MOVAH,0AH ;功能编号
INT21H ;调用
LEASI,STR MOVLEN,[SI+1] ;实际串长第二十二页,共六十二页,编辑于2023年,星期五例1:计算Y=X1+X2+X3。①表达式Y=X1+X2+X3的计算过程可采用顺序执行的方法来完成:首先读入数据X1、X2、X3;其次计算X1、X2、X3的和;最后保存结果到指定变量Y中。②根据计算步骤编写汇编语言程序:利用伪指令确定存储器的分配,将X1、X2、X3定义为字变量;按照汇编语言源程序结构要求编写源程序。思考:计算D=(A+B)*4-C第二十三页,共六十二页,编辑于2023年,星期五DATASEGMENTDATA1DWX1,X2,X3,?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,[DATA1]
ADDAX,[DATA1+2]
ADDAX,[DATA1+4]
MOV[DATA1+6],AXHLTCODEENDSENDSTART第二十四页,共六十二页,编辑于2023年,星期五例2:把BX中的二进制数用十六进制形式显示出来。MOVCH,4AGAIN:MOVCL,4ROLBX,CLMOVAL,BLANDAL,0FHORAL,30HCMPAL,3AHJBNEXTADDAL,07HNEXT:MOVDL,ALMOVAH,2INT21HDECCHJNZAGAIN第二十五页,共六十二页,编辑于2023年,星期五例3:用查表法求Z=X3DATASEGMENTTABLEDB0,1,8,27,64,125,216XVALDB6YVALDB?DATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEABX,TABLEMOVAL,XVALXLATMOVYVAL,ALCODEENDSENDSTART第二十六页,共六十二页,编辑于2023年,星期五分支结构程序设计
程序中所产生的分支是由条件转移指令来完成的。第二十七页,共六十二页,编辑于2023年,星期五例1:从键盘上输入字符,若为A~Z,显示;若为0,则结束输入。
LP1:MOVAH,01H;置键盘输入并回显
INT21H;系统功能调用
CMPAL,0;输入字符与0比较
JELP2;为零结束
CMPAL,‘A’;判断是否小于大写字母AJLLP1;小于大写字母A返回重新输入
CMPAL,‘Z’;判断是否大于大写字母ZJGLP1;大于大写字母Z返回重新输入
MOVDL,AL;将AL内容送DL,作为输入参数
MOVAH,02;置显示输出
INT21H;将A~Z的字符从显示器输出LP2:MOVAH,4CH;带返回码结束INT21HINT21H第二十八页,共六十二页,编辑于2023年,星期五例2:实现表达式波形图Y=1(X>0)
0(X=0)-1(X<0)X在-128~+127之间XY第二十九页,共六十二页,编辑于2023年,星期五流程图第三十页,共六十二页,编辑于2023年,星期五DATASEGMENTXDB?YDB?DATAENDSCODESEGMENTASSUMECS:CODE;DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XCMPAL,0JGEBIG;X>=0转BIGERMOVAL,0FFH;-1的补码为FFHMOVY,AL;Y=-1
JMPNEXTBIG:JEEQUL;X=0转EQULMOVAL,1MOVY,AL;Y=1JMPNEXTEQUL:MOVY,AL;Y=0NEXT:HLTCODEENDSENDSTART第三十一页,共六十二页,编辑于2023年,星期五例3:从键盘接收0~9范围的数字字符,按值显示对应的英语单词,如“0”显示“Zero”、“1”显示“One”等,若为其它字符,则不做任何处理。可在程序中安排十条分支以显示十个不同的英语单词。利用跳转表(地址表),具体算法如下:①将不同分支的入口地址L0,L1,...,L9顺序存入表中,每个入口地址占一个字,设表首址为TAB,用户键入数字为i,则:Li的存放地址=TAB+2*i②将Li的存放地址送BX,然后用指令“JMPWORDPTR[BX]”实现分支转移。分析:第三十二页,共六十二页,编辑于2023年,星期五SSEGSEGMENTSTACKDB1024DUP(0)SSEGENDSDATASEGMENTINPUTDB'PleaseinputX(0...9):$'D0DB'-Zero$'D1DB'-One$'D2DB'-Two$'D3DB'-Three$'D4DB'-Four$'
D5DB'-Five$'D6DB'-Six$'第三十三页,共六十二页,编辑于2023年,星期五
D7DB'-Seven$'D8DB'-Eight$'D9DB'-Nine$'TABDWL0,L1,L2,L3,L4;字符串地址表
DWL5,L6,L7,L8,L9ERRMSDB0AH,0DH,‘Inputerror:'CODESEGMENTASSUMECS:CODE,DS:DATA,SS:SSEGBEGIN:MOVAX,DATAMOVDS,AX第三十四页,共六十二页,编辑于2023年,星期五
MOVDX,OFFSETINPUTMOVAH,09HINT21HMOVAH,1INT21HCMPal,30hJBDERRCMPal,39hJADERRANDAL,0FHXORAH,AHADDAX,AX
MOVBX,OFFSETTABADDBX,AXJMPWORDPTR[BX]L0:MOVDX,OFFSETD0JMPDISPL1:MOVDX,OFFSETD1JMPDISPL2:MOVDX,OFFSETD2JMPDISPL3:MOVDX,OFFSETD3JMPDISPL4:MOVDX,OFFSETD4第三十五页,共六十二页,编辑于2023年,星期五JMPDISPL5:MOVDX,OFFSETD5JMPDISPL6:MOVDX,OFFSETD6JMPDISPL7:MOVDX,OFFSETD7JMPDISPL8:MOVDX,OFFSETD8JMPDISPL9:MOVDX,OFFSETD9JMPDISPDERR:MOVDX,OFFSETERRMSMOVAH,09HINT21HEXIT:MOVAH,4CHINT21HCODEENDSENDBEGIN
第三十六页,共六十二页,编辑于2023年,星期五循环结构程序设计针对的是处理一些重复进行的过程的操作。使用循环结构形式设计程序时,通常将循环程序划分三个部分:
①循环的初始化部分:变量赋初值。
②循环体:可以有一个或多个。
③循环控制部分:是否结束循环的条件。知道循环次数:可采用循环计数控制循环的结束;不知道循环次数:多采用结果及给定特征作为条件来控制循环的结束。循环程序设计第三十七页,共六十二页,编辑于2023年,星期五一般循环次数有可能为零时,选择DO_WHILE形式结构,否则选择DO_UNTIL结构形式。循环程序设计DO_UNTIL(直到型循环结构)DO_WHILE(当型循环结构)第三十八页,共六十二页,编辑于2023年,星期五
(a)单循环结构;(b)双循环结构在多重循环程序设计中应注意:①内循环体可以几个并列在外循环体内,但内循环体之间不得交叉。②多重循环中可从内循环体转移到外循环体,但不允许外循环体直接转到内循环体中。③所编程序不能形成死循环程序。循环程序设计第三十九页,共六十二页,编辑于2023年,星期五例1:要求将偏移地址为1000H开始存放的100个字节的数据传送到偏移地址为1500H开始的连续内存区。假设它们的段地址存放在DS中,段地址为2000H。MOVAX,2000HMOVDS,AXMOVSI,1000HMOVDI,1500HMOVCX,100LOOP:MOVAL,[SI]
MOV[DI],ALINCSIINCDIDECCXJNZLOOPHLT第四十页,共六十二页,编辑于2023年,星期五例2:计算和清0→AX计数初值100→CX
(AX)=(AX)+(CX)(CX)=(CX)-1(CX)=0SUM=(AX)YN流程图第四十一页,共六十二页,编辑于2023年,星期五DATASEGMENTSUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAIN:MOVAX,DATAMOVDS,AXMOVAX,0;和清零第四十二页,共六十二页,编辑于2023年,星期五MOVCX,100;赋计数初值AGAIN:ADDAX,CX;累加
DECCX;计数器减1JNZAGAIN;CX不为零循环
MOVSUM,AXMOVAH,4CH;DOS中断号送AHINT21H;INT21H返回CODEENDS;结束代码段
ENDMAIN;结束汇编第四十三页,共六十二页,编辑于2023年,星期五数表的处理——气泡法排序功能:表中数据从乱序25、46、3、75、5、30
到升序3、5、25、30、46、75方法:全比较法(效率较低)标志位识别法(本例所用)综合程序设计实例1第四十四页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序方法一———全比较法若表数据项为N,要进行N-1次排序操作第一次,经比较将最小数放入表顶第二次,经比较将次小数放入表次顶
...第N-2次,经比较将次大数放入表次底第N-1次,经比较将最大数放入表底第四十五页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序方法二———标志位识别法设排序标志F若标志F=-1
进入比较排序程序若标志F=0
数己排好,退出比较排序程序注:对N项数,排序次数≤N-1
第四十六页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序流程图标志(BL)=-1
开始
(BL)=0结束(BL)=0标志
(CX)=N–1计数(SI)=N–1指针j-1<j
j-1↔j
(BL)=-1
(SI)=(SI)-1(CX)=(CX)-1(CX)=0YYY第四十七页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序数据段定义
SORTDSEGMENT
;段名SORTD
ARRAYDB25,46,3,75,5,30
COUNTEQU$-ARRAY
;数据个数
SORTDENDS第四十八页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序气泡图(从下向上比大)25463755303254657530352546307535253046753525304675原数据第一次第二次第三次重排一次第四十九页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序代码段编程
CODESEGMENT;段名为CODEASSUMECS:CODE,DS:SORTDSORDPROCFAR;过程名为SORDSTART:PUSHDSMOVAX,0PUSHAXMOVAX,SORTDMOVDS,AX;过程定义标准写法第五十页,共六十二页,编辑于2023年,星期五MOVBL,0FFH;标志(BL)=-1AG0:CMPBL,0JZDONEMOVBL,0MOVCX,COUNTDECCX;(CX)=N–1MOVSI,COUNTDECSI;SI指向表底AG1:MOVAL,[SI]CMPAL,[SI–1]JAEUNCH;[SI]≥[SI-1]不交换
XCHGAL,[SI–1]MOV[SI],AL;[SI]↔[SI-1]交换
MOVBL,0FFH;有交换,未排好,重排,(BL)=-1UNCH:DECSIDECCXJNZAG1;一个数排好
JMPAG0;所有数排好DONE:RET;过程返回
SORDENDP;过程结束
CODEENDS;代码段结束
ENDSTART;汇编结束第五十一页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序程序的改进在显示屏上观察排序的过程方法在指令JNZAG1与指令JMPAG0之间插入显示程序过程
JNZAG1;一个数排好插入显示程序
JMPAG0;所有数排好
第五十二页,共六十二页,编辑于2023年,星期五数表的处理——
气泡法排序显示程序
MOVDH,COUNT;显示COUNT个数据(本例为6个)LEADI,ARRAY;从表首址开始
ABC:MOVAL,[DI]MOVAH,0;将AL扩展到AXMOVBH,10;除数为10DIVBH;数的十位→(AL),个位→(AH)MOVBH,AH;BH暂存AH中数,AH下面要用
MOVAH,2;INT21H的2号功能为显示字符
MOVDL,ALADDDL,30H;AL中数的ASCII码入DLINT21H;显示十位数
MOVDL,BHADDDL,30HINT21H;显示个位数
MOVDL,‘’INT21H;显示两数间的空格第五十三页,共六十二页,编辑于2023年,星期五综合程序设计实例2有一组数据(16位而进制数)存放在缓冲区BUF1中,数据个数保存在BUF的头两个字节中。要求编写程序实现在缓冲区中查找某一数据,如果缓冲区中没有该数据,则将它插入到缓冲区的最后;如果缓冲区中有多个被查找的数据,则只保留第一个,将其余的删除。
第五十四页,共六十二页,编辑于2023年,星期五STACKSEGMENTSTACK'STACK'DW100HDUP(?)TOPLABELWORDSTACKENDS;设缓冲区原有10个字,指定的数据为(NEW)=56AAHDATASEGMENTBUFDW10DW1000H,0025H,6730H,6758H,7344H,2023H,0025H6745H,10A7H,0B612HDW10DUP(?)NEWDW56AAHDATAENDS第五十五页,共六十二页,编辑于2023年,星期五CODESEGMENTASSU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级家庭奖惩制度
- 酒店员工服务奖惩制度
- 如何给自己制定奖惩制度
- 贵金属部门奖惩制度范本
- 工程机械考核与奖惩制度
- 氧气站安全生产奖惩制度
- 护士长如何落实奖惩制度
- 肿瘤病例上报奖惩制度
- 二年级奖惩制度积分细则
- 家具行业产品奖惩制度
- 徐州工业职业技术学院单招职业技能测试参考试题库(含答案)
- 秦皇岛地质考察报告
- 抖音取消实名认证申请函(个人)-抖音取消实名认证申请函
- 0~3岁婴幼儿营养与喂养(高职)全套教学课件
- 新闻写作的真实性原则
- 产业经济学-王俊豪主编
- 海岸工程海岸防护概论
- 静态与动态分析指标
- 《铁路技术管理规程》普速铁路部分
- YS/T 690-2009天花吊顶用铝及铝合金板、带材
- GB/T 4937.3-2012半导体器件机械和气候试验方法第3部分:外部目检
评论
0/150
提交评论