学生信息管理系统汇编实现
2012-03-29 11:55
751 查看
写这个东西,没有别的目的,只是想检测下这半个月来自己汇编的学习效果,也可以说自讨苦吃吧,想想自己汇编也只能算是刚刚入门吧。
这个课程设计是在看一个博客看到的,在完全没有看他的源码的情况下,一时突发奇想,没有多想,就开始写了。。。
课程设计要求如下:
1> 要求对学生姓名、年龄、数学、英语成绩等信息进行管理;
2> 界面友好,能支持插入、删除、查询、修改等基本操作;
3> 用汇编实现。
当然在完成它的时候,不甘于仅实现这上面的要求,还在这要求之上新加了些功能,
读者看的时候可能会发现在一些 函数传参的时候,完全没有必要,因为参数是全局变量,在函数中可以直接用,没有必要额外传参,当然我这样做的目的只是为是体验高级语言下的传参的真正实现,更彻底的理解高级语言,这也是学汇编的原因。
我用的汇编器是visual studio里面的ML,链接器是masm615里面的,因为masm615里面的汇编器有些不足,还有这份代码要编译链接通过的话,还需要一个库文件,irvine32.lib和irvine32.inc 若是需要的朋友可以联系我(我也会上传源码文件,可以自行下载 ),
下面是实现的源码(可能比较乱,没来得及优化。):
这个课程设计是在看一个博客看到的,在完全没有看他的源码的情况下,一时突发奇想,没有多想,就开始写了。。。
课程设计要求如下:
1> 要求对学生姓名、年龄、数学、英语成绩等信息进行管理;
2> 界面友好,能支持插入、删除、查询、修改等基本操作;
3> 用汇编实现。
当然在完成它的时候,不甘于仅实现这上面的要求,还在这要求之上新加了些功能,
读者看的时候可能会发现在一些 函数传参的时候,完全没有必要,因为参数是全局变量,在函数中可以直接用,没有必要额外传参,当然我这样做的目的只是为是体验高级语言下的传参的真正实现,更彻底的理解高级语言,这也是学汇编的原因。
我用的汇编器是visual studio里面的ML,链接器是masm615里面的,因为masm615里面的汇编器有些不足,还有这份代码要编译链接通过的话,还需要一个库文件,irvine32.lib和irvine32.inc 若是需要的朋友可以联系我(我也会上传源码文件,可以自行下载 ),
下面是实现的源码(可能比较乱,没来得及优化。):
title Students infomation manage program (StuInfoMag.asm) comment ! this program is useing for manage student infomation. it provide the function of inputing , insert , searvch , delete the student's infomation (include name , age , math scores)...... ------programer:life_still ------2012.3.27 22:39 ! include irvine32.inc includelib irvine32.lib includelib kernel32.lib includelib user32.lib ;===========================operation const================================= invalid_operation equ 0 insert_std equ 1 delete_std equ 2 modify_std equ 3 query_std equ 4 count_std equ 5 Print_all equ 6 list_name equ 7 exit_sym equ 8 Rstart equ 9 store_to_file equ 10 name_length = 15 ;=========================================================================== ;=========================user define data struct============================ Info Struct nname byte name_length+1 dup (0) ; student's name number dword 0 ; number Age byte 0 ; student's age e_mark byte 0 ; english mark m_mark byte 0 ; math_mark c_mark byte 0 ; chinese_mark Info ends ListNode struct stu Info <> NextPtr dword 0 ListNode ends .data interface_str byte 0dh,0ah byte "================================================================================",0dh,0ah byte " Student Management System ",0dh,0ah byte " Softwre promgramer: life_syill ",0dh,0ah byte "--------------------------------------------------------------------------------",0dh,0ah byte " Operation Table ",0dh,0ah byte " ------------------ " ,0dh,0ah byte " 1.Insert Student Info " ,0dh,0ah byte " 2.Delete Student Info " ,0dh,0ah byte " 3.Modify Student Info ",0dh,0ah byte " 4.Query Student Info ",0dh,0ah byte " 5.Count Student Num ",0dh,0ah byte " 6.Print All Info ",0dh,0ah byte " 7.List Student Name ",0dh,0ah byte " 8.Exit System ",0dh,0ah byte " 9.Restart system ",0dh,0ah byte " 10.store data to file ",0dh,0ah byte "================================================================================",0dh,0ah ,0 interface_strlen dword ($-interface_str) str1 byte "please chose the operation acordding the operation table:",0 str2 byte "invalid operation code,please chose again....",0 str3 byte "failed to get the process memery heap handle.exit system....",0 str_name byte "student's name :",0 str_number byte "student's number: ",0 str_math byte "math scores:",0 str_English byte "English Scores:",0 str_chinese byte "chineese scores:",0 str_1 byte "input the name:",0 str_2 byte "Input the age:" ,0 str_3 byte "Input the math mark:",0 str_4 byte "Input the english mark:",0 str_5 byte "Input the chinese mark:",0 str_6 byte "Input the student's number:",0 str_q1 byte '===================Qury student information===================',0 str_d3 byte "=====================Delete Student's data====================",0 str_m1 byte "=====================Modify student's info======================",0 operation_index dword 0 ; operation code Isvalid_operation byte 0 ; judge whether the inputing is valid operation code Isfound dword 0 ; judge whether found the student with the number when qury the student ;=============core data space============== PLISTNODE TYPEDEF PTR ListNode listHead ListNode < <> ,0> ;list header prePnode DWORD offset listHead ; point to the previous Node pcurrent DWORD 0 ;point to the current Node user operation hHeap dword 0 ; memery heap handle stu_count dword 0 filename byte 40 dup(0) hFile dword 0 ;========================================== .code _main proc ;========= call GetProcessHeap ;Get the process default memeery heap ; handle for alloc memery when insert student mov hHeap ,eax cmp eax ,INVALID_HANDLE_VALUE jne start mov edx ,offset str3 call WriteString jmp quit ;========== start: mov eax ,28 call SetTextColor call clrscr push offset interface_str call showface_chose ; display the operation table and read the user input of operation index operate: push offset str1 call WaitingForOperate call compare_operation ;compare operation according user inputing ;and return the Isvalid_operation true or false cmp Isvalid_operation ,invalid_operation je invalid_opt cmp operation_index ,insert_std je Insert ;;; cmp operation_index ,delete_std je Delete ;;; cmp operation_index ,modify_std je Modify ;;; cmp operation_index ,query_std je Qury ;;; cmp operation_index ,count_std je count ;;; cmp operation_index ,Print_all je Print ;;; cmp operation_index ,list_name je Listname ;;; cmp operation_index ,exit_sym je Exitsym ;;; cmp operation_index ,Rstart je Restart ;;; cmp operation_index ,store_to_file je Store_file jmp operate invalid_opt: mov edx ,offset str2 call WriteString ;display errcor operation infomation jmp operate ;==============================================================function Call========================================================================================= insert: call InsertStu jmp operate ;======= count: call Count_stu jmp operate ;====== Qury: push offset str_q1 push offset listhead push stu_count call Qury_stu jmp operate ;======= listname: push offset listHead push stu_count call _list_name jmp operate ;======== print: push offset ListHead push stu_count call _Print_all jmp operate ;======== delete: call _delete jmp operate ;====== Modify: push offset Listhead push stu_count call _Modify jmp operate Restart: push offset listhead push stu_count call freememHeap jmp start store_file: push offset listhead push stu_count call _Store_data_to_file jmp operate Exitsym: push offset listHead push stu_count call freeMemHeap ;=========== quit: exit _main endp ;==================================================================Function to implement================================================================================== showface_chose proc push ebp mov ebp ,esp push edx mov edx ,[ebp+8] call WriteString pop edx pop ebp ret 4 showface_chose endp ;======================= ;======================= WaitingForOperate proc push ebp mov ebp ,esp push edx mov edx ,[ebp+8] call WriteString call ReadInt mov operation_index ,eax pop edx pop ebp ret 4 WaitingForOperate endp ;======================= compare_operation proc push ebp mov ebp ,esp push eax mov eax ,operation_index cmp eax ,1 jb quit cmp eax ,10 ja quit mov Isvalid_operation ,1 jmp rtn quit: mov Isvalid_operation ,0 rtn: pop eax pop ebp ret compare_operation endp ;=========================== InsertStu proc .data str_I1 byte "====================Insert New Student======================",0 .code pushad mov eax ,30 call SetTextColor mov edx ,offset str_I1 call WriteString call Crlf mov eax ,28 call SetTextColor INVOKE HeapAlloc, hHeap ,HEAP_ZERO_MEMORY ,type ListNode mov pcurrent ,eax mov edi ,eax mov edx , offset str_1 call WriteString mov ecx ,name_length mov edx , edi ;offset (ListNode ptr[edi]).stu.nname call ReadString mov edx ,offset str_6 call WriteString call ReadInt mov (ListNode ptr[edi]).stu.number , eax mov edx ,offset str_2 call WriteString call ReadInt mov (ListNode ptr[edi]).stu.age ,al mov edx ,offset str_3 call WriteString call ReadInt mov (ListNode ptr[edi]).stu.m_mark ,al mov edx ,offset str_4 call WriteString call ReadInt mov (ListNode ptr[edi]).stu.e_mark ,al mov edx ,offset str_5 call WriteString call ReadInt mov (ListNode ptr[edi]).stu.c_mark ,al call Crlf call Crlf mov esi ,prePnode mov (ListNode ptr[esi]).NextPtr ,edi mov prePnode ,edi inc stu_count popad ret insertStu endp ;=========================== FreeMemHeap proc push ebp mov ebp ,esp push ecx push edi mov ecx ,[ebp+8] cmp ecx ,0 jbe rt1 mov edi ,[ebp+12] mov ecx ,[ebp+8] lp01: push ecx mov edi ,(ListNode ptr[edi]).NextPtr INVOKE HeapFree , hHeap ,1 ,edi dec stu_count pop ecx loop lp01 rt1: pop edi pop ecx pop ebp ret 8 FreeMemHeap endp ;============================= Count_Stu proc .data str_c1 byte "the total of student number: ",0 str_c2 byte "=================Count total student=======================",0 .code mov eax ,30 call SetTextColor mov edx ,offset str_c2 call WriteString call crlf mov eax ,28 call SetTextColor mov edx ,offset str_c1 call WriteString mov eax ,stu_count call WriteDec call Crlf ret Count_Stu endp ;=========================== Qury_stu proc ;reuurn the listNode adress in eax and the previous listnode adress in ebx if found and write the Isfound to judge whether found the data .data str_q2 byte "Enter the student's number you want to qury:",0 str_q3 byte "Found student:",0dh,0ah,0 str_q5 byte "no student with the number: ",0 stu_number dword 0 .code push ebp mov ebp,esp push esi push edx mov edx ,[ebp+16] mov eax ,30 call SetTextColor call WriteString call crlf mov eax ,28 call SetTextColor mov edx ,offset str_q2 call WriteString call ReadInt mov stu_number ,eax mov ecx ,[ebp+8] mov esi ,[ebp+12] lp02: mov ebx ,esi mov esi ,(ListNode ptr[esi]).NextPtr cmp eax , (ListNode ptr[esi]).stu.number je ok_q1 loop lp02 jmp rt_q ok_q1: mov edx ,offset str_q3 call WriteString call crlf mov edx ,offset str_name call WriteString mov edx ,esi call WriteString call Crlf mov edx ,offset str_number call WriteString mov eax ,(ListNode ptr[esi]).stu.number call WriteDec call Crlf mov edx ,offset str_math call WriteString movzx eax ,(ListNode ptr[esi]).stu.m_mark call WriteDec call Crlf mov edx ,offset str_english call WriteString movzx eax,(ListNode ptr[esi]).stu.e_mark call WriteDec call Crlf mov edx,offset str_chinese call WriteString movzx eax ,(ListNode ptr[esi]).stu.c_mark call WriteDec call Crlf call crlf call crlf mov eax ,esi mov Isfound ,1 jmp ed rt_q: mov edx ,offset str_q5 call WriteString mov eax ,stu_number call WriteDec mov Isfound ,0 call Crlf call crlf call crlf ed: pop edx pop esi pop ebp ret 12 qury_stu endp ;===================== _list_name proc .data str_l1 byte "there is no students in database.",0 str_l2 byte "==================List all student's name===================",0 .code push ebp mov ebp,esp push eax push ecx push edx mov eax ,30 call SetTextColor mov edx ,offset str_l2 call WriteString call Crlf mov eax ,28 call SetTextColor mov edx,[ebp+12] mov ecx,[ebp+8] mov eax ,1 cmp ecx ,0 je rtl1 lpl1: call WriteDec inc eax mov edx,(ListNode ptr[edx]).NextPtr call WriteString call crlf loop lpl1 call Crlf call Crlf jmp edl1 rtl1: mov edx ,offset str_l1 call WriteString call Crlf call crlf edl1: pop edx pop ecx pop eax pop ebp ret 8 _list_name endp ;==================== _Print_all proc .data str_p1 byte "=================Print all stu info=====================",0 str_p2 byte "student ",0ah,0 str_p3 byte "---------------",0 str_p4 byte "there is no student in database.",0 .code push ebp mov ebp ,esp push eax push ecx push edi push edx mov eax ,30 call SetTextColor mov edx ,offset str_p1 call WriteString call Crlf mov eax ,28 call SetTextColor mov ecx ,[ebp+8] mov edi ,[ebp+12] mov eax ,1 cmp ecx ,0 je rtp1 lpp1: push ecx mov edi,(ListNode ptr[edi]).NextPtr mov edx ,offset str_p2 call WriteString call WriteDec inc eax call Crlf push eax mov edx ,offset str_name call WriteString mov edx ,edi call WriteString call Crlf mov edx ,offset str_number call WriteString mov eax ,(ListNode ptr[edi]).stu.number call WriteDec call crlf mov edx ,offset str_math call WriteString movzx eax ,(ListNode Ptr[edi]).stu.m_mark call WriteDec call Crlf ;========================= jmp lpp13 lpp12: jmp lpp1 lpp13: ;========================= mov edx ,offset str_english call WriteString movzx eax ,(ListNode ptr[edi]).stu.e_mark call WriteDec call Crlf mov edx ,offset str_chinese call WriteString movzx eax ,(ListNode ptr[edi]).stu.c_mark call WriteDec call Crlf mov edx ,offset str_p3 call WriteString call Crlf pop eax pop ecx loop lpp12 call crlf call crlf jmp enp rtp1: mov edx ,offset str_p4 call WriteString call Crlf call crlf enp: pop edx pop edi pop ecx pop eax pop ebp ret 8 _print_all endp ;=================== _delete proc .data ;str_d1 byte "Enter the student's number:",0 str_d2 byte " deleted the student.",0 ; str_num DWORD 0 .code push eax push edx push ebx push offset str_d3 push offset listhead push stu_count call qury_stu call Crlf cmp Isfound ,0 je rtd1 mov edx,(ListNode ptr[eax]).NextPtr mov (ListNode ptr[ebx]).NextPtr,edx INVOKE HeapFree ,hHeap ,1 ,eax mov edx,offset str_d2 call WriteString call crlf call crlf call crlf dec stu_count rtd1: pop ebx pop edx pop eax ret _delete endp ;=================== _Modify proc .data str_m2 byte "Input The new data for the student:",0 str_m3 byte "OK!,the new data is stored to database.",0 .code push ebp mov ebp,esp push eax push ecx push esi push edx push offset str_m1 push [ebp+12] push [ebp+8] call Qury_stu cmp Isfound ,0 je rtm1 mov esi ,eax mov edx ,offset str_m2 call WriteString mov edx ,offset str_1 call WriteString mov edx ,esi mov ecx ,name_length call ReadString mov edx ,offset str_6 call WriteString call ReadInt mov (ListNode ptr[esi]).stu.number ,eax mov edx ,offset str_2 call WriteString call ReadInt mov (ListNode ptr[esi]).stu.age ,al mov edx ,offset str_3 call WriteString call ReadInt mov (ListNode ptr[esi]).stu.m_mark ,al mov edx ,offset str_4 call WriteString call ReadInt mov (ListNode ptr[esi]).stu.e_mark ,al mov edx ,offset str_5 call WriteString call ReadInt mov (ListNode ptr[esi]).stu.c_mark ,al mov edx,offset str_m3 call WriteString call Crlf call crlf call crlf rtm1: pop edx pop esi pop ecx pop eax pop ebp ret 8 _Modify endp ;=========================== _store_data_to_file proc .data str_dt1 byte "======================Store data to file=====================",0 str_dt2 byte "Enter the file name(absolute path)to store data:",0 str_dt3 byte "failed to create file....",0 str_dt4 byte "OK ,succesed to store data to file",0 str_demo byte "this program is useing for manage student infomation.it provide the function of inputing , insert , searvch ,delete the student's infomation (include name , age , math scores......)------programer:life_still(钟)------2012.3.27 22:39 ",0 demo_len dword ($-str_demo) str_dt_f1 byte " ",0 str_len_f1 dword ($-str_len_f1) .code push ebp mov ebp ,esp mov eax ,30 call SetTextColor mov edx ,offset str_dt1 call WriteString call crlf mov eax ,28 call SettextColor mov edx ,offset str_dt2 call WriteString mov edx ,offset filename mov ecx ,39 call ReadString mov edx ,offset filename call CreateOutputFile mov hfile ,eax cmp eax ,INVALID_HANDLE_VALUE je hfile_error mov eax ,hfile mov edx ,offset interface_str mov ecx ,interface_strlen call WriteToFile mov eax ,hfile mov edx ,offset str_demo mov ecx ,demo_len call writetofile mov ecx ,[ebp+8] mov edi, [ebp+12] cmp ecx ,0 je rt_dt lp_dt: push ecx push edi mov edi ,(ListNode ptr[edi]).NextPtr mov eax ,hfile mov ecx ,16 mov edx ,edi call WriteTofile mov edx ,offset str_dt_f1 mov ecx ,str_len_f1 call WriteTofile pop edi pop ecx loop lp_dt call closefile mov edx ,offset str_dt4 call WriteString call crlf call Crlf call crlf jmp rt_dt hfile_error: mov edx ,offset str_dt3 call WriteString call crlf call crlf call crlf rt_dt: pop ebp ret 8 _store_data_to_file endp end _main下面是效果图:
相关文章推荐
- 用汇编实现学生信息管理系统
- linux终端版学生信息管理系统【C语言实现】
- 实现简单的学生选课信息管理系统
- C++链表类的三种使用方法(学生信息管理系统的实现)
- 学生信息管理系统--(Java+MySQL实现)
- Java60行代码实现swing+mysql学生信息管理系统
- ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
- 使用结构体实现学生信息管理系统
- 线性表的链式实现应用----学生信息管理系统
- 简单实现了一个学生成绩信息管理系统
- 学生信息管理系统(C++实现)
- C语言实现一个Window控制台带彩色,且可以用方向键选择并确认的菜单式列表(二) ---学生信息管理系统
- 学生信息管理汇编实现
- 使用python实现一个简单的学生信息管理系统
- javaWeb实现学生信息管理系统
- C语言实现一个列表式的学生信息管理系统(完善)
- SSH JavaWeb学生信息管理系统实现
- Qt: 学生信息管理里系统,QTreewidget、QTableView实现
- c++封装链表实现-->学生信息管理分析系统
- 使用python实现一个简单的学生信息管理系统