汇编Word格式文档下载.docx
《汇编Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编Word格式文档下载.docx(81页珍藏版)》请在冰点文库上搜索。
(2)程序系统的详细框图(每个子程序的流程图)。
因为子程序繁多,这里只画出主要程序的流程图
_ProcWinMain的流程图:
ToolbarProc的流程图:
(3)程序界面图:
初始:
菜单:
复制之后:
退出:
帮助:
关于计算器:
显示:
(4)程序清单。
含有3个文件:
主文件Calc.asm\宏文件macros.asm\资源文件calc.rc
Calc.asm:
.386
.modelflat,stdcall
optioncasemap:
none
include\masmplus\INCLUDE\windows.inc
include\masmplus\INCLUDE\user32.inc
include\masmplus\INCLUDE\kernel32.inc
include\masmplus\INCLUDE\comctl32.inc
include\masmplus\INCLUDE\gdi32.inc
includelib\masmplus\LIB\user32.lib
includelib\masmplus\LIB\kernel32.lib
includelib\masmplus\LIB\comctl32.lib
includelib\masmplus\LIB\gdi32.lib
includemacros.asm
.CONST
ICO_MAINequ1000h
IDT_TOOLBAR1EQU1501H
IDT_TOOLBAR2EQU1502H
IDT_TOOLBAR3EQU1503H
IDT_TOOLBAR4EQU1504H
IDM_MAINequ2000h
IDA_MAINequ2000h
IDM_COPYequ4101h
IDM_STICKequ4102h
IDM_EXITequ4103h
IDM_STANDRDequ4201h
IDM_SCIENCEequ4202h
IDM_INTequ4203h
IDM_HELPequ4301h
IDM_ABOUTequ4302h
STATICIDequ301
IDM_MESSAGEequ501
IDM_MESSAGE1equ502
IDM_INPUT1equ204
IDM_INPUT2equ205
IDM_RESULTequ206
EDITBUTTONequ1
BUTTON1equ2
BUTTON2equ3
BUTTON3equ4
BUTTON4equ5
BUTTON5equ'
7'
BUTTON6equ'
4'
BUTTON7equ'
1'
BUTTON8equ'
0'
BUTTON9equ'
8'
BUTTON10equ'
5'
BUTTON11equ'
2'
BUTTON12equ13
BUTTON13equ'
9'
BUTTON14equ'
6'
BUTTON15equ'
3'
BUTTON16equ17
BUTTON17equ18
BUTTON18equ19
BUTTON19equ20
BUTTON20equ21
BUTTON21equ22
BUTTON22equ23
BUTTON23equ24
BUTTON24equ25
BUTTON25equ26
BUTTON26equ27
BUTTON27equ28
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
数据段
.data
IDTddIDT_TOOLBAR1,IDT_TOOLBAR2,IDT_TOOLBAR3,IDT_TOOLBAR4;
定义工具栏按钮
tb1TBBUTTON<
0,BUTTON1,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON<
0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
1,BUTTON5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
2,BUTTON9,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
3,BUTTON13,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
4,BUTTON17,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbb1TBBUTTON<
5,BUTTON21,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbl1EQU($-tbb1)
tb2TBBUTTON<
0,BUTTON2,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
1,BUTTON6,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
2,BUTTON10,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
3,BUTTON14,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
4,BUTTON18,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbb2TBBUTTON<
5,BUTTON22,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbl2EQU($-tbb2)
tb3TBBUTTON<
0,BUTTON3,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
1,BUTTON7,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
2,BUTTON11,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
3,BUTTON15,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
4,BUTTON19,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbb3TBBUTTON<
5,BUTTON23,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbl3EQU($-tbb3)
tb4TBBUTTON<
0,BUTTON4,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
1,BUTTON8,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
2,BUTTON12,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
3,BUTTON16,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
4,BUTTON20,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbb4TBBUTTON<
5,BUTTON24,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
tbl4EQU($-tbb4)
tbddtb1,tb2,tb3,tb4
tblddtbl1,tbl2,tbl3,tbl4
定义各窗口及按钮的句柄
hInstancedd?
hWinMaindd?
hMenudd?
hSubMenudd?
SubTooldd0
hTB01dd0
hwndButton25HWND?
hwndButton26HWND?
hwndButton27HWND?
hwndStaticHWND?
hwndEditHWND?
FontNamedb'
宋体'
0;
子窗口字体
BackGCdd00b1987ch
lfLOGFONT<
?
>
hFontdd0
;
计算所需定义的变量及缓冲区
tempString1db30dup(?
)
tempString2db30dup(?
copytextdb30dup(?
tempbufferdb30dup(?
)
bufferdb512dup(?
resultdb30dup(?
displaydb30dup(?
saveStringdb30dup(?
savetdb30dup(?
emptyflagsdb?
当前状态0-3
dotflagsdb?
小数标志
copyflagsdb0
saveflagsdb0
mrflagsdb0;
显示存储标志
minusflagsdb0
resultflagsdb0
opflagsdb0;
加减乘除
msdownflagsdb0;
当前操作数是否被Ms或M+.
changflagsdb0;
当前是否输入操作符,是为1.
stickflagsdb0
errflagsdb0;
错误标志
secondnumdd0
keychardb?
输入的数字字符
;
用户程序所用的变量
statusdb?
xdw?
cwdw?
cw1dw?
sw1dw?
swdw?
mansdt0
expdt0
expnumdw0
fourdb5dup(?
chardb?
ten17dq1.0E17
tendw10
ten0dd10.0
crdb0
;
字符串的定义
szClassNamedb'
MenuExample'
0
szCaptionMaindb'
计算器'
szMenuHelpdb'
帮助主题(&
H)'
szMenuAboutdb'
关于计算器(&
A)'
ExitTextdb'
你真的要退出?
'
ExitTitledb'
messagedb"
除数不能为零。
"
message1db"
函数输入无效。
HelpTextdb'
计算器怎么用就不用说了吧,自己摸索吧!
HelpTitledb'
帮助'
AboutTextdb'
byliulinghui'
AboutTitledb'
VersionInformation'
overflowdb'
结果溢出'
InitTextdb'
StaticClassNamedb"
static"
StaticTextdb"
M"
ButtonClassNamedb"
button"
ButtonText1db"
MC"
ButtonText2db"
MR"
ButtonText3db"
MS"
ButtonText4db"
M+"
ButtonText5db"
7"
ButtonText6db"
4"
ButtonText7db"
1"
ButtonText8db"
0"
ButtonText9db"
8"
ButtonText10db"
5"
ButtonText11db"
2"
ButtonText12db"
+/-"
ButtonText13db"
9"
ButtonText14db"
6"
ButtonText15db"
3"
ButtonText16db"
."
ButtonText17db"
/"
ButtonText18db"
*"
ButtonText19db"
-"
ButtonText20db"
+"
ButtonText21db"
sqrt"
ButtonText22db"
%"
ButtonText23db"
1/x"
ButtonText24db"
="
ButtonText25db"
Backspace"
ButtonText26db"
CE"
ButtonText27db"
C"
EditClassNamedb"
edit"
StaticText1db"
"
StaticText2db'
M'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
消息处理
窗口子类化
ToolbarProcprochWnd:
DWORD,wmsg:
DWORD,wParam:
DWORD,lparam:
DWORD
moveax,wmsg
finit
.ifeax==WM_COMMAND
moveax,wParam
.ifax==IDM_INPUT1
invokeSetWindowText,hwndEdit,ADDRtempString1
.ELSEifax==IDM_INPUT2
invokeSetWindowText,hwndEdit,ADDRtempString2
.ELSEifax==IDM_RESULT
invokeSetWindowText,hwndEdit,ADDRdisplay
.ELSEifax==IDM_MESSAGE
invokeSetWindowText,hwndEdit,ADDRmessage
.elseifax==IDM_MESSAGE1
invokeSetWindowText,hwndEdit,ADDRmessage1
.elseifax==BUTTON1;
按下MC
Mc
.ELSEifax==BUTTON2;
按下MR
Mr
.ELSEifax==BUTTON3;
按下MS
Ms
.ELSEifax==BUTTON4;
按下M+
Madd
.ELSEifax>
='
&
&
ax<
KEYWal
.ELSEifax==BUTTON12
SIG
.ELSEifax==BUTTON16
DECI
.elseifax==BUTTON17
OPR4
.elseifax==BUTTON18
OPR3
.elseifax==BUTTON19
OPR2
.elseifax==BUTTON20
OPR1
.ELSEifax==BUTTON21
SQRT
.ELSEifax==BUTTON22
PERCENT
.ELSEifax==BUTTON23
INVERSE
.ELSEifax==BUTTON24
EQUEL
.endif
.elseifeax==WM_CHAR
.ifal<
al>
KEYWal
.elseifal=='
.'
DECI
+'
OPR1
-'
OPR2
*'
OPR3
/'
OPR4
.elseifal==0dh||al==3dh
EQUEL
.elseifal==08h
BSPACE
.elseifal==25h
PERCENT
.endif
.endif
invokeCallWindowProc,SubTool,hWnd,wmsg,wParam,lparam
ret
ToolbarProcendp
*********************************************************
_ProcWinMainprocusesebxediesihWnd,uMsg,wParam,lParam
local@stPos:
POINT
local@hSysMenu
localYP
moveax,uMsg
.ifeax==WM_CREATE;
应用程序创建一个窗口
invokeGetSubMenu,hMenu,0;
取得被指定菜单激活的下拉式菜单或子菜单的句柄
movhSubMenu,eax
invokeGetSystemMenu,hWnd,FALSE;
返回当前使用窗口菜单的拷贝的句柄
mov@hSysMenu,eax
invokeAppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL;
在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单项
invokeAppendMenu,@hSysMenu,0,IDM_HELP,offsetszMenuHelp
invokeAppendMenu,@hSysMenu,0,IDM_ABOUT,offsetszMenuAbout
invokeGetSysColor,COLOR_MENU
movBackGC,eax;
设置子窗口字体颜色
invokelstrcpy,ADDRlf.lfFaceName,ADDRFontName
movlf.lfHeight,-12
movlf.lfWeight,500
invokeCreateFontIndirect,ADDRlf
movhFont,eax
invokeCreateWindowEx,WS_EX_CLIENTEDGE,ADDREditClassName,NULL,\;
创建edit窗口
WS_CHILDorWS_VISIBLEorCS_DBLCLKSorWS_BORDERorES_RIGHTorES_AUTOHSCROLLorES_SAVESEL,\
5,0,245,25,hWnd,EDITBUTTON,hInstance,NULL
movhwndEdit,eax
invokeSetWindowText,hwndEdit,ADDRInitText
invokeCreateWindowEx,WS_EX_CLIENTEDGE,ADDRStaticClassName,ADDRStaticText,\
WS_CHILDorWS_VISIBLEorSS_CENTER,\
10,40,25,25,hWnd,STATICID,hInstance,NULL
movhwndStatic,eax
invokeSetWindowText,hwndStatic,ADDRStaticText1
WINCHILD25,55,40,78,30
WINCHILD26,140,40,60,30
WINCHILD27,210,40,45,30
xorebx,ebx
movYP,73
BuildTB:
invokeCreateWindowEx,0,offs