汇编语言程序设计(自学)_第1页
汇编语言程序设计(自学)_第2页
汇编语言程序设计(自学)_第3页
汇编语言程序设计(自学)_第4页
汇编语言程序设计(自学)_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计(自学)一、设置自学型课程的目的二、自学型课程的教学形式及教师的作用三、本课程教学目标及学习方法四、本课程教学内容及要求五、课程考核方法一、设置自学型课程的目的培养独立学习新知识、新技能,发现问题、分析问题、解决问题的自主学习能力,适应科学技术和社会发展的要求。二、自学型课程的教学形式及教师的作用不进行课堂讲授,对自学课程提出学习要求,列出教材和参考书目,布置和批改课程作业,进行辅导、答疑、质疑,组织学生讨论,分析总结和组织课程考核等工作。本课程讨论采用网上(教育在线)和指定教室两种方式进行答疑辅导上机时间:12-16周周二7-815周周一5-8节地点:信北5071、沈美明、温冬婵。IBM-PC汇编语言程序设计(第二版),清华大学出版社,北京,2001.2、卜艳萍、周伟。汇编语言程序设计教程(第二版),清华大学出版社,北京,20073、沈美明、温冬婵编著,80x86汇编语言程序设计教程,清华大学出版社,北京,20014、葛洪伟、姜浩伟、赵雅群、黄蓓。Intel汇编语言程序设计,中国电力出版社,北京,2007。参考书通过本课程的学习,掌握汇编语言指令系统的功能、格式及寻址方式等基本概念的基础上,通过自修及老师的指导,学习利用汇编语言进行程序设计,为后续的微型计算机接口技术等相关课程的学习提供扎实的基础。通过仔细阅读教材及参考书,掌握汇编语言进行程序设计的方法,同时采用上机编程的形式对所学内容进行练习,即采用理论与实践相结合的方法学习。三、本课程教学目标及学习方法四、本课程教学内容及要求

1、汇编语言程序的开发过程2、顺序程序设计3、分支程序设计4、循环程序设计5、子程序设计6、系统功能子程序调用7、汇编语言程序的调试1、汇编语言程序的开发过程程序设计步骤1、分析问题,确定算法。2、选择程序设计语言。3、编制程序流程。4、正确、合理使用存储器和寄存器。5、编写程序。6、调试程序。2、顺序程序设计要求:掌握一个完整的汇编语言程序的结构框架。指令1指令2指令n指令n+1:例9-1设在数据段中定义有三个变量X,Y,Z, 请利用算术移位指令编写程序,计算出下式的值:Z=10*(X+Y)源程序:;设置数据段DATASEGMENTXDW20H;变量XYDW12H;变量YZDW?;变量ZDATAENDS;设置堆栈段STACK1SEGMENTPARASTACKDB10HDUP(0)STACK1ENDS;设置代码段CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XADDAX,YSALAX,1MOVBX,AXMOVCL,2SALAX,CLADDAX,BXMOVY,AXMOVAH,4CHINT21HCODEENDSENDSTART3、分支程序设计条件满足?语句1语句2YN条件满足?语句YN条件满足?分支程序的基本概念。利用比较/测试分支结构实现程序设计。利用分支表结构实现程序设计。重点:掌握分支程序的设计方法。难点:利用地址表、跳转表法实现分支程序设计。3、分支程序设计学习程序设计过程中需要注意掌握转移指令的运用。

分支程序主要包括:两分支程序设计

多分支程序设计条件转移法地址表法跳转表法程序如下: TEST DA1, 01H JE NEXT INCDA1NEXT:………测试DA1的第0位(DA1)0=0?DA1<=(DA1)+1

Y

N(b)程序段流程试编制一程序段,把DA1字节单元中数据变为偶数。分支结构——比较/测试

MOVAL,X CMPAL,0 JGEL1 MOVAL,0FFH JMPEXITL1: JEEXIT MOVAL,1EXIT:MOVY,AL求符号函数: -1 X<0Y(X)= 0 X=0 1 X>0分支结构——比较/测试:SUB1-L表首址SUB1-H:SUB3-HSUB4-LSUB4-HSUB5-LSUB5-HSUB2-LSUB2-HSUB3-L由跳转的入口地址组成由入口地址构造跳转表的多路分支程序设计。分支结构——地址表

TITLEEXAMPLEOFJUMPTABLE-1DATA SEGMENTJUMP_TABLE DWSUB1,SUB2,SUB3,SUB4,SUB5PARAM DB 3DATA ENDSSTACK1 SEGMENTPARASTACK DW 20H DUP(0)STACK1 ENDSCOSEG SEGMENT ASSUMECS:COSEG,DS:DATABEING: MOV AX,DATA MOV DS,AX : MOV AH,0 MOV AL,PARAM DEC AL SHL AL,1 MOV BX,OFFSETJUM_TABLE

