汇编语言:简单图形界面的绘制教程

来源:互联网 发布:入侵centos教程 编辑:程序博客网 时间:2024/05/29 15:06

        最近自己在学习汇编语言,看到了汇编语言绘制的图形界面,感觉很强大;自己以后的工作也要写一些小工具,于是,自己在看了网上很多的资料和别人分享的心得,也学习着自己绘制了一个图形界面。这里我要特别的鸣谢eva.li!

        我的这个图形界面包括3个部分,分别是:欢迎界面、主界面以及结束界面。截图如下:

1,欢迎界面


2,主界面


3,结束界面


        主体都是蓝色调的,我很喜欢,不过,你自己可以根据你的爱好更改。

        下面我把主程序和宏调用的源码也公布出来,希望给以后的学习者一个借鉴和参考,毕竟有些代码很难找,虽然网络很大;里面的工具的代码我现在就不公布了,等我完善了以后,也会公布的,可以关注我以后的博客:)

第一部分:主程序

;----------------------------------------------------------------------------;              S E G M E N T  STARTS;----------------------------------------------------------------------------include mnmacro.asmdata segmentscrmmdb 100 dup(?);----------------------------------------------------------------------------;              mainmenu name;----------------------------------------------------------------------------mainmenu1db 'File'mainmenu2db 'Tool'mainmenu3db 'R8042'mainmenu4db 'Other'mainmenu5db 'Extra'mainmenu6       db 'Help';----------------------------------------------------------------------------;             file's submenu name;----------------------------------------------------------------------------submenu11db 'Save'submenu12db 'Open'submenu13db 'Exit';----------------------------------------------------------------------------;             Tool's submenu name;----------------------------------------------------------------------------submenu21db 'I O'submenu22db 'ISA 'submenu23db 'Memory';----------------------------------------------------------------------------;             R8042's submenu name;----------------------------------------------------------------------------submenu31db 'A20'submenu32db 'reboot'submenu33db 'LED ';----------------------------------------------------------------------------;             other's submenu name;----------------------------------------------------------------------------submenu41db 'PCI 'submenu42db 'Beep'submenu43db 'e820  ';----------------------------------------------------------------------------;             extra's submenu name;----------------------------------------------------------------------------submenu51db 'CMOS 'submenu52db 'int'submenu53db '=== ';----------------------------------------------------------------------------;                    help's submenu name;----------------------------------------------------------------------------submenu61       db 'about'submenu62       db '     'submenu63       db '     ';----------------------------------------------------------------------------;Welcome window information;----------------------------------------------------------------------------msgtitledb 'Assemble Design'msg1    db 'Please press Alt+F,Alt+T,Alt+R,Alt+O,Alt+E,Alt+H or ',19h,' to open the submenu.'msg2db 'Please press Enter (',11h,0c4h,0d9h,') to close the submenu.'msg3db 'Please press ',1bh,' or ',1ah,' to select the mainmenu.'msg4db 'Please press ',18h,' or ',19h,' to select the submenu.'msg5db 'Copyright 2012 keven.gao from KS.'msg6db 'Press any key to continue...'msg7db '                   ';----------------------------------------------------------------------------;exit window information;----------------------------------------------------------------------------overdb 'Thank you for using...Good bye!!!!';----------------------------------------------------------------------------;other information;----------------------------------------------------------------------------escapedb 'Press ESC to exit                    E-mail:gaokang321@gmail.com'text1db 'This is a simple tool ru, there are io, memory, pci, isa, e820, 'text2db 'a20, keyboard led, reboot and beep, etc. You can use this gadget'text3db 'to view their status, or to achieve a particular effect.'text4   db '================================================================'text5db 'Thank you very much.enjoy it!'text6db '                                         ---powered by keven.gao'sub11db 'Select Save'sub12db 'Select Open'sub13db 'Select Exit'sub21db 'Select I O'sub22db 'Select ISA 'sub23db 'Select Memory'sub31db 'Select a20'sub32db 'Select reboot'sub33db 'Select LED'sub41db 'Select PCI'sub42db 'Select Beep'sub43db 'Select e820'sub51db 'Select CMOS'sub52db 'Select int'sub53db 'Select === 'sub61   db 'Select about'sub62   db 'Select      'sub63   db 'Select      ';----------------------------------------------------------------------------mainnum db 1;Main menu sequence number(主菜单序列号)subnumdb ?;Sub menu sequence number(子菜单序列号)subshow db 0;0 sub menu is not displayed(为0时子菜单不显示)mainindex db ?;Main menu character length(主菜单字符长度)data ends;----------------------------------------------------------------------------code segmentassume cs:code,ds:data,es:dataextern memory1:farextern io1:farextern pci1:farextern isa1:farextern beep1:farextern a201:farextern e8201:farextern key1:farextern reboot1:farextern cmos1:farextern int1:farextern about1:farstart:mov ax,datamov ds,axmov es,ax;----------------------------------------------------------------------------;Initializing screen start(初始化屏幕开始);----------------------------------------------------------------------------mov ah,0mov al,03hint 10h;----------------------------------------------------------------------------;               Initializing screen end(初始化屏幕结束);----------------------------------------------------------------------------showcur 1;Hide cursor(隐藏光标);----------------------------------------------------------------------------;Start the main window drawing;----------------------------------------------------------------------------drawwindow 1eh,0,0,24,79outputstr msgtitle,15,10,30,1fhoutputstr msg1,73,15,5,17hchangemenu 15,18,5,1ehchangemenu 15,24,5,1ehchangemenu 15,30,5,1ehchangemenu 15,36,5,1ehchangemenu 15,42,5,1ehchangemenu 15,48,5,1ehchangemenu 15,57,1,1ehoutputstr msg2,46,16,5,17hchangemenu 16,18,11,1ehoutputstr msg3,43,17,5,17hchangemenu 17,18,1,1ehchangemenu 17,23,1,1ehoutputstr msg4,42,18,5,17hchangemenu 18,18,1,1ehchangemenu 18,23,1,1ehoutputstr msg5,33,13,5,1fhoutputstr msg6,28,20,40,9ehoutputstr msg7,19,9,28,93houtputstr msg7,19,11,28,93hsetpos 10,28outputchar ' ',93h,1setpos 10,46outputchar ' ',93h,1mov ah,07hint 21hdrawwindow 1eh,0,0,24,79drawwindow 70h,0,0,0,79drawwindow 70h,24,0,24,79setpos 1,0windowtandb 0d5h,0cdh,0b8h,1,0,80,1eh;Top and bottom bordermov al,2draw:windowlandr 0b3h,al,0,80,1ehinc alcmp al,17hjne drawwindowtandb 0c0h,0c4h,0d9h,23,0,80,1ehoutputstr escape,64,24,3,70h             ;宽度64,24行,颜色70h,;----------------------------------------------------------------------------;Start menu drawing;----------------------------------------------------------------------------setpos 0,3outputstr mainmenu1,4,0,3,0fhoutputstr mainmenu2,4,0,13,70hchangemenu 0,13,1,74houtputstr mainmenu3,5,0,23,70hchangemenu 0,23,1,74houtputstr mainmenu4,5,0,33,70hchangemenu 0,33,1,74houtputstr mainmenu5,5,0,43,70hchangemenu 0,43,1,74h        outputstr mainmenu6,4,0,53,70hchangemenu 0,53,1,74hsetpos 0,3;----------------------------------------------------------------------------;End of the main window and menu drawing;----------------------------------------------------------------------------outputstr msg1,73,15,5,17hchangemenu 15,18,5,1ehchangemenu 15,24,5,1ehchangemenu 15,30,5,1ehchangemenu 15,36,5,1ehchangemenu 15,42,5,1ehchangemenu 15,48,5,1ehchangemenu 15,57,1,1ehoutputstr msg2,46,16,5,17hchangemenu 16,18,11,1ehoutputstr msg3,43,17,5,17hchangemenu 17,18,1,1ehchangemenu 17,23,1,1ehoutputstr msg4,42,18,5,17hchangemenu 18,18,1,1ehchangemenu 18,23,1,1ehoutputstr text1,63,3,5,1ahoutputstr text2,64,4,5,1ahoutputstr text3,56,5,5,1ahoutputstr text4,64,6,5,1ahoutputstr text5,29,7,5,1ahoutputstr text6,64,8,5,1ah ;字符个数64,行8,开始列5,颜色属性1ah;----------------------------------------------------------------------------;;Message receiving cycle(接受消息循环);----------------------------------------------------------------------------input:movah, 0int16h             ;ah=字符的扫描码cmpah, 01h;esc的扫描码是01h      jnecontinue1callexitjmpinputcontinue1:cmpah, 4bh;left的扫描码是4bhjnecontinue2callprsleftjmpinputcontinue2:cmpah, 4dh;right的扫描码是4dhjnecontinue3callprsrightjmpinputcontinue3:cmpah, 50h;down的扫描码是50h    jnecontinue4callprsdownjmpinputcontinue4:cmpah, 21h         ;key fjnecontinue5       movah, 02hint16handal, 0fhcmpal, 08hjnecontinue5callFAltjmpinputcontinue5:cmpah, 14h         ;key tjnecontinue6movah, 02hint16h             ;取变换键当前状态,al=变换键当前状态;-----------------------------------------------------------------------;前面我们已经提到Shift、Ctrl 、Alt、Num Lock、Scroll、Ins 和;Caps Lock这些键不具有ASCII码,但按动了它们能改变其它键所产生;的代码,那么如何能判断这些键按动与否呢?在键盘状态字节中高4位;指出各种键盘方式(Ins、Caps Lock、Num Lock、Scroll)是ON(1);还是OFF(0);低4位表示Alt、Ctrl、leftShift、rightshift键是否按动。;这8个键有;时又被称为变换键。使用INT 16H的AH=2的功能即可得到这些键状态;的信息。;-----------------------------------------------------------------------andal, 0fh         ;高4位清零cmpal, 08h         ;检查alt键jnecontinue6calltaltjmpinputcontinue6:cmpah, 13h         ;key rjnecontinue7movah, 02hint16handal, 0fhcmpal, 08hjnecontinue7callRAltjmpinputcontinue7:cmpah, 18h         ;key ojnecontinue8movah, 02hint16handal, 0fhcmpal, 08hjnecontinue8callOAltjmpinputcontinue8:cmpah, 12h         ;key ejnecontinue9movah, 02hint16handal, 0fhcmpal, 08hjnecontinue9callealtjmpinputcontinue9:cmpah, 23h         ;key hjnecontinue10movah, 02hint16handal, 0fhcmpal, 08hjnecontinue10callhaltjmpinputcontinue10:cmpah, 48h;upjnecontinue11callprsupjmpinputcontinue11:cmpah, 1ch;enterjnecontinue12callprsenterjmpinputcontinue12:jmpinput; ===========================================================================prsenter proc near;Press the ENTER keycmpsubshow, 0jneenter1callprsdownretenter1:moval,mainnumpushaxmovcl, 0ahmulclsubax, 07hmovmainnum,aldecmainnumwritescr mainnum,scrmmincmainnumsetpos 0,mainnumpopaxmovmainnum,aldrawwindow 13h,22,4,22,50cmpmainnum, 1jneprsenter1cmpsubnum, 2jneentersub12outputstr sub11,11,22,5,13hentersub12:cmpsubnum, 3jneentersub13outputstr sub12,11,22,5,13hentersub13:cmpsubnum, 4jneprsenter1outputstr sub13,11,22,5,13hcallexitprsenter1:cmpmainnum, 2jneprsenter2cmpsubnum, 2jneentersub22callio1jmpstartentersub22:cmpsubnum, 3jneentersub23callisa1jmpstartentersub23:cmpsubnum, 4jneprsenter2callmemory1jmpstartprsenter2:cmpmainnum, 3jneprsenter3cmpsubnum, 2jneentersub32calla201jmpstartentersub32:cmpsubnum, 3jneentersub33callreboot1jmpstartentersub33:cmpsubnum, 4jneprsenter3callkey1jmpstartprsenter3:cmpmainnum, 4jneprsenter4cmpsubnum, 2jneentersub42callpci1jmpstartentersub42:cmpsubnum, 3jneentersub43callbeep1jmpstartentersub43:cmpsubnum, 4jneprsenter4calle8201jmpstartprsenter4:cmpmainnum, 5jneprsenter5cmpsubnum, 2jneentersub52callcmos1jmpstartentersub52:cmpsubnum, 3jneentersub53callint1jmpstartentersub53:cmpsubnum, 4jneprsenter5outputstr sub53,10,22,5,13hprsenter5:        cmpmainnum, 6jneprsenter6cmpsubnum, 2jneentersub62callcmos1jmpstartentersub62:cmpsubnum, 3jneentersub63callint1jmpstartentersub63:cmpsubnum, 4jneprsenter6;outputstr sub53,10,22,5,13hprsenter6:movsubshow, 0retprsenter endp; ===========================================================================halt proc near;H+Altmoval,mainnummovcl,0ahmulclsubax,07hmovmainnum,alcmpsubshow, 1jnehshowdecmainnumwritescr mainnum,scrmmincmainnumhshow:readscr 52,scrmmsubmenu 52,submenu61,5,submenu62,5,submenu63,5,9changemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hmovmainnum, 06hchangemenu 0,53,4,0fhchangemenu 2,54,6,0fhmovsubnum, 2movsubshow, 1setpos 0,53rethalt endp; ===========================================================================ealt proc near;E+Altmoval,mainnummovcl,0ahmulclsubax,07hmovmainnum,alcmpsubshow, 1jneeshowdecmainnumwritescr mainnum,scrmmincmainnumeshow:readscr 42,scrmmsubmenu 42,submenu51,5,submenu52,3,submenu53,3,9changemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hmovmainnum, 05hchangemenu 0,43,5,0fhchangemenu 2,44,6,0fhmovsubnum, 2movsubshow, 1setpos 0,43retealt endp; ===========================================================================oalt proc near;O+Altmoval,mainnummovcl,0ahmulclsubax,07hmovmainnum,alcmpsubshow, 1jneoshowdecmainnumwritescr mainnum,scrmmincmainnumoshow:readscr 32,scrmmsubmenu 32,submenu41,4,submenu42,4,submenu43,6,9changemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hmovmainnum, 04hchangemenu 0,33,5,0fhchangemenu 2,34,6,0fhmovsubnum, 2movsubshow, 1setpos 0,33retoalt endp; ===========================================================================ralt proc near;R+Altmoval,mainnummovcl,0ahmulclsubax,07hmovmainnum,alcmpsubshow, 1jnershowdecmainnumwritescr mainnum,scrmmincmainnumrshow:readscr 22,scrmmsubmenu 22,submenu31,3,submenu32,6,submenu33,4,9changemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hmovmainnum, 03hchangemenu 0,23,5,0fhchangemenu 2,24,6,0fhmovsubnum, 2movsubshow, 1setpos 0,23retralt endp; ===========================================================================talt proc near;T+Altmoval,mainnummovcl,0ahmulclsubax,07hmovmainnum,alcmpsubshow, 1jnetshowdecmainnumwritescr mainnum,scrmmincmainnumtshow:readscr 12,scrmmsubmenu 12,submenu21,3,submenu22,4,submenu23,6,9changemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hmovmainnum, 02hchangemenu 0,13,4,0fhchangemenu 2,14,6,0fhmovsubnum, 2movsubshow, 1setpos 0,13rettalt endp; ===========================================================================falt proc near;F+Altmoval,mainnummovcl, 0ahmulclsubax, 07hmovmainnum,alcmpsubshow, 1jnefshowdecmainnumwritescr mainnum,scrmmincmainnumfshow:readscr 2,scrmmsubmenu 2,submenu11,4,submenu12,4,submenu13,4,9changemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hmovmainnum,01hchangemenu 0,3,4,0fhchangemenu 2,4,6,0fhmovsubnum, 2movsubshow, 1setpos 0,3retfalt endp; ===========================================================================prsup proc near; Press the up arrowcmpsubshow,0jneprsup2retprsup2:moval,mainnumpush axmovcl,0ahmulclsubax,07hmov mainnum,alchangemenu subnum,mainnum,8,70hincmainnumchangemenu subnum,mainnum,1,74hpop axmovmainnum,alcmpsubnum,02hjneprsuptopmovsubnum,04hjmpprsup1prsuptop:decsubnumprsup1:moval,mainnumpush axmovcl, 0ahmulclsubax, 07hmovmainnum, alchangemenu subnum,mainnum,8,0fhpop axmovmainnum, alretprsup endp; ===========================================================================prsdown proc near; Press the down arrowcmpsubshow,0jneprsdown2cmpmainnum,1jneprsdown3callfaltjmpprsdown8prsdown3:cmpmainnum,2jneprsdown4calltaltjmpprsdown8prsdown4:cmpmainnum,3jneprsdown5callraltjmpprsdown8prsdown5:cmpmainnum,4jneprsdown6calloaltjmpprsdown8prsdown6:        cmpmainnum,5   ;最坑爹的bug,这行代码自己手敲的和拷贝的效果竟然不一样!!!jne     prsdown7call    ealtjmp     prsdown8prsdown7:callhaltprsdown8:retprsdown2:moval,mainnumpushaxmovcl, 0ahmulclsubax, 07hmovmainnum, alchangemenu subnum,mainnum,8,70hincmainnumchangemenu subnum,mainnum,1,74hpopaxmovmainnum, alcmpsubnum, 04hjneprsdownbotmovsubnum, 02hjmpprsdown1prsdownbot:incsubnumprsdown1:moval,mainnumpushaxmovcl, 0ahmulclsubax, 07hmovmainnum, alchangemenu subnum,mainnum,8,0fhpopaxmovmainnum, alretprsdown endp; ===========================================================================prsright proc near; Press the right arrowcmpsubshow,0jeprsright1callprsrgtsubretprsright1:moval,mainnumpushaxmovcl, 0ah ;00001010bmulclsubax, 07h ;00000111bmovmainnum, alchangemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74h ;这里的1,代表一个字节的宽度,是主菜单的第一个红色的大写字母pop axmovmainnum, alcmpmainnum, 06h  ;最后一个主菜单编号jneprsright2movmainnum, 01h  ;第一个主菜单的编号jmpprsright3prsright2:incmainnumprsright3:                    ;第二个主菜单cmpmainnum, 1jeprsright4cmpmainnum, 2jeprsright4cmpmainnum, 5jeprsright5cmpmainnum, 3jeprsright5cmpmainnum, 4jeprsright5cmp     mainnum, 6je      prsright6prsright4:movmainindex, 5jmpprsright7prsright5:        mov     mainindex, 5        jmp     prsright7prsright6:movmainindex, 5prsright7:moval,mainnumpushaxmovcl, 0ahmulclsubax, 07hmovmainnum, alchangemenu 0,mainnum,mainindex,0fh ;当主菜单或者是子菜单被选中时,显示的黑底亮白的字体popaxmovmainnum, alretprsright endp; ===========================================================================prsrgtsub proc near;When the menu is opened to press the right arrowcmpmainnum, 1jneprsrgt1calltaltjmpprsrgt6prsrgt1:cmpmainnum, 2jneprsrgt2callraltjmpprsrgt6prsrgt2:cmpmainnum, 3jneprsrgt3calloaltjmpprsrgt6prsrgt3:cmpmainnum, 4jneprsrgt4callealtjmpprsrgt6prsrgt4:        cmpmainnum, 5jneprsrgt5callhaltjmpprsrgt6prsrgt5:callfaltprsrgt6:retprsrgtsub endp; ===========================================================================prsleft proc near;Press the left arrowcmpsubshow, 0jeprsleft1callprslftsubretprsleft1:moval,mainnumpushaxmovcl, 0ahmulclsubax, 07hmovmainnum,alchangemenu 0,mainnum,5,70hchangemenu 0,mainnum,1,74hpopaxmovmainnum, alcmpmainnum, 01h;第一个主菜单编号jneprsleft2movmainnum, 06h;最后一个主菜单的编号,或者说是一共有6个主菜单jmpprsleft3prsleft2:decmainnumprsleft3:cmpmainnum, 1jeprsleft4cmpmainnum, 2jeprsleft4cmpmainnum, 5jeprsleft5cmpmainnum, 3jeprsleft5cmpmainnum, 4jeprsleft5cmp     mainnum, 6je      prsleft6prsleft4:movmainindex, 5     ;Ejmpprsleft7prsleft5:movmainindex, 5jmpprsleft7prsleft6:movmainindex, 5prsleft7:moval,mainnumpushaxmovcl, 0ahmulclsubax, 07hmovmainnum, alchangemenu 0,mainnum,mainindex,0fhpopaxmovmainnum, alretprsleft endp; ===========================================================================prslftsub proc near;When the menu is opened by pressing the left arrow;当菜单打开是按左箭头      cmpmainnum, 1jneprslft1callhaltjmpprslft6prslft1:cmpmainnum, 2jneprslft2callfaltjmpprslft6prslft2:cmpmainnum, 3jneprslft3calltaltjmpprslft6prslft3:cmpmainnum, 4jneprslft4callraltjmpprslft6prslft4:        cmp     mainnum, 5jne     prslft5call    oaltjmp     prslft6prslft5:callealtprslft6:retprslftsub endp; ===========================================================================exit proc near;Exit subpoc退出子程序drawwindow 1eh,0,0,24,79outputstr msgtitle,15,10,30,1fhoutputstr over,34,15,21,1choutputstr msg7,19,9,28,93houtputstr msg7,19,11,28,93h  ;总字数19,行11,颜色93hsetpos 10,28outputchar ' ',93h,1setpos 10,46outputchar ' ',93h,1movah, 07hint21hmovah, 0moval, 03hint10hmovah, 4chint21hretexit endp; ===========================================================================code ends     end start

