ImageVerifierCode 换一换
格式:PPT , 页数:81 ,大小:444KB ,
文档编号:5563721      下载积分:15 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-5563721.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(momomo)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(《微型计算机基本原理与应用》课件第6章 汇编语言程序设计及应用.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

《微型计算机基本原理与应用》课件第6章 汇编语言程序设计及应用.ppt

1、 第第6章章汇编语言程序设计及应用汇编语言程序设计及应用本章主要内容本章主要内容(1)汇编语言程序设计的基本方法及典型应用)汇编语言程序设计的基本方法及典型应用(2)Windows环境下的汇编语言程序设计环境下的汇编语言程序设计(3)汇编语言与高级语言混合编程技术简介)汇编语言与高级语言混合编程技术简介6.1 汇编语言程序设计的基本方法汇编语言程序设计的基本方法6.1.1 程序设计的基本步骤程序设计的基本步骤n1.分析问题分析问题n分析问题就是要弄清问题的性质、目的、已知数据以及运算精度要求、运算速度要求等内容,抽象出一个实际问题的数学模型。n2.确定算法确定算法n把问题转化为计算机求解的步骤

2、和方法,并且尽量选择逻辑简单、速度快、精度高的算法。n 3.画流程图画流程图n流程图一般是利用一些带方向的线段、框图等把解决问题的先后次序等直观地描述出来。如下图所示。对于复杂问题,可以画多级流程图,即先画粗框图,再逐步求精。n4.编写程序编写程序n按汇编语言程序的格式将算法和流程图描述出来。编程中应注意内存工作单元和寄存器的合理分配。n5.静态检查静态检查n静态检查就是在程序非运行状态下检查程序。良好的静态检查可以节省很多上机调试的时间,并常常能检查出一些较隐蔽的问题。n6.上机调试上机调试n这是程序设计的最后一步,目的在于发现程序的错误并设法更正。应注意在上机调试中积累经验,以提高调试的效

3、率。6.1.2 程序的基本结构形式程序的基本结构形式n1.顺序结构顺序结构n该结构指从程序起始地址开始顺序执行各条指令直至程序结束,无分支,无循环,无转移。这种结构在逻辑上是很简单的,所以又叫简单结构。n2.分支结构分支结构n实际程序中经常会要求计算机作出判断,并根据判断结果做不同的处理。这种根据不同情况分别做处理的程序结构就是分支结构。通常有两种分支结构,即IF-THEN-ELSE结构和CASE结构,如图6.2所示。n3.循环结构循环结构n有两种基本的循环结构,即WHILE-DO 结构和REPEAT-UNTIL结构,如图6.3所示。n例例6.1 分析下列程序段的结构特点,并指出其功能。分析下

4、列程序段的结构特点,并指出其功能。nMOV CX,0n MOV AX,DS:2000HnCONT:TEST AX,0FFFFHn JE EXITn JNS SKIPn INC CXnSKIP:SHL AX,1n JMP CONTnEXIT:n这是一个属于“先判断,后执行”的WHILE-DO结构的循环程序段。该程序段的功能是:检测内存2000H字单元中“1”的个数,并将检测结果存放于CX寄存器中。n例例6.2 编程实现将偏移地址编程实现将偏移地址1000H开始的开始的100个字节单元个字节单元数据传送到偏移地址数据传送到偏移地址2000H开始的单元中。开始的单元中。n程序段如下:程序段如下:nM

5、OV SI,1000H ;n MOV DI,2000H;初始化n MOV CX,100 ;n LOP:MOV AL,SI ;n MOV DI,AL ;n INC SI ;循环体n INC DI ;n DEC CX ;n JNE LOP ;循环控制n HLT n容易看出,该程序段属于“先执行,后判断”的REPEAT-UNTIL循环结构。6.1.3 子程序设计子程序设计n子程序又称过程子程序又称过程(Procedure),CALL指令和指令和RET指令分指令分别实现子程序的调用和返回。调用和返回分为段内操作和别实现子程序的调用和返回。调用和返回分为段内操作和段间操作,可通过段间操作,可通过NEAR

6、和和FAR属性参数来定义,两种操属性参数来定义,两种操作在堆栈处理时有所不同。作在堆栈处理时有所不同。n一般来说,有两种类型的程序段适合编成子程序。一种是一般来说,有两种类型的程序段适合编成子程序。一种是多次重复使用的,编成子程序可以节省存储空间。一种是多次重复使用的,编成子程序可以节省存储空间。一种是具有通用性、便于共享的,例如键盘管理程序、字符串处具有通用性、便于共享的,例如键盘管理程序、字符串处理程序等。理程序等。n子程序设计中需要注意的几个问题子程序设计中需要注意的几个问题:1.现场的保护与恢复现场的保护与恢复n如果在子程序中要用到某些寄存器或存储单元,为了不破如果在子程序中要用到某些

