chapter5过程.ppt
《chapter5过程.ppt》由会员分享,可在线阅读,更多相关《chapter5过程.ppt(52页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、1计算机科学系计算机科学系汇编汇编课件课件第5章 过程要点:要点:1.MASM库函数库函数2.堆栈操作堆栈操作3.过程的定义和使用过程的定义和使用4.使用过程进行程序设计使用过程进行程序设计2计算机科学系计算机科学系汇编汇编课件课件5.2 与外部库链接与外部库链接链接库是指包含了标准库函数的文件,这些库函数已经编译成机器链接库是指包含了标准库函数的文件,这些库函数已经编译成机器码的形式。码的形式。链接库可以由一个或多个源文件构成,这些文件被汇编成目标文件链接库可以由一个或多个源文件构成,这些文件被汇编成目标文件并以链接器能够识别的特定格式插入到一个文件中构成链接库。并以链接器能够识别的特定格式
2、插入到一个文件中构成链接库。例如:程序要调用例如:程序要调用WriteString过程在控制台上显示字符串过程在控制台上显示字符串 WriteString PROTO ;PROTO伪指令声明要调用的外部过程,伪指令声明要调用的外部过程,该语句可以在该语句可以在Irvine32.inc中找到。中找到。Call WriteString ;使用使用CALL指令调用指令调用writestring过程过程3计算机科学系计算机科学系汇编汇编课件课件Call WriteString 指令的处理过程:指令的处理过程:汇编器汇编到该指令时,为汇编器汇编到该指令时,为CALL指令的目的地址留出空白,指令的目的地址
3、留出空白,该地址要等到链接阶段再填入。该地址要等到链接阶段再填入。链接器在链接库中查找链接器在链接库中查找WriteString过程,将其相应的机器指令过程,将其相应的机器指令复制到程序的可执行文件中,并将该过程在可执行文件中的实复制到程序的可执行文件中,并将该过程在可执行文件中的实际地址补入到际地址补入到CALL指令中为目的地址留出的空白处。指令中为目的地址留出的空白处。如果试图调用的过程不在链接库中,链接器会产生一条链接错如果试图调用的过程不在链接库中,链接器会产生一条链接错误消息,并拒绝生成可执行文件。误消息,并拒绝生成可执行文件。4计算机科学系计算机科学系汇编汇编课件课件链接器的命令行
4、选项链接器的命令行选项 链接程序将程序的目标文件和库文件合并起来,格式为:链接程序将程序的目标文件和库文件合并起来,格式为:link32 hello.obj irvine32.lib kernel32.lib irvine32.lib:链接到:链接到kernel32.lib库文件。库文件。kernel32.lib:MS-Windows platform SDK(平台软件开发包平台软件开发包)的一的一部分,链接到部分,链接到kernel32.dll中的操作系统函数。中的操作系统函数。kernel32.dll:动态链接库,:动态链接库,MS-Windows的一个基本组件,包含的一个基本组件,包含了
5、字符输入输出等功能的可执行函数。了字符输入输出等功能的可执行函数。5计算机科学系计算机科学系汇编汇编课件课件5.3 本书附带的链接库本书附带的链接库控制台窗口:控制台窗口:MS-Windows创建的文本窗口,运行于创建的文本窗口,运行于MS-Windows的彩色文本模式下,默认尺寸为的彩色文本模式下,默认尺寸为80列列25行。通过行。通过“开始开始|运行运行”,“cmd”(for Windows 2000/XP)或或”command”(Windows95/98)打开。打开。标准输入:键盘,也可以重定向到从文件或串口读取。标准输入:键盘,也可以重定向到从文件或串口读取。标准输出:控制台输出,也可
6、以重定向到向文件、打印机或串口输标准输出:控制台输出,也可以重定向到向文件、打印机或串口输出。出。重定向输入输出重定向输入输出:可以在命令行提示符下使用重定向输入输出命令,可以在命令行提示符下使用重定向输入输出命令,将标准输入或输出重定向到其他文件或串口。将标准输入或输出重定向到其他文件或串口。6计算机科学系计算机科学系汇编汇编课件课件重定向输入输出命令重定向输入输出命令:重定向输出重定向输出 output.txt sample input.txt sample output.txt prog1|prog2 ;将prog1.exe的输出送到prog2.exe的输入 prog1 output.t
7、xt ;prog1.exe从input.txt中读取输入,然后将输出送prog2.exe,prog2.exe再将自己的输出重定向到output.exe.Irvine32.lib链接库中包含的常用过程链接库中包含的常用过程 P105 表表5.17计算机科学系计算机科学系汇编汇编课件课件屏幕显示和光标的变换屏幕显示和光标的变换Clrscr:用于清除控制台窗口内容:用于清除控制台窗口内容Crlf:将光标定位到控制台窗口下一行的开始:将光标定位到控制台窗口下一行的开始Gotoxy:将光标定位在控制台窗口中指定的行列位置上。:将光标定位在控制台窗口中指定的行列位置上。默认情况下,默认情况下,X坐标范围坐
8、标范围(列坐标列坐标):079,设置在,设置在DL中;中;Y坐标范围坐标范围(行坐标行坐标):024,设置在,设置在DH中中 例如:例如:mov dh,10 mov dl,20 call gotoxy5.3.2 过程的描述过程的描述关于时间关于时间Delay:以指定的毫秒数暂停程序;以指定的毫秒数暂停程序;EAX设置为预期时间间隔,设置为预期时间间隔,单位是毫秒。例如:单位是毫秒。例如:mov eax,1000 call delayGetMseconds:从午夜开始计算的逝去的毫秒数;返回值在从午夜开始计算的逝去的毫秒数;返回值在EAX中。中。.data startTime DWORD?.co
9、de call GetMseconds mov startTime,eax L1:;(循环体)(循环体)loop L1 call GetMseconds sub eax,startTime9计算机科学系计算机科学系汇编汇编课件课件WaitMsg:显示:显示“Press Enter to continue”消息,并等待用户消息,并等待用户按下回车键。按下回车键。MsgBox:显示一个图形界面的弹出消息框。调用时通过:显示一个图形界面的弹出消息框。调用时通过EDX传传递要显示的字符串的偏移地址,字符串将显示在消息框中央,还递要显示的字符串的偏移地址,字符串将显示在消息框中央,还可以通过可以通过EB
10、X传递要显示在标题栏中的字符串的偏移地址。传递要显示在标题栏中的字符串的偏移地址。MsgBoxAsk:显示一个带:显示一个带Yes和和NO按钮图形界面的弹出消息框。按钮图形界面的弹出消息框。通过通过EDX传递要显示的作为问题的字符串的偏移地址,传递要显示的作为问题的字符串的偏移地址,EBX传递传递显示在标题栏中的字符串的偏移地址。显示在标题栏中的字符串的偏移地址。MsgBoxAsk在在EAX中返回一个整数值:中返回一个整数值:IDYES和和IDNO,通,通过该返回值可以知道用户选择了哪个按钮。过该返回值可以知道用户选择了哪个按钮。10计算机科学系计算机科学系汇编汇编课件课件从标准输入读入从标准
11、输入读入ReadChar:读取一个字符并在:读取一个字符并在AL中返回,输入的字符不在屏幕中返回,输入的字符不在屏幕上回显。上回显。ReadHex:读取一个:读取一个32位十六进制整数并在位十六进制整数并在EAX寄存器中返回、寄存器中返回、对无效字符不进行错误检查。对无效字符不进行错误检查。ReadInt:读入一个:读入一个32位有符号整数、位有符号整数、EAX、进行错误检查、输、进行错误检查、输入的数字可以以正负号开头,但其余部分只能是数字。入的数字可以以正负号开头,但其余部分只能是数字。ReadString:读入一个字符串,并自动在字符串末尾补入一个空:读入一个字符串,并自动在字符串末尾补
12、入一个空字符作为结束符。字符作为结束符。EAX中返回字符数、在调用之前需要将中返回字符数、在调用之前需要将EDX设设置为指向保存输入字符串的偏移地址、同时将置为指向保存输入字符串的偏移地址、同时将ECX设置为最多可设置为最多可读入的字符数加读入的字符数加1。11计算机科学系计算机科学系汇编汇编课件课件.databuffer BYTE 21 DUP(0)byteCount DWORD?.codemov edx,offset buffermov ecx,sizeof buffer;设置最多可读入的字符数为设置最多可读入的字符数为sizeof buffer-1call readstringmov b
13、yteCount,eax ;用户输入字符串用户输入字符串“ABCDEFG”后,缓冲区后,缓冲区buffer的前八个字节的前八个字节为:为:41 42 43 44 45 46 47 00,此时,此时byteCount的值为的值为7。12计算机科学系计算机科学系汇编汇编课件课件ReadDec:读取一个无符号:读取一个无符号32位十进制整数并在位十进制整数并在EAX中返回。中返回。ReadDec将根据读入的字符串设置进位标志:将根据读入的字符串设置进位标志:如果输入的整数字符串为空,则如果输入的整数字符串为空,则EAX=0,CF=1 如果输入的整数字符串只包含空格,则如果输入的整数字符串只包含空格,
14、则EAX=0,CF=1 如果输入的整数大于如果输入的整数大于2321,则,则EAX=0,CF=1 除上述情况之外,除上述情况之外,EAX=转换后的整数,转换后的整数,CF=013计算机科学系计算机科学系汇编汇编课件课件从标准设备输出从标准设备输出WriteBin:以二进制格式显示以二进制格式显示EAX中的整数的中的整数的ASCII码。码。WriteChar:显示一个字符、调用之前需将字符存储在:显示一个字符、调用之前需将字符存储在AL中。中。WriteDec:以十进制格式显示一个:以十进制格式显示一个32位无符号整数,调用之前,位无符号整数,调用之前,需将整数保存在需将整数保存在EAX中。中。
15、WriteHex:以十六进制格式显示一个:以十六进制格式显示一个32位无符号整数、格式是以位无符号整数、格式是以8个十六进制的数据位表示,调用之前存入个十六进制的数据位表示,调用之前存入EAX中。中。WriteInt:以十进制格式显示一个:以十进制格式显示一个32位有符号整数、输出的数字位有符号整数、输出的数字开头有符号位,调用之前存入开头有符号位,调用之前存入EAX中。中。WriteString:显示一个以空字符结尾的字符串,调用之前,将欲显示一个以空字符结尾的字符串,调用之前,将欲显示的字符串的偏移存放在显示的字符串的偏移存放在EDX中。中。14计算机科学系计算机科学系汇编汇编课件课件生成
16、随机数生成随机数Random32:生成一个:生成一个32位的随机整数并在位的随机整数并在EAX中返回。中返回。RandomRange:生成一个:生成一个0(n1)之间的随机整数在之间的随机整数在EAX中返中返回,其中回,其中n是通过是通过EAX传递的参数。传递的参数。例如:生成一个例如:生成一个04999之间的随机整数并存放在之间的随机整数并存放在EAX中中.data randval DWORD?.code mov eax,5000 call RandomRange mov randval,eaxRandomsize:初始化在:初始化在Random32和和RandomRange过程的随机数过程
17、的随机数公式中使用的种子值。保证在每次运行程序时,产生的初始随机公式中使用的种子值。保证在每次运行程序时,产生的初始随机数都不同。数都不同。DumpMem:以十六进制格式显示一块内存的内容。在调用之:以十六进制格式显示一块内存的内容。在调用之前,需要将前,需要将ESI设置为内存开始地址,设置为内存开始地址,ECX设置为元素数目,设置为元素数目,EBX设置为元素尺寸设置为元素尺寸(1=byte,2=word,4=doubleword)。例如:显示一个名为例如:显示一个名为array的包含的包含11个双字变量的数组。个双字变量的数组。.data array DWORD 1,2,3,4,5,6,7,
18、8,9,0AH,0BH .code main proc mov esi,offset array mov ecx,lengthof array mov ebx,type array call dumpmemDumpRegs:以十六进制格式显示:以十六进制格式显示CPU通用寄存器、通用寄存器、EFLAGS、EIP的内容,并同时显示的内容,并同时显示CF、SF、ZF、OF标志。显示的标志。显示的EIP值值是紧跟在是紧跟在call DumpRegs语句后面的指令的偏移地址。语句后面的指令的偏移地址。GetCommandTail:将程序的命令行拷贝到一个以空字符结尾的:将程序的命令行拷贝到一个以空字符
19、结尾的字符串中。如果命令行为空,则设置进位标志,否则清除进位标字符串中。如果命令行为空,则设置进位标志,否则清除进位标志。志。GetTextColor:返回当前控制台窗口的前景和背景色。返回值在:返回当前控制台窗口的前景和背景色。返回值在AL中,高中,高4位是背景色,低位是背景色,低4位是前景色。位是前景色。SetTextColor:设置当前输出字符的前景色和背景色。调用前需:设置当前输出字符的前景色和背景色。调用前需将欲设置的颜色置于将欲设置的颜色置于EAX中。中。mov eax,white+(blue*16);蓝底白字;蓝底白字call SetTextColor;blue=0001b wh
20、ite=1111bOpenInputFile:打开一个已存在的磁盘文件以进行输入,通过:打开一个已存在的磁盘文件以进行输入,通过EDX传递要打开的文件名的偏移地址。文件是以文件句柄标识传递要打开的文件名的偏移地址。文件是以文件句柄标识的,的,EAX中返回打开的文件句柄。中返回打开的文件句柄。ReadFromFile:把输入文件的内容读到一个缓冲区内。:把输入文件的内容读到一个缓冲区内。EAX传传递已打开的文件句柄,递已打开的文件句柄,EDX传递缓冲区的偏移地址,传递缓冲区的偏移地址,ECX传递传递最多读取的字节数。最多读取的字节数。CloseFile:关闭一个已经打开的文件。如果文件被成功关闭
21、,:关闭一个已经打开的文件。如果文件被成功关闭,EAX中返回值为非零值。中返回值为非零值。CreatOutputFile:创建一个磁盘文件并以输出模式打开。通过:创建一个磁盘文件并以输出模式打开。通过EDX传递要创建的文件名的偏移地址。如果文件创建成功,则传递要创建的文件名的偏移地址。如果文件创建成功,则EAX中返回有效的文件句柄。如果创建失败,中返回有效的文件句柄。如果创建失败,EAX中的值是中的值是INVALD_HANDLE_VALUE。GetMaxXY:返回控制台窗口缓冲区的大小。无输入参数,返回:返回控制台窗口缓冲区的大小。无输入参数,返回时,时,DL存放窗口缓冲区的列数,存放窗口缓冲
22、区的列数,DH存放窗口缓冲区的行数。存放窗口缓冲区的行数。IsDigit:确定:确定AL中的字符是否是有效的十进制数字中的字符是否是有效的十进制数字(09)。如果。如果AL中的字符是有效的十进制数字,则零标志置位,否则零标志清中的字符是有效的十进制数字,则零标志置位,否则零标志清零。零。mov AL,somechar call IsDigit jz digit_foundParseDecimal32:把无符号整数字符串转换为一个:把无符号整数字符串转换为一个32位的二进制位的二进制数。数。EDX传递字符串的偏移地址,传递字符串的偏移地址,ECX传递字符串的长度,转换传递字符串的长度,转换后的二
23、进制值在后的二进制值在EAX中返回。中返回。ParseInteger32:把有符号整数字符串转换为一个:把有符号整数字符串转换为一个32位的二进制数。位的二进制数。字符串开头可以有加号(表示正数)或负号(表示负数),但符字符串开头可以有加号(表示正数)或负号(表示负数),但符号后必须跟十进制数字。号后必须跟十进制数字。5.3.3 库测试程序库测试程序TITLE Library Test#1:Integer I/O(TestLib1.asm)INCLUDE Irvine32.inc.dataarrayD DWORD 1000h,2000h,3000hprompt1 BYTE Enter a 32
24、-bit signed integer:,0dwordVal DWORD?.codemain PROC mov eax,yellow+(blue*16)call setTextColor call clrscr mov esi,offset arrayD mov ecx,lengthof arrayD mov ebx,TYPE arrayD call DumpMem call Crlf P116测试程序测试程序#1:整数:整数I/O mov edx,offset prompt1 call WriteString call ReadInt mov dwordVal,eax call Crlf c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chapter5 过程
限制150内