2,功能宏调用程序

;设置光标位置setpos macro top,leftmov ah,02hmov bx,0mov dh,topmov dl,leftint 10hendm;修改菜单属性changemenu macro top,left,width,attrlocal chgmov dl,leftchg:setpos top,dlmov bh,0mov ah,08hint 10hmov bl,attrmov cx,1mov ah,09hint 10hinc dlmov al,leftadd al,widthcmp dl,aljne chgsetpos top,leftendm;绘制窗口drawwindow macro attr,top,left,bottom,rightpush axpush bxpush cxpush dxmov ah,06hmov al,0mov bh,attrmov ch,topmov cl,leftmov dh,bottommov dl,rightint 10hpop dxpop cxpop bxpop axendm;绘制窗口上下边框windowtandb macro l,m,r,top,left,width,attrsetpos top,leftoutputchar l,attr,1setpos top,left+1outputchar m,attr,width-2setpos top,left+width-1outputchar r,attr,1endm;绘制窗口左右边框windowlandr macro char,top,left,width,attrsetpos top,leftoutputchar char,attr,1setpos top,left+width-1outputchar char,attr,1endm;输出字符outputchar macro char,attr,numpush axmov bh,0mov ah,09hmov al,charmov bl,attrmov cx,numint 10hpop axendm;输出字符串outputstr macro str,num,top,left,attrpush axpush bxpush bppush cxpush dxmov ah,13hlea bp,strmov cx,nummov dh,topmov dl,leftmov bh,0mov al,1mov bl,attrint 10hpop dxpop cxpop bppop bxpop axendm;绘制子菜单submenu macro left,menu1,num1,menu2,num2,menu3,num3,widthlocal menudrawwindow 70h,1,left,5,left+widthwindowtandb 0dah,0c4h,0bfh,1,left,width+1,70hmov al,2menu:windowlandr 0b3h,al,left,width+1,70hinc alcmp al,5;==================jne menuwindowtandb 0c0h,0c4h,0d9h,5,left,width+1,70houtputstr menu1,num1,2,left+2,0fhchangemenu 2,left+1,8,0fhoutputstr menu2,num2,3,left+2,70hchangemenu 3,left+2,1,74houtputstr menu3,num3,4,left+2,70hchangemenu 4,left+2,1,74hsetpos 2,left+2endm;读取屏幕内容readscr macro left,memorylocal readsub ax,axmov si,axread:add ah,leftinc alinc simov ch,ahsetpos al,chmov ah,08hmov bh,0int 10hmov memory[si],almov memory[si+50],ahmov ax,simov bl,10div blcmp si,50jne readendm;写入屏幕writescr macro left,memorylocal readsub ax,axmov si,axread:add ah,leftinc alinc simov ch,ahsetpos al,chmov al,memory[si]mov ah,memory[si+50]mov dl,almov dh,ahoutputchar dl,dh,1mov ax,simov bl,10div blcmp si,50jne readendm;设置光标属性showcur macro showpush axpush cxmov ah,1mov cl,0mov ch,showint 10hpop cxpop axendm
       

        主程序和功能宏调用程序,我都做了注释,我当时在学习的时候,也是很多的不会,即使是现在还是有不懂得地方。我在这里只是和大家分享一下,我学习的心得体会,希望可以给大家,尤其是初学者带来些许的帮助。

        这里就不提供exe文件的下载了,因为这对初学者一点作用都没有,源代码才是最主要的:)

        

        

原创粉丝点击