微机课件第6章1章节

上传人:E**** 文档编号:90924348 上传时间:2019-06-20 格式:PPT 页数:99 大小:700.50KB
返回 下载 相关 举报
微机课件第6章1章节_第1页
第1页 / 共99页
微机课件第6章1章节_第2页
第2页 / 共99页
微机课件第6章1章节_第3页
第3页 / 共99页
微机课件第6章1章节_第4页
第4页 / 共99页
微机课件第6章1章节_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《微机课件第6章1章节》由会员分享,可在线阅读,更多相关《微机课件第6章1章节(99页珍藏版)》请在金锄头文库上搜索。

1、6.1 汇编源程序的编程格式 6.2 系统功能调用 6.3 程序设计举例 6.4 Windows 汇编语言编程初步,第6章 汇编语言程序设计,汇编源程序有两种编程格式: EXE文件的编程格式:只能生成扩展名为EXE 的可执行文件; COM文件的编程格式:可以生成扩展名为COM 的可执行文件。 COM文件的执行级别高于EXE文件,同名的BAT(批处理)文件执行级别最低。,6.1 源程序的编程格式,EXE文件的编程格式,此格式允许源程序使用多个逻辑段(包括数据段、堆栈段、代码段及其它逻辑段); 在实模式下,每个逻辑段的目标块不超过64K; 适合编写大型程序。,.486 DATA SEGMENT U

2、SE16 ;定义数据段 MESG DB I AM A STUDENT!,$ DATA ENDS CODE SEGMENT USE16 ;定义代码段 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX LAST: MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,4CH INT 21H ;返回DOS CODE ENDS END BEG,EXE文件的内存映象,磁盘上的EXE文件包括两部分: 装入模块和重定位信息 DOS装载EXE文件时,根据重定位信息完成装入模块的重定位。同时,重定位信息被丢弃。 DOS在同一内存块

3、的用户程序上方(低地址处)偏移地址为00HFFH的单元处自动生成一个 256字节的数据块,称为程序段前缀(PSP)。 DOS自动使DS=ES=存放PSP的段基址,使CS:IP指向用户程序的启动地址,INT 20H,数据段,代码段,堆栈段,DS,ES,CS:IP,SS,SP,注:DOS把EXE文件调入内存后,自动给SS、SP赋初值, 程序中给SS、SP赋初值的指令可省略。,PSP(256字节),用户程序,COM文件的编程格式,汇编语言要求此格式必须符合以下规定: 源程序只允许使用一个逻辑段,即代码段,不允许设置堆栈段; 程序使用的数据,可以集中设置在代码段的开始或未尾; 在代码段偏移地址(有效地

4、址)为100H的单元,必须是程序的启动指令; 代码段目标块小于64K。 COM文件的编程格式适合于编写中小型程序。,.486 CODE SEGMENT USE16 ASSUME CS:CODE ORG 100H BEG: JMP START MESG DB HELLO,0DH,0AH,$ ;用户程序数据区 START: MOV CX,10 ;设置循环次数 LAST: MOV AH,9 MOV DX,OFFSET MESG INT 21H ;显示一行HELLO LOOP LAST ;循环计数 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END BEG,COM文件的内存

5、映象,磁盘上的COM文件没有重定位信息,体积比EXE文件小。 DOS装载COM文件时,在同一内存块的用户程序上方(低地址处)偏移地址为00HFFH的单元处自动生成一个 PSP; 然后从偏移地址100H处开始存放用户程序; DOS自动使CS=DS=ES=SS=存放PSP的段基址,使IP=100H,SP=FFFEH。,INT 20H,代码段,堆栈段,CS,DS ES,SS,IP,(FFFEH) SP,PSP(256字节),用户程序 (64K-256),返回DOS的其它方法 EXE格式文件可以借用PSP首单元的 INT 20H 返回DOS 执行完用户程序后,使CS:IP指向PSP的首单元。 DOS在

6、装载EXE文件时将DS指向该单元,故可采取措施: 把执行程序放在一个远过程中; 用户程序在给SS、SP赋初值后,DS赋值前,用三条指令把PSP的首单元的物理地址(DS:0000H)压入堆栈,即: PUSH DS MOV AX,0 PUSH AX 返回DOS时,执行RET指令,栈顶四个字节弹出分别送CS和IP,即可执行INT 20H指令。 COM格式文件可直接执行INT 20H 指令,.486 ;方式定义 DATA SEGMENT USE16 ;定义数据段 MESG DB HELLO,0DH,0AH,$ DATA ENDS CODE SEGMENT USE16 ;定义代码段 ASSUME CS:

7、CODE,DS:DATA,SS:STACK ;说明段约定 MAIN PROC FAR ;为什么定义成远过程? BEG: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LAST: MOV AH,9 MOV DX,OFFSET MESG INT 21H ;显示显示一行HELLO RET ;返回DOS MAIN ENDP CODE ENDS END BEG ;汇编结束,源程序清单:,6.2 系统功能调用,DOS的4个组成部分中IBMBIO.COM和IBMDOS.COM是DOS系统的核心模块 IBMBIO.COM为基本I/O设备处理程序,与BIOS一起完