7、寄存器或存储单元,为了不破坏原有信息,要将它们的内容压入堆栈加以保护,这就叫坏原有信息,要将它们的内容压入堆栈加以保护,这就叫保护工作现场。保护可以在主程序中实现,也可以在子程保护工作现场。保护可以在主程序中实现,也可以在子程序中实现。现场恢复是指子程序完成特定功能后弹出压在序中实现。现场恢复是指子程序完成特定功能后弹出压在堆栈中的信息,以恢复到主程序调用子程序时的现场。堆栈中的信息,以恢复到主程序调用子程序时的现场。2.参数的传递参数的传递n参数传递的方法一般有三种:用寄存器传送,用参数表传参数传递的方法一般有三种:用寄存器传送,用参数表传送和用堆栈传送。送和用堆栈传送。(1)用寄存器传递参

8、数用寄存器传递参数n用寄存器传递参数适用于参数个数较少的场合。主程序将子程序执行用寄存器传递参数适用于参数个数较少的场合。主程序将子程序执行时所需要的参数放在指定的寄存器中,子程序的执行结果也放在规定时所需要的参数放在指定的寄存器中,子程序的执行结果也放在规定的寄存器中。的寄存器中。(2)用参数表传递参数用参数表传递参数n这种方法适用于参数较多的情况。它是在存储器中专门规定某些单元这种方法适用于参数较多的情况。它是在存储器中专门规定某些单元放入口参数和出口参数,即在内存中建立一个参数表,这种方法有时放入口参数和出口参数,即在内存中建立一个参数表,这种方法有时也称约定单元法。也称约定单元法。(3

9、)用堆栈传递参数用堆栈传递参数n该方法适用于参数多并且子程序有多重嵌套或有多次递归调用的情况该方法适用于参数多并且子程序有多重嵌套或有多次递归调用的情况。主程序将参数压入堆栈,子程序通过堆栈的参数地址取得参数,并。主程序将参数压入堆栈,子程序通过堆栈的参数地址取得参数,并在返回时使用在返回时使用“RET n”指令调整指令调整SP指针,以删除栈中已用过的参指针,以删除栈中已用过的参数,保证堆栈的正确状态及程序的正确返回。数,保证堆栈的正确状态及程序的正确返回。3.嵌套与递归嵌套与递归n子程序中调用别的子程序称为子程序嵌套。如图子程序中调用别的子程序称为子程序嵌套。如图6.4所示。设计嵌套所示。设

10、计嵌套子程序时要注意正确使用子程序时要注意正确使用CALL和和RET指令,并注意寄存器的保护和指令,并注意寄存器的保护和恢复。只要堆栈空间允许,嵌套层次不限。恢复。只要堆栈空间允许,嵌套层次不限。n子程序调用它本身称为递归调用。在图子程序调用它本身称为递归调用。在图6.4中,当子程序中,当子程序1与子程序与子程序2是同一个程序时,就是递归调用。设计递归子程序的关键是防止出现是同一个程序时,就是递归调用。设计递归子程序的关键是防止出现死循环,注意脱离递归的出口条件。死循环,注意脱离递归的出口条件。n下面给出一个包括了子程序嵌套和递归调用的例子。该程下面给出一个包括了子程序嵌套和递归调用的例子。该

11、程序求一个数的阶乘序求一个数的阶乘n!。n!定义如下:定义如下:1!(1)!nn n;0,1;1nnn求求n!本身可以设计成一个子程序,由于本身可以设计成一个子程序,由于n!是是n和和(n1)!的的乘积,而求乘积,而求(n1)!必须递归调用求必须递归调用求n!子程序,但每次调子程序,但每次调用所用参数都不相同。用所用参数都不相同。n因为递归调用过程中,必须保证不破坏以前调用时所用的因为递归调用过程中,必须保证不破坏以前调用时所用的参数和中间结果,所以通常都把每次调用的参数、中间结参数和中间结果,所以通常都把每次调用的参数、中间结果以及子程序中使用的寄存器内容放在堆栈中。果以及子程序中使用的寄存

12、器内容放在堆栈中。n此外,递归子程序中还必须含基数的设置,当调用的参数此外,递归子程序中还必须含基数的设置,当调用的参数等于基数时则实现递归退出,保证参数依次出栈并返回主等于基数时则实现递归退出,保证参数依次出栈并返回主程序。程序。n求求 n!的具体程序如下:的具体程序如下:n DATA SEGMENT ;数据段数据段n n DW 4 ;定义定义n值值n RESULT DW?;结果存于结果存于RESULT中中nDATA ENDSnSTACK SEGMENT STACK ;堆栈段堆栈段n DB 100 DUP(?)nSTACK ENDSnCODE SEGMENT ;代码段代码段nASSUME C

