Windows编程文档格式.docx
- 文档编号:22342393
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:20.52KB
Windows编程文档格式.docx
《Windows编程文档格式.docx》由会员分享,可在线阅读,更多相关《Windows编程文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
而在过程定义中,local伪指令用于分配局部变量。
(8)条件汇编IF和条件控制.IF伪指令都包括条件表达式,它们的表达形式一样。
(9)条件控制.IF伪指令和循环控制伪指令.WHILE中的条件表达式具有相同的表达形式。
(10)masm32软件包只支持32位图形界面应用程序的开发,不支持控制台应用程序的开发。
错。
填空题
(1)Windows系统有3个最重要的系统动态连接库文件,它们是________、________和________。
,,
(2)进行windows应用程序开发时,需要()库文件;
执行该应用程序时,则需要对应的()库文件。
导入库,动态链接库
(3)获得句柄函数GetStdHandle执行结束,使用_______提供返回结果。
EAX
(4)函数GetStdHandle需要一个参数,对标准输入设备应该填入()数值,对标准输出设备应该填入()数值,对边准错误输出设备应该填入()数值
-10,-11,-12
(5)调用ReadConsole函数时,用户在键盘上按下数字8,然后回车,则键盘缓冲区的内容一次是()。
38h,0dh,0ah
(6)WriteConsole和ReadConsole函数的参数类似,都有5个,第1个参数是______,第2个参数是输出或输入缓冲区的______,第3个参数是输出或输入的字符_______,第4个参数指向实际输出或输入字符个数的变量,最后1个参数一般要求代入_____。
句柄实例,地址,个数,0
(7)消息窗口函数MessageBox有4个参数,第1个是0,第2个是要显示字符串的(),第3个是()的地址指针,第4个参数指明窗口形式。
注意字符串要使用()作为结尾标志。
地址指针(即首地址),窗口标题,0
(8)要使用获取系统日期时间函数GetLocalTime,需要定义一个()结构变量,其中返回系统时间数值,这些数值采用2进制编码,例如,日期返回的编码是0019h,它表示日期是()。
SYSTEMTILE,25
(9)使用扩展的proc伪指令编写子程序比较方便,例如,子程序中需要保护和恢复esi和edi寄存器,就只需要使用()既可以。
Usesesiedi
(10)masm进行汇编时生成最大化源代码列表,其中语句前使用字母()表示是通过包含文件插入的语句,使用“*”符号的语句是()的代码,而语句前的数字则说明是()语句。
C,汇编程序生成,宏调用
习题
执行CPUID指令,直接使用控制台输出函数将处理器识别字符串显示出来。
.686
.modelflat,stdcall
optioncasemap:
none
includelibbin\
ExitProcessproto,:
dword
GetStdHandleproto,:
dword
WriteConsoleA\
proto,:
dword,:
WriteConsoleequ<
WriteConsoleA>
STD_OUTPUT_HANDLE=-11
.data
outhandledword
outbufferbyte'
Theprocessor……'
12dup(0)
outbufsize=sizeofoutbuffer
outsizedword
.code
moveax,0
cpuid;
执行处理器识别指令
movdwordptroutbuffer+outbufsize-12,ebx
movdwordptroutbuffer+outbufsize-8,edx
movdwordptroutbuffer+outbufsize-4,ecx
invokeGetStdHandle,STD_OUTPUT_HANDLE
movouthandle,eax
invokeWriteConsole,outhandle,\
addroutbuffer,outbufsize,addroutsize,0
invokeExitProcess,0
直接使用控制台输入和输出函数实现例6-2的功能(不使用readmsg,dispmsg).注意,输入和输出句柄只要各获取一个既可。
ExitProcessproto,:
exitmacrodwexitcode
invokeExitProcess,dwexitcode
endm
WriteConsoleAproto,:
ReadConsoleAproto,:
ReadConsoleequ<
ReadConsoleA>
STD_INPUT_HANDLE=-10
.data
msg1byte'
Pleaseenteryourname:
'
0
msg2byte'
Welcome'
nbufbyte80dup(0)
msg3byte'
toWin32Console!
'
_outhandledword
_inhandledword
_insizedword
_outsizedword
.code
start:
mov_outhandle,eax
invokeGetStdHandle,STD_INPUT_HANDLE
mov_inhandle,eax
invokeWriteConsole,_outhandle,addrmsg1,sizeofmsg1,addr_outsize,0
invokeReadConsole,_inhandle,addrnbuf,80,addr_insize,0
invokeWriteConsole,_outhandle,addrmsg2,sizeofmsg2,addr_outsize,0
sub_insize,2
invokeWriteConsole,_outhandle,addrnbuf,_insize,addr_outsize,0
invokeWriteConsole,_outhandle,addrmsg3,sizeofmsg3,addr_outsize,0
exit0
endstart
直接使用控制台输出函数实现某个主存区域内容的显示。
要求改进显示形式,例如,每行显示16个字节(128位),每行开始先显示首个主存单元的偏移地址,然后用冒号分隔主存内容。
.data
var
_membufferbyte57dup(20h),13,10
moveax,offsetvar
movecx,sizeofvar
calldispmem
invokeExitProcess,0
dispmemproc
testecx,ecx;
个数为0,不显示
jzdispm11;
退出
pushad
movesi,ecx;
ESI=要显示内容的字节数
movedi,eax;
EDI=要显示内容的地址
mov_outhandle,eax;
获得输出句柄
;
1.显示缓冲区全部填充为空格
dispm1:
xorebx,ebx;
指示显示缓冲区
dispm2:
mov_membuffer[ebx],'
incebx
cmpebx,(sizeof_membuffer)-2
jbdispm2
;
2.显示内容所在的存储器地址
xorebx,ebx
movecx,8;
地址是十六进制8位
moveax,edi
dispm3:
roleax,4
movdl,al
anddl,0fh
ordl,30h
cmpdl,39h
jbedispm4
adddl,7
dispm4:
mov_membuffer[ebx],dl
loopdispm3
:
显示冒号
addebx,2
movecx,16;
一行最多显示16个字节
3.显示一个字节内容
dispm5:
moval,[edi]
shrdl,4
jbedispm6
dispm6:
andal,0fh
oral,30h
cmpal,39h
jbedispm7
addal,7
dispm7:
mov_membuffer[ebx],al
incedi;
指向下一个要显示的字节
decesi
jzdispm10;
没有要显示的内容,退出
loopdispm5
invokeWriteConsole,_outhandle,\
addr_membuffer,sizeof_membuffer,\
addr_outsize,0
jmpdispm1
dispm10:
invokeWriteConsole,_outhandle,\
popad
dispm11:
ret
dispmemendp
执行CPUID指令,在消息窗口显示处理器识别字符串,要求该消息窗有OK和Cancel两个按钮。
MessageBoxAproto:
MessageBoxequ<
MessageBoxA>
NULLequ0
MB_OKequ1
szCaptionbyte'
消息窗口'
本机的处理器是'
12dup(0),0
outbufsize=sizeofoutbuffer-1
moveax,0
cpuid;
invokeMessageBox,NULL,addroutbuffer,\
addrszCaption,MB_OK
invokeExitProcess,NULL
endstart
参考5-10,利用MessageBox函数创建的消息窗口显示32位通用寄存器内容。
includelib..\lib\
MessageBoxAproto,:
宏定义
dreg32macroreg32
localdreg1,dreg2
moveax,reg32;
显示reg32寄存器
movecx,8
dreg1:
movedx,eax
adddl,30h;
转化为相应的ASCII码值
cmpdl,39h;
区别0~9和A~F数码
jbedreg2
dreg2:
movrd&
reg32&
[ebx+4],dl
cmpebx,ecx
jbdreg1
strCaptionbyte'
32位通用寄存器内容'
rdeaxbyte'
EAX=00000000,'
rdebxbyte'
EBX=00000000,'
rdecxbyte'
ECX=00000000,'
rdedxbyte'
EDX=00000000'
13,10
rdesibyte'
ESI=00000000,'
rdedibyte'
EDI=00000000,'
rdebpbyte'
EBP=00000000,'
rdespbyte'
ESP=00000000'
13,10,0
_outsizedword$-rdeax
;
假设一些数据
movebx,0abcdef00h
movecx,eax
movedx,ebx
movebp,esp
calldprd
dprdproc
pushedx
pushecx
pushebx
dreg32eax;
显示EAX
popebx
dreg32ebx;
显示EBX
popecx
dreg32ecx;
显示ECX
popedx
dreg32edx;
显示EDX
dreg32esi;
显示ESI
dreg32edi;
显示EDI
dreg32ebp;
显示EBP
addesp,36;
获得进入该子程序前的ESP
dreg32esp;
显示ESP
subesp,36;
恢复ESP
moveax,offsetrdeax
invokeMessageBox,0,eax,addrstrCaption,0
popad
ret
dprdendp
利用获得系统时间函数,将年月日时分秒星期等时间完整地显示出来。
可以创建一个控制台程序,也可以创建一个消息窗口程序。
结构数据类型如何说明,结构变量如何定义,结构字段如何引用
略
条件控制伪指令的条件表达式中,逻辑与“&
&
”表示两者都为真,整个条件才为“真”;
逻辑或“||”表示两者之一为真,整个条件就为“真”。
对如下两个程序段(var是一个双字变量):
(1)逻辑与条件
.if(var==5)&
(eax!
=ebx)
Inceax
.endif
(2)逻辑或条件
.if(var==5)||(eax!
Decebx
请直接使用处理器指令实现上述分支结构,并比较汇编程序生成的代码序列。
答:
(1)
Cmpvar,5
Jnedone
Cmpeax,ebx
Jedone
Done:
(2)
Jel1
L1:
对于如下两个程序段:
(1)WHILE循环结构
.whileeax!
=10
Mov[ebx*4],eax
.endw
(2)UNTIL循环结构
.repeat
.untileax==10
Next:
Cmpeax,10
Jmpnext
done:
(2)
Mov[ebx*4],eax
Jnenext
使用条件控制.if伪指令编写习题程序,并生成完整的列表文件
test
.if!
ZERO
moval,'
L'
.else
testdvar,1
.if!
moval,'
R'
.else
M'
.endif
.endif
calldispc
使用条件控制.if和循环控制.while伪指令编写习题程序,并生成完整的列表文件
xoreax,eax
xorebx,ebx
movecx,lengthofstring
.while(ecx!
=0)
.if(string[ebx]==20h)
inceax
incebx
dececx
.endw
调用GetCommandLine函数,可以从eax返回指向命令行输入字符串(包含路径、文件名和参数)。
要求编程利用MessageBox函数输出这个字符串。
MB_OKequ0
GetCommandLineAproto
GetCommandLineequ<
GetCommandLineA>
数据定义
命令行内容'
主程序
invokeGetCommandLine
invokeMessageBox,0,eax,addrszCaption,MB_OK
子程序
在windows窗口应用程序中例6-11的基础上,增加单击鼠标右键弹出另一个消息窗口的功能,在masm32开发环境生成可执行文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)