8、成数据输入和数据输出的基本操作 IBMDOS.COM是磁盘文件管理程序;,这两个模块均有若干子功能可以被用户程序调用,称为“DOS功能调用”和“BIOS功能调用”(系统功能调用),PC-DOS的模块结构,DOSShell,DOSKernel,DOSBIOS,1. 命令处理程序 命令解释,外部命令装入等。,2. DOS 内核程序 MSDOS. SYS包括文件管理、磁盘管理、 DOS功能调用等。 该模块以系统功能调用的方式供用户使用, INT 21H,3. DOS基本输入输出程序模块 IO.SYS管理输入输出设备 (显示器、键盘、打印机、串行通信设备等) 的驱动,并转换为ROMBIOS固件的设备

9、控制程序的请求。,DOSShell,DOSKernel,DOSBIOS,DOS命令,ROMBIOS,显 示 器 卡,盘 控 制 卡,串行口卡,键盘接口,打印机卡,应用层,DOS 服务层,ROMBIOS 服务层,硬件控制层,应用程序,INT 10H,INT 13H,INT 14H,INT 16H,INT 17H,INT 21H,高端,用户程序通过INT 21H软中断指令调用DOS系统功能,调用模式如下: MOV AH,功能号 设置入口参数 INT 21H 分析出口参数 功能号: 代表一个不同功能的子程序,DOS功能调用,调用模式: MOV AH,功能号 设置入口参数 INT 21H 分析出口参数

10、,DOS功能调用,【功能号01H】 等待键入一个字符,有回显,响应Ctrl_C。 入口参数:无。 出口参数:AL按键的ASCII码。若AL0,表明按键是功能键、光标键,需再次调用本功能,才能返回按键的扩展码。,调用方式: MOV AH,1 INT 21H,DOS功能调用,【功能号02H】 显示一个字符,响应Ctrl_C。 入口参数:DL待显字符的ASCII码。 出口参数:无。 本功能在屏幕的当前位置显示一个字符,光标 右移一格,如果是在一行末尾显示字符,则光标 返回下一行的开始格。如果是在屏幕的右下角 显示字符,光标返回时屏幕要上滚一行。 注意:该功能要破坏AL寄存器的内容。,DOS功能调用,

11、Eg: MOV DL , A MOV AH , 2 INT 21H 屏幕上显示一个字符A,【功能号07H】 等待键入一个字符,无回显,不响应Ctrl_C。 入口参数:无。 出口参数:AL按键的ASCII码,若AL0,需再次调用该项功能才能在AL中得到按键的扩展码。 【功能号08H】 等待键入一个字符,无回显,响应Ctrl_C。 入口参数:无。 出口参数:AL按键的ASCII码,若AL0,需再次调用该项功能才能在AL中得到按键的扩展码。 【功能号09H】 显示字符串,响应Ctrl_C。 入口参数:DS:DX字符串首地址,字符串必须以$(即ASCII码24H)为结束标志 出口参数:无。 该项功能从

12、屏幕当前位置开始,显示字符串,遇到结束标志$时停止,$字符并不显示 注意:9号功能破坏AL寄存器的内容,DOS功能调用,Eg:在屏幕上显示I AM A STUDENT!,分析:将I AM A STUDENT!定义在数据段,并在!后加一个字符$,利用9号DOS功能调用,即可完成显示,DOS功能调用,.486 DATA SEGMENT USE16 ;定义数据段 MESG DB I AM A STUDENT!,$ DATA ENDS CODE SEGMENT USE16 ;定义代码段 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX LAST: MO

13、V AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,4CH INT 21H ;返回DOS CODE ENDS END BEG,源程序清单:,【功能号0AH】 等待键入一串字符送用户程序数据缓冲区。 入口参数:DS:DX指向放键入字符的缓冲区 缓冲区定义形式规定为:,DOS功能调用,EG: BUF DB 100 DB ? DB 100 DUP(?),DOS功能调用,出口参数:存放于缓冲区的字符串,以回车键结尾 调用方式: MOV AH,0AH INT 21H 注意:缓冲区定义的第二个字节由系统设置,其余 由用户定义; 若输入的字节数少于定义的字节数,缓冲区 其余字节

14、补零; 若输入的字节数大于定义的字节数,后来输入 的字符丢弃且响铃警告。,DOS功能调用,例: 人机会话程序,Li mei?(Y/N),What is your name?,1.会话内容及设计思路,Li nei ;前者是程序给出的询问信息, 后者是用户键入的回答,N ;程序复制的姓名和回答提示,Li mei ;再次问答,Li nei?(Y/N),What is your name?,Y,问题提出: 如何设置程序运行所需的数据?方法如下: 数据设置在程序的数据段 程序运行时通过人机会话临时键入 程序装入时通过命令行参数给出 本例学习前两种方法,并以此学习DOS功能调用,DOS功能调用,2. 框图

15、:,N,DOS功能调用,DATA SEGMENT USE16 MESG1 DB 0DH,0AH DB What is your name ?$ MESG2 DB ?(Y/N)$ BUF DB 30 DB ? DB 30 DUP(? ) DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DA:DATA BEG: MOV AX,DATA MOV DS,AX AGAIN: MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;询问姓名 MOV AH,0AH MOV DX,OFFSET BUF INT 21H ;接收键入字符串 MOV BL,BUF+1 MOV B

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号