ADD BX,AX MOV AX,[BX] JMP AX SUB1: ……… : JMP ENDO SUB2: ……… : JMP ENDO SUB3: ……… : JMP ENDO SUB4: ……… : JMP ENDO SUB5: ……… : ENDO: MOV AH,4CH INT 21H COSEG ENDS END BEING

MOVAL,X ADDAL,AL MOVAH,0 MOVBX,OFFSETTAB ADDBX,AX MOVAX,[BX] JMPAXSUB1: ... JMPOKSUB2: ... JMPOK利用地址表实现分支 分支结构——地址表由转移指令构造跳转表的多路分支程序设计。::表首址JMPSUB1JMPSUB2JMPSUB3JMPSUB4由跳转指令组成分支结构——跳转表 TITLE EXAMPLEOFJUMPTABLE-2DATA SEGMENTPARAM DW4DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCOSEG SEGMENT ASSUMECS:COSEG,DS:DATABEING: MOV AX,DATA MOV DS,AX : MOV BH,0 MOV BL,PARAM DEC BL MOV AL,BL SHL BL,1 ADD BL,AL ADD BX,OFFSETJUMP_TABLE

JMP BXJUM_TABLE: JMP SUB1 JMP SUB2 JMP SUB3 JMP SUB4 JMP SUB5SUB1: ……… : JMP ENDOSUB2: ……… : JMP ENDOSUB3: ……… : JMP ENDOSUB4: ……… : JMP ENDOSUB5: ……… :ENDO: MOV AH,4CH INT 21HCOSEG ENDS END BEING 4、循环程序设计循环程序的基本结构循环程序的控制方法多重循环程序设计重点:掌握循环程序的设计方法。难点:循环程序的控制方法:

计数控制法和条件控制法;多重循环程序设计。循环程序结构初始化部分工作部分修改部分循环结束结束处理部分YN循环结束工作部分修改部分结束处理部分初始化部分初始化部分Y控制部分控制部分N循环程序结构1、初始化部分设置地址指针、计数器初值2、工作部分3、修改部分4、控制部分用计数控制循环用条件控制循环5、结束处理部分循环控制方法1、用计数控制循环使用计数器,达到计数器预定值,循环结束。要求循环次数已知。计数器可以递增、递减可以选用寄存器、也可用存储单元2、用条件控制循环找出一个终止循环的条件,每循环一次,对条件进行一次检测。满足终止循环的条件,退出循环,否则继续。通常选用条件转移指令来控制循环是否结束。分清内外循环的任务和要求,划分内外循环中有规律变化的参数:地址指针、计数器确定内外循环的控制方法和具体实施。3、多重循环程序设计循环控制方法5、子程序设计子程序设计方法子程序的参数传递子程序的嵌套与递归

重点:掌握子程序的设计方法;主程序现场的保护与恢复。

难点:主程序和子程序之间的参数传递方法:寄存器传递参数法、存储器传递参数法、地址表传递参数法和堆栈传递参数法;子程序的嵌套与递归。程序基本结构主调过程(主程序)被调过程(子程序)查找程序字符输入串输入查找结果输出5、子程序设计过程定义过程调用过程返回需要掌握子程序设计方法1、适度地划分并确定子程序功能具有独立功能的程序作为一个模块多次出现的程序段独立出来2、选择适当的参量传递途径寄存器传递、参数表传递、地址表传递、堆栈传递3、信息的保存在主程序中保存信息在子程序中保存信息4、编写子程序的文字说明(1)在调用程序中保存信息

:PUSHPUSHPUSHCALLPOPPOPPOP:AXBXCXSUB_PROCCXBXAX;保存信息;调用子程序;恢复信息信息的保存(2)在子程序中保存信息SUB_PTOC1SUB_PROC1PROCPUSHBXPUSHCXPUSHSIPUSHBP::POPBPPOPSIPOPCXPOPBXRETENDP子程序功能的指令序列信息的保存过程调用——参数传递用寄存器传递—适合参数较少情况用参数表传递—适合参数较多情况用堆栈传递—适合参数多情况UPTOLWPROCPUSHFCMPAL,‘A’JBUP1CMPAL,‘Z’JAUP1ADDAL,‘a’-‘A’UP1:POPFRETUPTOLWENDP把大写字母改为小写字母;子程序名:UPTOLW;功能:大写转换小写;入口参数:AL=待转字符;出口参数:AL中放转换完字符MOVAL,‘R’CALLUPTOLWMOVDL,AL过程调用——寄存器传递ARYDW-86,420,7,…,40COUNTDW100SUMDW?TABDW3DUP(?)MOVTAB,OFFSETARYMOVTAB+2,OFFSETCOUNTMOVTAB+4,OFFSETSUMLEABX,TABCALLPADDMOVDX,SUM …...PADDPROCMOVSI,[BX]MOVDI,[BX+2]MOVCX,[DI]MOVDI,[BX+4]XORAX,AXL:ADDAX,[SI]ADDSI,2LOOPLMOV[DI],AXRETPADDENDP过程调用——参数表传递过程调用——用栈传递参数在主调程序中压入参数参数和返回地址在栈中的位置在被调过程中读取参数在主调程序中读取返回的参数利用堆栈传递参数,实现数组ARRAY单元的累加。

