微机原理与接口技术-第4-1章

上传人:woxinch****an2018 文档编号:44705977 上传时间:2018-06-14 格式:PPT 页数:74 大小:560.50KB
返回 下载 相关 举报
微机原理与接口技术-第4-1章_第1页
第1页 / 共74页
微机原理与接口技术-第4-1章_第2页
第2页 / 共74页
微机原理与接口技术-第4-1章_第3页
第3页 / 共74页
微机原理与接口技术-第4-1章_第4页
第4页 / 共74页
微机原理与接口技术-第4-1章_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《微机原理与接口技术-第4-1章》由会员分享,可在线阅读,更多相关《微机原理与接口技术-第4-1章(74页珍藏版)》请在金锄头文库上搜索。

1、微机原理与接口技术第4章 模块化程序设计教学重点p汇编语言程序设计方法p顺序程序设计p分支程序设计p循环程序设计p子程序设计p模块的设计系统功能调用方法p汇编程序提供给汇编语言程 序员的功能非常有限p程序员需要利用ROM-BIOS和操作系统提供的资源p系统功能调用是程序设计的 一个重要方面裸机汇编语言程序Windows系统功能调用是通过 Win32 API函数调用实现的系统功能调用方法pBIOS是OS的核心,主要功能是驱动系统的外部设备。pDOS层的功能模块在系统盘中,在系统启动时被装入内存。主要功能是文件 管理、存储管理、设备管理等。系统功能调用步骤p通常按照如下4个步骤进行: 在AH寄存器

2、中设置系统功能调用号 在指定寄存器中设置入口参数 用中断调用指令( INT i8)执行功 能调用 (BIOS中断号为51FH) 根据出口参数分析功能调用执行情 况BIOS功能模块调用pBIOS中的键盘输入p在BIOS系统中,提供了中断16H来实现键盘输入功能,其具体的功能如下:p00H从键盘读一个字符,输入字符不回显p01H判断键盘缓冲区内是否有字符可读p02H读取当前键盘状态字。p例如从键盘读入一个字符,需完成以下3步:p入口参数:无;pAH00H;pINT 16H;p其出口参数,也就是键入的字符的ASCII码在 AL中。BIOS功能模块调用pBIOS中的屏幕输出pBIOS系统提供了中断10

3、H来实现各种屏幕处理功能。p00H设置显示器模式 01H设置光标形状p02H设置光标位置 03H读取光标信息 p05H设置显示页 p06H、(07H)向上滚屏和(向下滚屏)p08H读光标处的字符及其属性 p09H在当前光标处按指定属性显示字符p0AH在当前光标处显示字符 0CH写图形象素p0DH读图形象素 0FH读取显示器模式p例如在显示器上显示一个字符需完成以 下3步:p入口参数:pAL需显示字符的ASCII码,pBH 页号,pBL 字符的显示属性。pAH09HpINT 10Hp执行完成后,就会在显示器上按指定的 字符属性显示该字符。p例4-3 用键盘最多输入10个字符,并存 入内存变量Bu

4、ff中,若按“Enter”键,则表示输入结束。p用BIOS层功能调用实现 的源程序: .MODEL SMALLCREQU0DH.STACK200H.DATA Buff DB 10 DUP(?).CODE.STARTUPMOVCX, 0AHLEABX, Buff.REPEATMOV AH, 0HINT 16H.BREAK .IF AL=CRMOV BX,ALINC BX.UNTILCXZ.EXIT 0ENDDOS输入输出功能调用pDOS利用21H号中断提供给用户近百个 系统功能,主要包括设备管理、目录管理 和文件管理三个方面的功能p重点掌握:p输入一个字符,01H号功能调用p输入一个字符串,0A

5、号功能调用p输出一个字符,02H号功能调用p输出一个字符串,09H号功能调用pDOS中的键盘输入p01H带回显的键盘输入 p06H控制台的输入/输出:当 DL=0FFH,表示键盘输入 p08H不回显的键盘输入p0AH键盘输入字符串 p0BH检查键盘有无输入p0CH清除输入缓冲区的输入功能p带回显的键入单个字符的功能调用,需 完成以下3步p选功能号01H于AH中p入口参数:无p通常使用“INT 21H”语句调用。p执行完成后,用户可从AL取出输入字符的ASCII码。p键入字符串功能调用,需完成以下3步:p功能号:AH0AH;p入口参数:DS:DX存储键入字符串的首 地址,(DS:DX)=允许键入

6、字符的个数;p第三,中断指令:INT 21H。p 执行完成后,用户可从DS:(DX+2)单元取 出输入字符的ASCII码,从DS:(DX+1)取出实际键入字符的个数。pDOS中的显示器输出p02H显示的字符p06H控制台的输入/输出:当DL0FFH,表示显示字符p09H在屏幕上显示一个字符串02H号DOS功能调用p输出一个字符 功能调用号:AH02H 入口参数:DL欲显示字符的ASCII码 功能调用:INT 21H 出口参数:无;显示一个问号“ ?” mov ah,02h;设置功能调用号 mov dl,?;设置入口参数 int 21h;功能调用例题-回车换行的子程序crlfproc push

