商品信息管理程序的推荐度计算及商品信息显示的功能)"/>
汇编语言基于窗口的WIN32程序(实现网店商品信息管理程序的推荐度计算及商品信息显示的功能)
资源下载地址:
资源下载地址:
一、实验目的与要求
- 熟悉 WIN32 程序的设计和调试方法;
- 熟悉宏汇编语言中 INVOKE、结构变量、简化段定义等功能;
- 进一步理解机器语言、汇编语言、高级语言之间以及实方式、保护方式之间的一些关系。
二、实验内容
编写一个基于窗口的 WIN32 程序,实现网店商品信息管理程序的推荐度计算及商品信息显示的功能(借鉴实验三的一些做法),具体要求如下描述。
功能一:编写一个基于窗口的 WIN32 程序的菜单框架,具有以下的下拉菜单项:
File Action Help
Exit Recommendation About
List
点菜单File下的Exit选项时结束程序;点菜单Help下的选项About,弹出一个消息框,显示本人信息,类似图 5.1 所示。点菜单 Action 下的选项Recommendation、List将分别实现计算推荐度或显示SHOP所有商品信息的功能(详见功能二的描述)。
功能二:要求采用结构变量存放商品的相关信息。商品数至少定义 5 种。
点菜单项 Recommendation 时,按照实验三的方法计算所有商品的推荐度。用 TD32 观察计算结果。
点菜单项 List 时,要求能在窗口中列出 SHOP 的所有商品的信息。具体显示格式自行定义,可以参照图 5.2 的样式(不要求用中文)。
三、实验过程
3.1 任务 1
3.1.1 设计思想
该基于窗口的程序是基于 WIN32 的标准框架实现的。该程序中还用到了 WIN32 的标准框架,其中包含了主程序、窗口主程序、窗口消息、处理程序以及用户处理程序。操作系统首先执行主程序,待主程序获得与本程序有关的基本信息后,在调用窗口主程序。窗口主程序创建窗口后,将说道的消息通过操作系统发送给窗口消息处理程序。窗口消息处理程序判断收到消息的类型,完成相应的功能
菜单栏的实现用到了.rc 文件。在主程序 winmain 中,程序将对菜单资源进行装载。再在窗口过程中对相应的菜单功能进行设计,即可完成相关菜单功能的实现。在实现菜单功能时,需要对子函数进行调用。在本次实验中,需要编写的子程序为计算推荐度和显示商品信息的子函数。
3.1.2 变量
ClassName:字节变量,存储窗口类字符串‘TryWinClass’
AppName:字节变量,存储窗口名字符串'Our First Window'
MenuName:字节变量,存储菜单名字符串'MyMenu'
DlgName:字节变量,存储字符串'MyDialog'
AboutMsg:字节变量,存储about显示的字符串'I Am CS1705 WMM',0
hInstance:字变量,存储句柄
CommandLine:字变量,存储命令行参数
3.1.3 源程序
- demo.asm 源文件
.386
.model flat,stdcall
option casemap:
none
WinMain proto :
DWORD,:
DWORD,:
DWORD,:
DWORD
WndProc proto :
DWORD,:
DWORD,:
DWORD,:
DWORD
Display proto :
DWORD
Tjd proto :
DWORD
include menuID.INC
include D:
\masm32\INCLUDE\windows.inc
include D:
\masm32\INCLUDE\user32.inc
include D:
\masm32\INCLUDE\kernel32.inc
include D:
\masm32\INCLUDE\gdi32.inc
include D:
\masm32\INCLUDE\shell32.inc
includelib D:
\masm32\LIB\user32.lib
includelib D:
\masm32\LIB\kernel32.lib
includelib D:
\masm32\LIB\gdi32.lib
includelib D:
\masm32\LIB\shell32.lib
goods struct
gname db 10 dup(0)
discount db 0
inprice db 0
outprice db 0
innum db 0
outnum db 0
recommendation db 0
goods ends
.data
ClassName db 'TryWinClass',0
AppName db 'Our First Window',0
MenuName db 'MyMenu',0
DlgName db 'MyDialog',0
AboutMsg db 'I Am CS1705 WMM',0
hInstance dd 0
CommandLine dd 0
buf goods <>
goods <'Pen',10,35,56,70,25,'0'>
goods <'Book',9,12,30,25,5,'0'>
goods <'Pencil',9,1,4,50,6,'0'>
goods <'Ruler',8,2,5,50,10,'0'>
goods <'Bumf',10,3,1,100,1,'0'>
msg_gname db 'GName',0
msg_discount db 'Discount',0
msg_inprice db 'In_Price',0
msg_outprice db 'Out_price',0
msg_innum db 'In_Num',0
msg_outnum db 'Out_Num',0
msg_recommendation db 'Recommendation',0
discount db 2,1,1,1,2, '10','9','9','8','10'
inprice db 2,2,1,1,1, '35','12','1','2','3'
outprice db 2,2,1,1,1, '56','30','4','5','1'
innum db 2,2,2,2,3, '70','25','50','50','100'
outnum db 2,1,1,2,1, '25','5','6','10','1'
;;
recommendation db 2,0,0,0, '0'
menuItem db 0 ;### 3.1.4 实验步骤1. 按要求编写源程序。
2. 在 cmd 中编译和连接并运行程序。
3. 在菜单中点击 Help->About,观察并记录结果。
4. 在菜单中点击 Action->List,观察并记录结果,然后点击 Action->Recommendation 后再点击 Action->List,观察并记录结果。### 3.1.5 实验记录与分析1. 解压 MASM32 压缩包,在解压后的文件目录下,可以看到在 BIN 目录下有汇编(ML.exe/RC.exe)和连接(LINK.exe)等程序。2. 对例子中的 demo 文件进行编译和连接,编译和连接成功如图 3-3 所示。![](.png)<center>图 3-3 实验记录3. TD32 与 TD16 相同之处在于其功能、显示内容基本相同,不同之处在于 TD32 直接显示 32 位寄存器的内容,且在保护模式下 TD32 中不能查看与该程序段无关的代码段、数据段和堆栈段的内容,且其显示的偏移地址均为 32 位。16 位段程序一般用 16 位寄存器来进行数据的处理,代码段、数据段以及堆栈段的偏移地址均为 16 位。而在 WIN32 程序中的各种偏移地址均为 32 位,这就为创建更大的程序、存储更多的数据与编写更长的代码段创造了可能。除此以外,WIN32 程序还可包括.rc 文件,这样一来就可以将代码和菜单、对话框。图标、位图等资源相组合,从而实现各种强大的功能。4. 在菜单中选择 LIST,成功显示商品信息,如图 3-4 所示。![](.png)<center>图 3-4 实验记录5. 在菜单中选择 RECOMMENDATION,计算商品推荐度,稍等后再次点击 LIST,成功显示计算推荐度后的商品信息,如图 3-5 所示。![](.png)<center>图 3-5 实验记录6. 在菜单中选择 About,成功显示含有实验者信息的对话框,如图 3-6 所示。![](.png)<center>图 3-6 实验记录7. 在 DOS 系统中,输出是依靠 9 号功能调用实现的。将需要输出的语句首址传入寄存器 DX,再进行 9 号调用即可输出。而在 WIN32 中,输出是使用的 TEXTOUT 函数,其声明如下:```c++
BOOL TextOut(HDC hdc,//设备描述句柄int nXStart,//字符串的开始位置x坐标int nTStart,//字符串的开始位置y坐标LPCTSTR lpString,//字符串int cbString//字符串中的字符个数);
资源下载地址:
资源下载地址:
更多推荐
汇编语言基于窗口的WIN32程序(实现网店商品信息管理程序的推荐度计算及商品信息显示的功能)
发布评论