DATASEGMENTARRAYDW21,22,23,24,25,26,27COUNTDW($-ARRAY)/2RESULTDW?DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,OFFSETARRAY;将ARRAY的地址入栈

PUSHAXMOVAX,COUNT;将COUNT入栈

PUSHAXMOVAX,OFFSETRESULT;将RESULT的地址入栈

PUSHAX

CALLSUM_PROCMOVAH,4CHINT21HCODEENDSENDSTARTSUM_PROCPROCPUSHAX;将子程序中用到的寄存器入栈保护

PUSHSIPUSHDIPUSHBP

MOVBP,SPMOVSI,[BP+14];将ARRAY的地址取出,存入SIMOVCX,[BP+12];将COUNT的内容取出,存入CX

MOVDI,[BP+10];将RESULT的地址取出,存入DIXORAX,AX;AX寄存器初始化

LOP:ADDAX,[SI];累加

ADDSI,2;修改指针,移到下一单元

LOOPLOPMOV[DI],AX;将结果保存到RESULT中

POPBPPOPDI;恢复寄存器

POPSIPOPAXRET6ENDP用栈传递参数处理要点压入参数CALL 从栈中弹出压入的参数用BP间址方式取出参数处理RET主调程序被调过程参数压入顺序与取出顺序相反参数的个数和类型按事先约定存取调用结束时,从栈中清除压入的参数6、系统功能调用系统功能调用——由OS提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。系统功能调用有两种,一种称为DOS功能调用,另一种称为BIOS功能调用。应用程序外设硬件接口BIOSDOS系统功能调用采用软中断指令

INTn(其中:n为中断类型码)(1)PUSHF,TF、IF清0,CS、IP入栈(2)按中断类型码n,从中断向量表对应位置取出将要调用的功能子程序的入口地址CS,IP(3)功能子程序返回:IRETDOS功能调用调用方法:入口参数子程序编号送AHINT21HDOS功能调用基本I/O功能调用

功能入口参数出口参数说明键盘输入AH=1 AL=字符ASCII码 字符显示控制台输入AH=8 同1号 无显示显示输出AH=2 DL=字符ASCII码打印输出AH=5 DL=字符ASCII码直接控制台AH=6,7 ZF=0,AL=字符ASCII码 输入/输出DL=0FFH/字符码 ZF=1无键按下 字符串输出AH=9 字符串须以‘$’结束

DS:DX=串首址字符串输入AH=0AH 首先定义缓冲区(1)从键盘输入一个字符(功能号=1)

MOVAH,1;等待按键INT21H;字符回显<AL中有键入的字符>

(2)从键盘输入一个字符,无显示(功能号=8)

MOVAH,8INT21H<AL中有键入的字符>DOS功能调用

例:程序中有时需要用户对提示做出应答

GET_KEY:MOVAH,1

;等待键入字符

INT21H

;结果在AL中

CMPAL,’Y’ ;是’Y’?JZYES ;是,转YESCMPAL,’N’ ;是’N’?JZNO ;是,转NOJMPGET_KEY;否则继续等待输入YES: …

…NO: …(3)在显示器上显示一个字符(功能号=2)

MOVDL,<要显示的字符>MOVAH,2INT21H例:在显示器上显示一个字符‘A’MOVDL,’A’;或MOVDL,

41HMOVAH,2INT21HDOS功能调用(4)MOVDL,0FFH ;键盘输入MOVAH,6INT21HMOVDL,24H ;屏幕输出MOVAH,6INT21HDOS功能调用(5)显示字符串(功能号=9)

LEADX,<字符串>

MOVAH,9 INT21H注意:被显示的字符串必须以’$’结束。DOS功能调用DATASEGMENTBUFDB‘HOWDOYOUDO?$’...DATAENDS...MOVAX,DATAMOVDS,AX...MOVDX,OFFSETBUFMOVAH,9INT21H...

例:显示一字符串(6)输入字符串(功能号=0AH)此功能调用从键盘输入一串字符并把它存入用户指定的缓冲区中。LEADX,<字符串缓冲区首地址>MOVAH,

0AHINT21H

DOS功能调用(预留的N1个字节的存储单元)