7、ax;保护寄存器 push dx mov ah,2 mov dl,0dh;回车功能的ASCII码是0DH int 21h mov ah,2 mov dl,0ah;换行功能的ASCII码是0AH int 21h pop dx ;恢复寄存器 pop ax ret crlfendp09H号DOS功能调用p输出一个字符串 功能调用号:AH09H 入口参数:DS:DX欲显示字符串在内存中的首地址(逻辑 地址形式:DS段地址,DX偏移地址)内存中的字符串以ASCII码形式保存,最后必须添 加一个“$”结尾(并不显示) 功能调用:INT 21H 出口参数:无例题-在屏幕上显示一段信息;数据段(定义要显示的字

8、符串)stringdb Hello, Assembly !,0dh,0ah,$;代码段(显示字符串的程序)mov dx,offset stringmov ah,9int 21hHello, Assembly !程序功能01H号DOS功能调用p输入一个字符 功能调用号:AH01H 入口参数:无 功能调用:INT 21H 出口参数:AL键入字符的ASCII码;输入一个字符 mov ah,01h;设置功能调用号 int 21h;功能调用 mov dl,al;使用出口参数结束用户程序的方法START PROC FARBEGIN: PUSH DSMOV AX, 0PUSH AX.RETSTART END

9、P推荐采用第1种方法。MOV AH, 4CHINT 21HINT 20HJMP 0MOV AH, 0INT 21HWindows层功能模块的调用pWin32 API中包含了大量的函数,结构和消息 等。除了OS自身运行需要之外,还提供调用。pWin32的功能模块放在Windows的动态连接库 (DLL)中pWin32 APU的核心由3个DLL提供pKernel32.dll系统服务功能,包括内存管理 ,任务管理和动态链接。pGdi32.dll图形设备接口。pUser32.dll用户接口服务。建立窗口和传 送消息等。Windows层功能模块的调用pWin32 API使用堆栈来传递参数pAPI函数调用

10、pC语言的消息框函数的声明:int MessageBox(HWND hWnd, / handle to owner windowLPCTSTR lpText, / text in message boxLPCTSTR lpCaption, / message box titleUINT uType / message box style);/参数最后还有一句说明:Library: Use User32.lib./说明这个函数的位置p汇编的声明格式:pMessageBox Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:d wordp汇编中

11、调用MessageBox 函数的方法是:push uTypepush lpCaptionpush lpTextpush hWndcall MessageBoxp使用invoke 语句pMicrosoft 在MASM6.11中提供了一 条伪指令实现利用堆栈传递参数的子程序 调用,那就是invoke 伪指令,它的格式 是:invoke 函数名,参数1,参数 2.p 对MessageBox 的调用在MASM 中 可以写成:invoke MessageBox,NULL,offset szText,offset szCaption,MB_OKpAPI 函数的返回值p有的API 函数有返回值,如Messa

12、geBox 定义的返回值是int类型的数,返回值的类型对 汇编程序来说也只有dword 一种类型,它永远 放在eax 中。如果要返回的内容不是一个eax 所能容纳的,Win32 API 采用的方法一般是返回一个指针,或者在调用参数中提供一个缓冲 区地址,干脆把数据直接返回到缓冲区中去。p函数的声明p在调用API 函数的时候,函数原型也必须预先声明,否则,编译器会不认这个函数 。invoke伪指令也无法检查参数个数。声明函数的格式是:p函数名proto 距离 语言 参数1:数据类型,参数2:数据类型, pinclude 语句p若程序用到了API 函数,则需要用include语句将函数声明包含进来

13、p假设程序使用了的函数分别在User32.dll 和 Kernel32.dll 中,在MASM32 工具包中已经包括了 所有DLL 的API 函数声明列表,每个DLL对应 文件,在源程序中只要使用include 语句包含进来就可以了pinclude user32.inc pinclude kernel32.incpincludelib语句p为了告诉链接程序使用哪个导入库,使 用的语句是:p includelib 库文件名p或includelib p假设使用的函数分别在User32.dll 和 Kernel32.dll 中,那么在源程序使用的相 应语句为:pincludelib user32.l

14、ibpincludelib kernel32.lib顺序程序设计p没有分支、循环等转移指令的程序,会 按指令书写的前后顺利依次执行,这就是 顺序程序p顺序结构是最基本的程序结构p完全采用顺序结构编写的程序并不多见例题STACK SEGMENT STACK STACKDW 64DUP(?) ;定义堆栈段 STACK ENDS DATA SEGMENTX DW 0010HY DW 0123HZ DW 7890HV DW 3456H ;分配变量X、Y、Z、VQR DW ? ;存放商REMAINDER DW ?;存放余数 DATA ENDS要求:计算(要求:计算(V V(X*YX*YZ Z540540

15、)/X/X例 代码段CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC START: MOV AX,DATAMOV DS,AX ;初始化DSMOV AX,X ;AXXIMUL Y;DX:AXX*YMOV CX,AXMOV BX,DX ;暂存在BX,CX中MOV AX,ZCWD;Z扩展ADD CX,AXADC BX,DX ;BX:CXX*YZ例 代码段(续1)SUB CX,540SBB BX,0;可能有借位MOV AX,VCWD ;扩展VSUB AX,CXSBB DX,BXIDIV XMOV QR,AX ;保存商MOV REMAINDER,DX;保存余数例 代码段(续2)MOV AH,4CHINT 21H;程序结束,返回到DOSMAIN ENDP;过程结束CODE END

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

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