13、S:CODE,DS:DATA,SS:STACKnMAIN PROC FAR ;主程序主程序n START:n MOV AX,DATAn MOV DS,AXn MOV AX,n n CALL FACT ;调用调用n!递归子程序递归子程序n MOV RESULT,CXn MOV AH,4CH ;返回返回DOS系统系统nINT 21Hn MAIN ENDPn FACT PROC NEAR ;定义定义n!递归子程序递归子程序n CMP AX,0n JNZ MULTn MOV CX,1 ;0!1nRETnMULT:PUSH AXn DEC AXn CALL FACTn POP AXn MUL CXn M

14、OV CX,AXn RETnFACT ENDPnCODE ENDSnEND START6.2 汇编语言的编程应用汇编语言的编程应用6.2.1 I/O与通信与通信n计算机与外设之间是通过称为计算机与外设之间是通过称为I/O接口的专门部件来进行联系接口的专门部件来进行联系和通信的,它们之间的信息交换是通过读写和通信的,它们之间的信息交换是通过读写I/O接口中的专门接口中的专门寄存器来实现的,这些寄存器也称寄存器来实现的,这些寄存器也称I/O端口(端口(I/O PORT)。nCPU与外设之间交换的信息包括数据、状态和控制信息。状与外设之间交换的信息包括数据、状态和控制信息。状态信息是指表示外部设备工

15、作状态的信息,如是否准备好或态信息是指表示外部设备工作状态的信息,如是否准备好或是否忙的信息。控制信息则用来控制外部设备的动作。是否忙的信息。控制信息则用来控制外部设备的动作。n一般每个一般每个I/O接口都有自己的数据寄存器、状态寄存器和控制接口都有自己的数据寄存器、状态寄存器和控制寄存器来存放相应的三种信息,读寄存器来存放相应的三种信息,读/写写I/O端口实际上就是读端口实际上就是读/写这三种写这三种寄存器寄存器。n下面举一个例子,是用并行打印机打印寄存器下面举一个例子,是用并行打印机打印寄存器AL中字符的过程:中字符的过程:nPRINT PROC NEARnPUSH AX ;保护所用到的寄

16、存器保护所用到的寄存器nPUSH DX nMOV DX,378H ;数据端口地址数据端口地址378HnOUT DX,AL ;输出要打印的字符输出要打印的字符nMOV DX,379H ;状态端口地址状态端口地址379HnWAIT:IN AL,DX ;读打印机状态读打印机状态nTEST AL,80H ;检查打印机是否忙检查打印机是否忙nJE WAITnMOV DX,37AH ;控制端口控制端口37AHnMOV AL,0DH ;选通打印机选通打印机nOUT DX,ALnMOV AL,0CH ;关打印机选通关打印机选通nOUT DX,ALnPOP DX ;恢复寄存器恢复寄存器nPOP AXnRETnP

17、RINT ENDP6.2.2 声音与时钟声音与时钟n8255 端口端口B的端口号为的端口号为61H,其数据寄存器的最低两位就其数据寄存器的最低两位就是用来实现这种控制功能的。因此,通过交替地设置这两是用来实现这种控制功能的。因此,通过交替地设置这两位的值就可以实现打开扬声器和关闭扬声器,就可以控制位的值就可以实现打开扬声器和关闭扬声器,就可以控制发声的时间,即控制音长。发声的时间,即控制音长。n8253内部有内部有3个计数器,其中计数器个计数器,其中计数器0用于系统时钟;计数用于系统时钟;计数器器1用作用作DMA的定时控制,计数器的定时控制,计数器2是一个方波发生器,是一个方波发生器,其输出经

18、一个与门连接到扬声器,扬声器发声的频率就是其输出经一个与门连接到扬声器,扬声器发声的频率就是该方波的频率。该方波的频率。n通过改变计数器通过改变计数器2(端口地址为端口地址为42H)产生的方波的频率,产生的方波的频率,就可以控制扬声器发声的频率,即控制音调。就可以控制扬声器发声的频率,即控制音调。n上面介绍了发声的原理,下面仿照上面介绍了发声的原理,下面仿照BEEP给出一个实例,它可以产生频率范给出一个实例,它可以产生频率范围为围为19Hz65535Hz的声音,持续时间是的声音,持续时间是10ms的倍数,在的倍数,在0.01s655.35s之间。之间。n;入口参数:;入口参数:DI中为要发声音

19、的频率值中为要发声音的频率值n;BX中为发声时间中为发声时间(10ms的倍数的倍数)nSOUND PROC NEARnPUSH AX ;保护寄存器的值保护寄存器的值nPUSH BXnPUSH CXnPUSH DXnPUSH DInMOV AL,0B6H ;该初始化值使计数器该初始化值使计数器2产生方波信号产生方波信号nOUT 43H,AL ;43H是是8253控制寄存器端口号控制寄存器端口号nMOV DX,12H ;DX,AX中的值设为中的值设为1234DCHnMOV AX,34DCHnDIV DI ;计算计数器计算计数器2的计数值,存放于的计数值,存放于AX中中nOUT 42H,AL ;设置

20、计数值设置计数值nMOV AL,AHnOUT 42H,ALnIN AL,61H ;读入读入8255端口端口61H的原值并保存在的原值并保存在AH中中nMOV AH,ALnOR AL,3 ;开扬声器开扬声器(将将8255端口端口61H的低两位置的低两位置1)nOUT 61H,ALnDELAY:MOV CX,2801 nDL10ms:LOOP DL10ms ;延时延时10msnDEC BX nJNZ DELAY ;延时延时BX值值10msnMOV AL,AH ;恢复恢复8255端口端口61H的原值的原值nOUT 61H,AL ;关闭扬声器关闭扬声器nPOP DInPOP DXnPOP CXnPOP

21、 BXnPOP AXnRETnSOUND ENDP6.2.3 乐曲程序乐曲程序n通过调用上面的发声程序(通过调用上面的发声程序(SOUND 过程),即可编写演过程),即可编写演奏乐曲的程序。由于在一首乐曲中,每个音符的音调和音奏乐曲的程序。由于在一首乐曲中,每个音符的音调和音长分别与频率和持续时间(节拍)有关,所以只要事先把长分别与频率和持续时间(节拍)有关,所以只要事先把控制频率的参数送入控制频率的参数送入DI寄存器,把控制持续时间(节拍)寄存器,把控制持续时间(节拍)的参数送入的参数送入BX寄存器,然后调用发声过程寄存器,然后调用发声过程SOUND,就可就可演奏出特定音调和音长的音符来。演

22、奏出特定音调和音长的音符来。n确定了音符与频率和持续时间的关系后,就可以根据特定确定了音符与频率和持续时间的关系后,就可以根据特定的乐谱将每个音符所对应的频率和持续时间定义成两个数的乐谱将每个音符所对应的频率和持续时间定义成两个数据表,然后编写程序依次取出数据表中的频率值和时间值,据表,然后编写程序依次取出数据表中的频率值和时间值,并通过调用发声程序(并通过调用发声程序(SOUND 过程),即可按乐谱演奏过程),即可按乐谱演奏出动听的乐曲了。出动听的乐曲了。n下面以图下面以图6.7中给出的奥运主题曲曲谱为例,说明编写乐中给出的奥运主题曲曲谱为例,说明编写乐曲程序的一般方法和过程。曲程序的一般方

23、法和过程。n编写乐曲程序的主要步骤如下:编写乐曲程序的主要步骤如下:n 定义演奏乐曲的频率表和节拍时间表(设表名分别为MUS_FREQ和MUS_TIME)。n 分别将频率表和节拍时间表的偏移地址送入SI和BP寄存器。nLEA SI,MUS_FREQnLEA BP,DS:MUS_TIMEn 取出表中的频率值送入DI,节拍时间值(10 ms的倍数)送入BX。nMOV DI,SInMOV BX,DS:BPn频率表中的最后一个数据1作为乐曲的结束符,也可采用其他的特定值。n 调用SOUND过程产生特定音调和节拍的乐音。6.2.4 键盘键盘I/On键盘通常有编码键盘和非编码键盘两种类型。编码键盘中键盘通

24、常有编码键盘和非编码键盘两种类型。编码键盘中的某一个键按下后,能够直接提供与该键相对应的字符编的某一个键按下后,能够直接提供与该键相对应的字符编码信息(如码信息(如ASCII码),其缺点是所需硬件会随着键数的码),其缺点是所需硬件会随着键数的增加而增加。增加而增加。n用户可以通过系统提供的用户可以通过系统提供的BIOS键盘中断(键盘中断(INT 16H)从从键盘缓冲区中得到字符的键盘缓冲区中得到字符的ASC码及其相应的扫描码,以码及其相应的扫描码,以供程序使用。供程序使用。n键盘状态字节所表示的就是这些键的对应状态信息。通过键盘状态字节所表示的就是这些键的对应状态信息。通过INT 16H的的0

25、2H号功能调用可以把键盘状态字节回送到号功能调用可以把键盘状态字节回送到AL寄存器。寄存器。AL中键盘状态字节各位(中键盘状态字节各位(D7D0)含义如下含义如下:nD71,Insert状态改变 D31,按下Alt键 nD61,Caps Lock状态改变 D21,按下Ctrl键 nD51,Num Lock状态改变 D11,按下左Shift键nD41,Scroll Lock状态改变 D01,按下右Shift键例例6.4 从键盘接收从键盘接收10个字符,将其存放于个字符,将其存放于W开始的缓冲区中开始的缓冲区中,然后把缓冲区的内容送显示器输出。,然后把缓冲区的内容送显示器输出。nDATA SEGM

26、ENnW DB 10 DUP(?)nDATA ENDSn CODE SEGMENTnASSUME CS:CODE,DS:DATAn START:n MOV AX,DATA n MOV DS,AX n MOV CX,10n MOV SI,OFFSET W LP:MOV AH,0 ;等待从键盘接收字符 INT 16H MOV SI,AL ;将接收的字符保存在缓冲区中 INC SI ;修改地址指针 LOOP LP MOV BYTE PTR SI,$;将$作为字符串结尾 LEA DX,W ;将缓冲区偏移地址送DX MOV AH,09H ;显示字符串,功能号为09H INT 21H MOV AH,4CH

27、 ;返回DOS INT 21HCODE ENDSEND START n例例6.5 判断是否有键按下,若没有键按下,则继续执行程判断是否有键按下,若没有键按下,则继续执行程序,否则退出。序,否则退出。nSTART:n n MOV AH,1 ;判断是否有键按下 n INT 16H n JE START ;没有键按下继续执行程序n MOV AH,4CH ;否则,退出n INT 21H6.2.5 鼠标器编程鼠标器编程n与键盘类似,鼠标也是以串行方式与主机进行通信。在鼠标与键盘类似,鼠标也是以串行方式与主机进行通信。在鼠标的控制板上通常都配有微处理器,其主要作用是判断鼠标是的控制板上通常都配有微处理器,

28、其主要作用是判断鼠标是否工作,工作时组织输出否工作,工作时组织输出x、y方向的位移数据给主机。方向的位移数据给主机。n主机上的软件则根据这些位移数据在主机上的软件则根据这些位移数据在x方向和方向和y方向移动显示方向移动显示在屏幕上的光标到希望停留的位置。在屏幕上的光标到希望停留的位置。n当单击或双击鼠标上的左键或右键时,则将相应的击键信号当单击或双击鼠标上的左键或右键时,则将相应的击键信号码输入到主机中,作为消息来驱动相应事件。码输入到主机中,作为消息来驱动相应事件。n鼠标通常采用鼠标通常采用7位数据位、位数据位、1位停止位、无奇偶校验的异步位停止位、无奇偶校验的异步格式传送数据,传送速率一般

29、为格式传送数据,传送速率一般为1200/2400bps。Microsoft规定的鼠标数据为三字节,具体格式如表规定的鼠标数据为三字节,具体格式如表6-3 所示。所示。nMicrosoft鼠标为二键式鼠标,表6-3 中的LB和RB分别表示鼠标的左键或者右键按下。X7X0和Y7Y0均为8位带符号整数,表示相对于上一位置的位移量,位移量单位为1/200in(或0.13mm)。D7 D6 D5 D4 D3 D2 D1 D0第一字节 1 LB RB Y7 Y6 X7 X6第二字节 0 X5 X4 X3 X2 X1 X0第三字节 0 Y5 Y4 Y3 Y2 Y1 Y06.2.6 图形显示图形显示n显示器是

30、显示器是PC机一种最常用的输出设备,它可以用来显示字机一种最常用的输出设备,它可以用来显示字符、图形和图像信息。显示器分为单色显示器和彩色显示符、图形和图像信息。显示器分为单色显示器和彩色显示器两种类型。其工作方式也有文本方式和图形方式之分。器两种类型。其工作方式也有文本方式和图形方式之分。n单色显示器只能显示黑白字母、数字及字符图形,它是以单色显示器只能显示黑白字母、数字及字符图形,它是以文本方式工作的;文本方式工作的;n彩色显示器能以文本和图形两种方式工作,既可显示黑白彩色显示器能以文本和图形两种方式工作,既可显示黑白图形又可显示由多种颜色构成的彩色图形。图形又可显示由多种颜色构成的彩色图

31、形。n1.文本方式文本方式n文本方式通常在屏幕上显示字母、数字以及一些字符图形。与屏幕上文本方式通常在屏幕上显示字母、数字以及一些字符图形。与屏幕上每个字符位置相对应的是两个存储器字节单元,一个存放字符的每个字符位置相对应的是两个存储器字节单元,一个存放字符的ASCII码,另一个存放字符属性。字符的属性规定了要显示字符的特码,另一个存放字符属性。字符的属性规定了要显示字符的特性,例如在文本方式下规定字符是否闪烁显示,是否加强亮度,是否性,例如在文本方式下规定字符是否闪烁显示,是否加强亮度,是否反相显示等。单色文本方式的属性字节格式如图反相显示等。单色文本方式的属性字节格式如图6.9所示。所示。

32、n对于彩色文本方式,其属性字节的格式与单色文本方式类似,也包括对于彩色文本方式,其属性字节的格式与单色文本方式类似,也包括闪烁、前景颜色(显示字符的颜色)和背景颜色,但其前景颜色可以闪烁、前景颜色(显示字符的颜色)和背景颜色,但其前景颜色可以选择选择16种颜色之一,背景有种颜色之一,背景有8种颜色可以选择。图种颜色可以选择。图6.10 是彩色文本方是彩色文本方式的属性字节格式。式的属性字节格式。n前景的前景的16种颜色由属性字节的种颜色由属性字节的D0D3位编码表示,位编码表示,R、G、B位分别位分别表示红(表示红(Red)、)、绿(绿(Green)、)、蓝(蓝(Blue),),BL位表示闪烁

33、,位表示闪烁,I位位为亮度。闪烁和亮度只应用于前景。表为亮度。闪烁和亮度只应用于前景。表6-5 是文本方式是文本方式16种颜色的编种颜色的编码表示,它也适用于图形方式。码表示,它也适用于图形方式。n例例6.7 在屏幕上当前光标位置以蓝色背景显示在屏幕上当前光标位置以蓝色背景显示20个浅红色个浅红色闪烁的闪烁的$字符。字符。nCODE SEGMENTn ASSUME CS:CODEnSTART:n MOV AH,09H ;设置功能号设置功能号n MOV AL,$;显示显示$字符字符n MOV BH,0 ;在第在第0页显示页显示n MOV BL,9CH ;设置彩色属性设置彩色属性n MOV CX,

34、20 ;显示显示20次次n INT 10H ;BIOS 中断调用中断调用n MOV AH,4CH ;设置功能号设置功能号n INT 21H ;返回返回DOS系统系统 nCODE ENDSn END STARTn例例6.8 在屏幕上以蓝底白字显示在屏幕上以蓝底白字显示“Hello World!”。n程序如下:程序如下:n.MODEL SMALLn.DATA ;数据段数据段n STRING DB Hello World!,0DH,0AHn LEN EQU$-STRINGn.STACK 100H ;堆栈段堆栈段n.CODE ;代码段代码段n ASSUME CS:_TEXT,DS:_DATA,ES:_

35、DATA,SS:STACKnSTART PROC FARn MOV AX,_DATAn MOV DS,AXn MOV ES,AXn MOV AL,3 ;8025彩色方式彩色方式n MOV AH,0 ;设置功能号设置功能号n INT 10H ;设置显示方式设置显示方式n MOV BP,OFFSET STRING ;ES:BP串地址串地址n MOV CX,LEN ;CX串长度串长度n MOV DX,0 ;DH、DL起始行、列起始行、列(0行行0列)列)n MOV BL,17H ;串色彩属性:蓝底白字串色彩属性:蓝底白字n MOV AL,1 ;串格式为:字符,字符,串格式为:字符,字符,光标跟随移动

36、,光标跟随移动n MOV AH,13H n INT 10H ;蓝底白字显示蓝底白字显示“Hello World!”n MOV AH,4CHn INT 21HnSTART ENDPn END START例例6.9 在屏幕上分别以蓝底黄字和蓝底红字相间地显示在屏幕上分别以蓝底黄字和蓝底红字相间地显示“Welcome”。n程序如下:程序如下:n.MODEL SMALLn.DATA ;数据段数据段n STRING DB W,1EH,e,15H,l,1EH,c,15H,o,1EH,m,15H,e,1EHn LEN EQU$-STRINGn.STACK 100H ;堆栈段堆栈段n.CODE ;代码段代码段

37、n ASSUME CS:_TEXT,DS:_DATA,ES:_DATA,SS:STACKnSTART PROC FARn MOV AX,_DATAn MOV DS,AXn MOV ES,AXn MOV AL,3 ;8025彩色方式彩色方式n MOV AH,0 ;设置功能号设置功能号n INT 10H ;设置显示方式设置显示方式n MOV BP,OFFSET STRING ;ES:BP=串地址串地址 n MOV CX,LEN ;CX串长度串长度n MOV DX,0200H ;DH、DL起始行、列(起始行、列(2行、行、0列)列)n MOV AL,3 ;串格式为:字符,属性,串格式为:字符,属性,

38、光标跟随移动,光标跟随移动n MOV AH,13Hn INT 10H ;蓝底黄字和蓝底红字相间显示蓝底黄字和蓝底红字相间显示“Welcome”n MOV AH,4CHn INT 21HnSTART ENDPn END START2.图形显示图形显示n利用利用ASCII码字符集中的一些方块图形字符,也可以在文本方式下显码字符集中的一些方块图形字符,也可以在文本方式下显示一些简单的图形。这样显示的图形通常称为字符图形。其显示的方示一些简单的图形。这样显示的图形通常称为字符图形。其显示的方法和显示一般字符相同,也是通过调用法和显示一般字符相同,也是通过调用BIOS字符显示功能来实现的字符显示功能来实

39、现的,例如,例如INT 10H的的09H和和0AH功能调用等。对单色文本还可以选择闪功能调用等。对单色文本还可以选择闪烁、反相和高亮度等属性;对彩色文本可以选择前景和背景颜色。烁、反相和高亮度等属性;对彩色文本可以选择前景和背景颜色。n为了得到更为精细和准确的图像,可以调用为了得到更为精细和准确的图像,可以调用10H中断的中断的0BH和和0CH号号功能,这样就可以在屏幕上的指定坐标处显示特定属性的点(像素)。功能,这样就可以在屏幕上的指定坐标处显示特定属性的点(像素)。通过大量点的显示,就可以得到精细的图形。通过大量点的显示,就可以得到精细的图形。6.3 Windows汇编语言程序设计简介汇编

40、语言程序设计简介n本节首先介绍本节首先介绍Windows环境下汇编语言程序设计的几个基环境下汇编语言程序设计的几个基本概念,然后给出本概念,然后给出Windows应用程序的基本架构,最后编应用程序的基本架构,最后编写一个简单的写一个简单的Win32汇编语言程序,并说明相关的汇编环汇编语言程序,并说明相关的汇编环境及汇编、链接方法。境及汇编、链接方法。6.3.1 Windows API函数函数nAPI是一个函数的集合,通常包含一个或多个提供特定功是一个函数的集合,通常包含一个或多个提供特定功能的动态链接库能的动态链接库DLL(Dynamic Link Library),),应用程应用程序可以使用

41、不同的编程语言来调用这些动态链接库提供的序可以使用不同的编程语言来调用这些动态链接库提供的API函数,以实现与操作系统、操作系统组件或其他应用函数,以实现与操作系统、操作系统组件或其他应用程序之间的数据交换和协调工作。程序之间的数据交换和协调工作。n常见的常见的DLL如如Kernel32.dll、User32.dll和和gdi32.dll等。其等。其中中Kernel32.dll中的函数主要处理内存管理和进程调度,中的函数主要处理内存管理和进程调度,User32.dll中的函数主要控制用户界面,中的函数主要控制用户界面,gdi32.dll中的函数中的函数则负责图形方面的操作等。则负责图形方面的操

42、作等。6.3.2 动态链接库动态链接库n动态链接库是动态链接库是Windows程序为了减少内存消耗而采用的一程序为了减少内存消耗而采用的一种技术。在种技术。在Windows中,由于有多个程序同时运行,所以中,由于有多个程序同时运行,所以往往需要占用较大的内存空间。所谓动态链接是指当程序往往需要占用较大的内存空间。所谓动态链接是指当程序已在内存中运行时,仅在调用某函数时才将其调入内存进已在内存中运行时,仅在调用某函数时才将其调入内存进行链接。行链接。n要正确使用动态链接库,还必须知道要调用的函数是否在要正确使用动态链接库,还必须知道要调用的函数是否在库中。此外还需要知道该函数的参数个数和参数类型

43、,以库中。此外还需要知道该函数的参数个数和参数类型,以便在编译和链接时把重定位等信息插入到执行代码中。为便在编译和链接时把重定位等信息插入到执行代码中。为此建立了导入库(此建立了导入库(import library),),导入库里面保存了与导入库里面保存了与它相对应的那个动态链接库里面所有导出函数的位置信息,它相对应的那个动态链接库里面所有导出函数的位置信息,链接时将从中提取相关信息放入到可执行文件中去。链接时将从中提取相关信息放入到可执行文件中去。6.3.3 指令集选择指令集选择n在在Windows汇编源程序开始处,需要通过一条如汇编源程序开始处,需要通过一条如“.386”形式的伪指令来告诉

44、汇编器,程序中将使用哪种处理器的形式的伪指令来告诉汇编器,程序中将使用哪种处理器的指令系统。除了指令系统。除了.386伪指令外,类似的伪指令还有伪指令外,类似的伪指令还有.8086、.186、.286、.386P、.486/.486P、.586/.586P、.mmx等。其等。其中带中带P的伪指令表示要使用处理器的特权指令(也称系统的伪指令表示要使用处理器的特权指令(也称系统控制指令)。控制指令)。n特权指令是为处理器工作在保护模式下而设置的,并且这特权指令是为处理器工作在保护模式下而设置的,并且这些特权指令必须在特权级些特权指令必须在特权级0上运行。通常,特权级上运行。通常,特权级0是赋给是赋

45、给操作系统中最重要的一小部分核心程序,即操作系统的内操作系统中最重要的一小部分核心程序,即操作系统的内核,如存储管理、保护和访问控制等关键软件。核,如存储管理、保护和访问控制等关键软件。6.3.4 工作模式选择工作模式选择n在在Windows汇编源程序中,还需要用汇编源程序中,还需要用.model伪指令来指示伪指令来指示当前程序的工作模式,一般格式为:当前程序的工作模式,一般格式为:n.model 存储模式存储模式,语言模式,语言模式 其它模式其它模式 例如:例如:.model flat,stdcalln上述一般格式中的上述一般格式中的“存储模式存储模式”位置的参数告诉汇编器当位置的参数告诉汇

46、编器当前程序使用何种存储模式。不同的存储模式,对存储器的前程序使用何种存储模式。不同的存储模式,对存储器的数据访问方式各不相同,最终将生成不同的可执行文件。数据访问方式各不相同,最终将生成不同的可执行文件。n.model伪指令还设定了程序中使用的语言模式(即子程序伪指令还设定了程序中使用的语言模式(即子程序或函数的调用方式)。语言模式规定了程序中函数的参数或函数的调用方式)。语言模式规定了程序中函数的参数压栈顺序,压栈顺序可以从左到右也可以从右到左。此外压栈顺序,压栈顺序可以从左到右也可以从右到左。此外还指出了最后由谁来恢复堆栈(保持栈的平衡)。还指出了最后由谁来恢复堆栈(保持栈的平衡)。6.

47、3.5 函数的原型定义函数的原型定义n函数原型定义告诉汇编器和链接器该函数的属性,以便在函数原型定义告诉汇编器和链接器该函数的属性,以便在汇编和链接时对该函数作相关的类型检查。汇编和链接时对该函数作相关的类型检查。Win32通过通过PROTO伪指令定义函数原型(与伪指令定义函数原型(与C语言中函数的原型定语言中函数的原型定义相似),其格式如下:义相似),其格式如下:n函数名函数名 PROTO 参数名参数名:数据类型,:数据类型,参数名参数名:数据类:数据类型,型,n由于函数的原型定义和对应模块的信息分别处于相应的头由于函数的原型定义和对应模块的信息分别处于相应的头文件和库文件中,如本例就分别处

48、于文件和库文件中,如本例就分别处于Kernel32.inc头文件头文件和和Kernel32.lib库文件中,因此在汇编语言源程序中必须库文件中,因此在汇编语言源程序中必须用用include语句把这两个文件包括进来。语句把这两个文件包括进来。6.3.6 Windows应用程序的基本结构框架应用程序的基本结构框架n用用Win32汇编语言编写汇编语言编写Windows应用程序的基本结构框架应用程序的基本结构框架如下:如下:n.386 ;定义指令集;定义指令集n.model flat,stdcall ;定义存储模式和语言模式定义存储模式和语言模式noption casemap:none ;指明编译器对

49、程序中关键字大小写敏感指明编译器对程序中关键字大小写敏感ninclude windows.inc ;ninclude user32.inc ;nincludelib user32.lib ;定义头文件及库文件定义头文件及库文件ninclude kernel32.inc ;nincludelib kernel32.lib n.data ;数据部分数据部分 n.code ;代码部分代码部分nstart:;程序的入口处程序的入口处nend start ;表示整个程序的结束表示整个程序的结束 6.3.7 Win32汇编语言应用程序实例汇编语言应用程序实例n例例6.13 编写一个简单的编写一个简单的Wi

50、n32汇编语言程序,在屏幕上显示一个消息汇编语言程序,在屏幕上显示一个消息框,消息框的标题为框,消息框的标题为“欢迎进入欢迎进入Win32汇编语言世界!汇编语言世界!”,消息框中,消息框中显示的正文为显示的正文为“Hello world!”。n本程序需调用两个API函数,分别为MessageBox和ExitProcess,其中函数MessageBox用于在屏幕上产生一个消息框,函数ExitProcess则用于结束其所在的进程。具体程序如下:n;n;The program name:Hello.asmn;功能:显示一个消息框功能:显示一个消息框n;n ;使用下列命令进行编译和连接:使用下列命令进

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|