0DHN2N1N1:缓冲区长度(最大键入字符数)N2:实际键入的字符数(不包括回车符)用户定义的输入字符串的缓冲区格式DATASEGMENTBUFDB10 ;缓冲区长度

DB? ;实际输入个数

DB10DUP(?) ;存储空间DATAENDS...MOVAX,DATAMOVDS,AX...LEADX,BUFMOVAH,10INT21H...

例:输入字符串DOS功能调用基本I/O功能调用

功能入口参数出口参数说明设置日期AH=2BH AL=0或AL=0FFH 均为二进制数

CX=年号

DH=月,DL=日读取日期AH=2AH CX=年号 均为二进制数

DH=月,DL=日设置时间AH=2DH CH=小时,CL=分 AL=0或AL=0FFH 均为二进制数

DH=秒,DL=毫秒读取时间AH=2CH CH=小时,CL=分 均为二进制数 DH=秒,DL=毫秒MOVCX,1999MOVDH,5MOVDL,20MOVAH,2BH ;设置日期INT21H ;1999.5.20MOVAH,2AH ;取得日期INT21H ;cx:dx=1999.5.20MOVYEAR,CXMOVMONTH,DHMOVDAY,DLDOS功能调用(7)设置/读出日期MOVCX,090FHMOVDX,0200HMOVAH,2DH ;设置时间INT21H ;9点15分2秒MOVAH,2CH ;取得时间INT21H ;cx:dxMOVHOURS,CXMOVMINUTES,DHMOVSECOND,DLDOS功能调用(8)设置/读出时间BIOS功能调用BIOS调用通过多个软中断提供,调用方法为:

MOVAH,<功能号>

<设置入口参数,一般将参数放在寄存器中> INT <中断类型>

BIOS中的几个主要中断类型如下:

INT10H——屏幕显示

INT13H——磁盘操作

INT14H——串行口操作

INT16H——键盘操作 INT17H——打印机操作 每类中断由包含许多子功能,调用时通过功能号指定。BIOS功能调用键盘输入——16H号功能调用 功能 出口参数 说明AH=0 AL=字符的ASCII码从键盘读一个字符 AH=1 ZF=1表示无键可读判键盘是否有键可读ZF=0表示有键可读AH=2 AL=功能键状态字节取特殊功能键当前状态BIOS功能调用打印输出——17H号功能调用

功能入口参数出口参数说明AH=0 AL=字符代码 打印一个字符DX=打印机号 AH=1 DX=打印机号 初始化打印机 AH=2 DX=打印机号 AL=状态字节取打印机状态BIOS功能调用显示输出——10H号功能调用功能入口参数出口参数说明AH=0 AL=方式号设置显示方式AH=1 CH=光标开始行号置光标类型 CL=光标结束行号AH=2 DH=行号,DL=列号置光标位置 BH=页号AH=3 BH=页号

DH=行号,DL=列号读光标位置 CX=当前光标大小AH=5 AL=页号选择当前显示页BIOS功能调用显示输出——10H号功能调用功能入口参数出口参数说明向上滚屏 AH=6,AL=上滚行数,BH=空行属性

CH、CL=滚动左上角行列号

DH、DL=滚动右下角行列号向下滚屏 AH=7

其余同6读光标处 AH=8 AL=字符字符和属性 BH=页号 AH=属性将字符和属性AH=9,AL=字符写到光标处BH=页号,CX=个数

BL=字符属性/颜色将字符写到 AH=0AH 属性不变光标位置 其余同9编辑程序源程序文件宏汇编程序MASM目标程序文件语法有错?N链接程序LINKYAB.ASM.OBJ.LST可执行文件调试程序DEBUG有错吗?N结束YAB.EXE.MAP7、汇编语言程序的调试1、编辑源程序用DOS下的文本编辑器EDIT编写程序。C:\>EDITFibonacci.ASM

(回车)2、产生目标文件对已经编辑好的.ASM文件,可以用宏汇编程序MASM进行汇编,汇编后生成二进制代码的目标程序。C:\>MASMFibonacci.ASM(回车)MASM在汇编源程序时,产生三个文件。目标文件、列表文件、交叉引用符号表文件(CRF文件)3、连接产生可执行文件汇编程序生成的目标文件,必须经过连接程序连接后,才可以得到在计算机上运行的可执行程序。C:\>LINKFibonacci(回车)连接程序连接后,可以产生三个文件。可执行文件,清单文件、需要连接的库文件

4、运行程序C:\>Fibonacci(回车)DOS下使用DEBUG调试1、进入与退出命令DEBUG文件名[参数表]如果需要退出DEBUG状态,返回操作系统,可以使用退出命令Q。2、显示命令显示寄存器内容——R命令显示存储器内容——D命令反汇编命令——U命令3、修改命令汇编指令——A命令修改寄存器内容——R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论