




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄實(shí)訓(xùn)一 光標(biāo)漫游1問(wèn)題1邊界問(wèn)題1邊界問(wèn)題處理1實(shí)驗(yàn)基礎(chǔ)15.算法26.實(shí)驗(yàn)步驟37.要點(diǎn)38.該實(shí)驗(yàn)與大實(shí)驗(yàn)的關(guān)聯(lián)性3實(shí)訓(xùn)二 光標(biāo)漫游改進(jìn)51.掌握跳轉(zhuǎn)表的原理52.掌握跳轉(zhuǎn)表的總控程序(入口地址為標(biāo)號(hào))53.掌握跳轉(zhuǎn)表的總控程序(入口地址為子程序)6實(shí)訓(xùn)三 色彩處理及方框顯示7問(wèn)題7實(shí)驗(yàn)基礎(chǔ)7實(shí)驗(yàn)步驟84.算法85.實(shí)驗(yàn)關(guān)鍵86.直接寫(xiě)屏來(lái)顯示的原理和方法97.直接寫(xiě)屏的方框顯示算法108.參數(shù)表的標(biāo)準(zhǔn)傳遞方式11實(shí)訓(xùn)四 菜單系統(tǒng)及數(shù)據(jù)組織12問(wèn)題12菜單的邏輯結(jié)構(gòu)圖12菜單系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)13菜單數(shù)據(jù)的組織135.菜單系統(tǒng)相關(guān)操作約定146.理解菜單數(shù)據(jù)組織與算法的關(guān)系14實(shí)訓(xùn)五 菜單
2、系統(tǒng)的設(shè)計(jì)16.菜單項(xiàng)切換的設(shè)計(jì)思路162菜單系統(tǒng)的設(shè)計(jì)163. 實(shí)現(xiàn)菜單系統(tǒng)的模型及模型示例174.His數(shù)組應(yīng)用示例206.主/子菜單的顯示算法217.相關(guān)鍵(初始約定)的算法228.TurboC參考藍(lán)本中鍵的算法2324匯編語(yǔ)言課程講義實(shí)訓(xùn)一 光標(biāo)漫游問(wèn)題在25行80列的顯示屏內(nèi),通過(guò)按鍵“、”來(lái)改變光標(biāo)的位置,如按“”鍵則光標(biāo)往右側(cè)走一列,按“”鍵則光標(biāo)往上走一行的位置,最終通過(guò)“Esc”結(jié)束程序。邊界問(wèn)題要處理好特殊情況:光標(biāo)在第一行,再按“”鍵時(shí);光標(biāo)在第一列,再按“”鍵時(shí);光標(biāo)在第25行,再按“”鍵時(shí);光標(biāo)在第80列,再按“”鍵時(shí)。邊界問(wèn)題處理采用折返的方式:光標(biāo)在第1行,再按“
3、”鍵時(shí)進(jìn)到第25行;光標(biāo)在第1列,再按“”鍵時(shí)進(jìn)到第80行;光標(biāo)在第25行,再按“”鍵時(shí)進(jìn)到第1行;光標(biāo)在第80列,再按“”鍵時(shí)時(shí)進(jìn)到第1列。實(shí)驗(yàn)基礎(chǔ) 讀鍵:用int 16h的0號(hào)功能調(diào)用掌握掃描碼和字符碼的區(qū)別Mov ah,0Int 16h;返回AH=掃描碼,AL=字符碼 定位光標(biāo):用int 10h的2號(hào) 清屏:用int 10h的6號(hào)(或7號(hào))功能調(diào)用 MOV AH,6 MOV BH,04h MOV AL,0 MOV CX,0 MOV DX,184fh INT 10h相關(guān)鍵的掃描碼和字符碼EnterKey EQU 1c0dhEscKey EQU 010bhUpCursor EQU 4800h
4、LeftCursor EQU 4b00hRightCursor EQU 4d00hDownCursor EQU 5000h5.算法do 定位光標(biāo)讀鍵 if (al=特殊鍵) if (ah=左光標(biāo)鍵) 修正列值else if (ah=右光標(biāo)鍵) 修正列值else if (ah=上光標(biāo)鍵) 修正行值else if (ah=下光標(biāo)鍵) 修正行值 while (al!=Esc)6.實(shí)驗(yàn)步驟運(yùn)行“光標(biāo)漫游示例.EXE”了解需求。編一小程序獲得特殊鍵“、”“Esc、回車(chē)”等的掃描碼和Asc碼值,并記錄以備后用;寫(xiě)出光標(biāo)漫游的算法(保存,用類自然語(yǔ)言描述,用word,與同學(xué)、老師討論算法的可行性與正確性);
5、在初步正確的基礎(chǔ)上,編寫(xiě)匯編語(yǔ)言源程序;如發(fā)現(xiàn)算法問(wèn)題,用調(diào)試器調(diào)試;7.要點(diǎn)光標(biāo)如何根據(jù)所按的鍵跟隨?折返如何處理?x=(x+1) %25;8.該實(shí)驗(yàn)與大實(shí)驗(yàn)的關(guān)聯(lián)性請(qǐng)大家體會(huì)主菜單“實(shí)驗(yàn)藍(lán)本.exe”的處理過(guò)程。附件:實(shí)驗(yàn)報(bào)告內(nèi)容問(wèn)題設(shè)計(jì)要點(diǎn)及算法源程序運(yùn)行結(jié)果使用調(diào)試器狀況和經(jīng)驗(yàn)總結(jié)使用體會(huì)和總結(jié)實(shí)訓(xùn)二 光標(biāo)漫游改進(jìn)根據(jù)跳躍表法(另稱跳轉(zhuǎn)表,教材p180)來(lái)改進(jìn)光標(biāo)漫游程序。鍵:“、”、“Esc”、“Enter”、“ALT_X”(退出循環(huán))。其中對(duì)“Esc”、“Enter”鍵暫不做任何處理。1.掌握跳轉(zhuǎn)表的原理MenuJmpTbl dw Enterkey,IsEnterKey dw Es
6、cKey,IsESCKey dw UpCursor,IsUpCursor dw LeftCursor,IsLeftCursor dw RightCursor,IsRightCursor dw DownCursor,IsDownCursor上述跳轉(zhuǎn)表共項(xiàng),每項(xiàng)為:鍵值(掃描碼字符碼)、處理的入口地址2.掌握跳轉(zhuǎn)表的總控程序(入口地址為標(biāo)號(hào))ContinueReadKey: MOV BX,offset MenuJmpTbl MOV CX,6 YesNoKeyEqual: Cmp ax,ALT_X Je ExitRoam cmp ax,bx je IsKeyEqual add bx,4 loop Y
7、esNoKeyEqual jmp ContinueReadKeyIsKeyEqual: mov bx,bx+2 jmp bxIsEnterKey:.IsESCKey:ExitRoam:3.掌握跳轉(zhuǎn)表的總控程序(入口地址為子程序)ContinueReadKey: MOV BX,offset MenuJmpTbl MOV CX,6 YesNoKeyEqual: Cmp ax,ALT_X Je ExitRoam cmp ax,bx je IsKeyEqual add bx,4 loop YesNoKeyEqual jmp ContinueReadKeyIsKeyEqual: mov bx,bx+2
8、call bx jmp ContinueReadKeyIsEnterKey proc;不能用無(wú)條件轉(zhuǎn)移指令等跳出子程序 retIsEnterKey endp.IsESCKey proc.ExitRoam :實(shí)訓(xùn)三 色彩處理及方框顯示問(wèn)題在顯示屏顯示各種形狀的方框(大小不一)。等實(shí)驗(yàn)中可用1,2,3,4,9,0等來(lái)代替,如:122222223455555556455555556455555556788888889實(shí)驗(yàn)基礎(chǔ) 注意顏色查看conio.c中的函數(shù):顏色名稱值顏色名稱值BLACKDARKGRAYBLUELIGHTBLUEGREENLIGHTGREENCYANLIGHTCYANR
9、EDLIGHTREDMAGENTALIGHTMAGENTABROWNYELLOWLIGHTGRAYWHITE 了解int 10h功能調(diào)用和顯示緩沖區(qū)原理實(shí)驗(yàn)步驟編寫(xiě)小程序,用int 10h的0eh功能來(lái)顯示字符串; 寫(xiě)出顯示方框的算法(注意模塊化);在初步正確的基礎(chǔ)上,編寫(xiě)匯編語(yǔ)言源程序;如發(fā)現(xiàn)算法問(wèn)題,用調(diào)試器調(diào)試; 完成本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。4.算法ShowBox(左上角坐標(biāo),右下角坐標(biāo),方框串,顏色)/顯示第一行/for顯示中間行 /顯示最后一行ShowALineOfBox(左上角坐標(biāo),寬度,方框子串,顏色)/定位光標(biāo)/設(shè)置顏色并顯示第一字符 /for顯示中間字符 /顯示最后一字符5.實(shí)驗(yàn)關(guān)
10、鍵先實(shí)現(xiàn)ShowALineOfBox子程序,編程時(shí)考慮模塊化的概念,處理參數(shù)的傳遞方法(先采用變量或寄存器的方式來(lái)傳送)。參考下列案例: boxstr db '123' . mov ah,0eh mov bl,0fh mov bh,0 mov al,boxstr int 10h mov cx,10 mov al,boxstr+1showrepchar: int 10h loop showrepchar mov al,boxstr+2 int 10h 注意上述代碼和算法的關(guān)系。6.直接寫(xiě)屏來(lái)顯示的原理和方法對(duì)顯示緩沖區(qū)的簡(jiǎn)單介紹對(duì)字符屬性字節(jié)的簡(jiǎn)單介紹一個(gè)簡(jiǎn)單的例子直接寫(xiě)屏的案例
11、 mov di,0b800h mov es,di xor di,di;di=0,表示是行列的位置,如要顯示在(5,8)的位置,di該何值? mov si,offset boxstr mov ah,0fh lodsb stosw mov cx,10 lodsb rep stosw lodsb stosw 7.直接寫(xiě)屏的方框顯示算法ShowBox(左上角坐標(biāo),右下角坐標(biāo),方框串,顏色) /根據(jù)左上角坐標(biāo)計(jì)算顯示緩沖區(qū)地址,用子程序定義/顯示第一行/for顯示中間行 /顯示最后一行可用160的方法來(lái)處理下一行的起始位置,編程時(shí)用進(jìn)棧和退棧指令來(lái)保存和還原ShowALineOfBox(左上角坐標(biāo)的起始
12、地址,寬度,方框子串,顏色) /設(shè)置顏色并顯示第一字符 /for顯示中間字符 /顯示最后一字符8.參數(shù)表的標(biāo)準(zhǔn)傳遞方式ShowBox(左上角坐標(biāo),右下角坐標(biāo),方框串,顏色)C語(yǔ)言參數(shù)傳遞模型:把參數(shù)自右向左壓入棧;在函數(shù)執(zhí)行時(shí)用相應(yīng)的參數(shù)數(shù)據(jù)。子程序的參數(shù)入棧:示例Mov ax,顏色Push axMov ax,方框串地址Push axMov ax,右下角坐標(biāo)Push axMov ax,左下角坐標(biāo)Push axshowBox proc;子程序里代碼Mov bp,sp;bp+2左下角坐標(biāo);bp+4右下角坐標(biāo); bp+6串地址;bp+8顏色 ret 8showBox Endp實(shí)訓(xùn)四 菜單系統(tǒng)及數(shù)據(jù)組
13、織問(wèn)題在屏幕上顯示下列菜單Turbo C2.0的菜單藍(lán)本,并能通過(guò)“、”“Enter” “ESC”來(lái)操作菜單,“ALT_X”退出菜單系統(tǒng)。菜單的邏輯結(jié)構(gòu)圖Turbo C2.0系統(tǒng)的菜單邏輯結(jié)構(gòu)如下圖。菜單共有3層,子菜單最多兩層。菜單系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)菜單系統(tǒng)中的每項(xiàng)菜單由下列結(jié)構(gòu)體來(lái)表示:/菜單結(jié)構(gòu)體定義MenuStru struc SubMenuCount db ? ;子菜單的數(shù)目 SubMenuWidth db ? ;子菜單的寬度 SubMenuAddr dw ? ;子菜單數(shù)據(jù)結(jié)構(gòu)地址 MenuStrWidth db ? ;菜單項(xiàng)字符串長(zhǎng)度 MenuStrAddr dw ? ;菜單項(xiàng)的字符串
14、地址MenuStru ends其中SubMenuAddr、MenuStrAddr存放偏移地址。SubMenuAddr用來(lái)存放上述邏輯菜單結(jié)構(gòu)圖中箭頭信息。菜單數(shù)據(jù)的組織菜單數(shù)據(jù)的部分定義如下:FileRec MenuStru <09h,RunSubM-QuitStr ,FileSubM,EditStr-FileStr,FileStr>File菜單EditRec MenuStru <0h,00h, 0,RunStr-EditStr,EditStr> ;Edit菜單RunRec MenuStru <06h,GotoStr-ProgStr ,RunSubM ,CompS
15、tr-RunStr,RunStr> ;Run菜單CompileRec MenuStru <06h,GetINfoStr-PrimaryStr,CompSubM,ProjStr-CompStr,CompStr>ProjectRec MenuStru <05h,ClearStr-AutoStr,ProjSubM,OptStr-ProjStr,ProjStr>WatchRec MenuStru <07H,ClrAllStr-ToggleStr,WatSubM ,FileSubM-WatStr,WatStr>DebugRec MenuStru <06H,
16、FindFunStr-CallStkStr,DebSubM ,WatStr-DebStr,DebStr>OptionsRec MenuStru <05h,ArgumentStr-DirectStr,OptSubM ,DebStr-OptStr,OptStr>FileStr db 'File'EditStr db 'Edit'RunStr db 'Run'CompStr db 'Compile'ProjStr db 'Project'OptStr db 'Options'DebStr
17、 db 'Debug'WatStr db 'Break/Watch'FileFileSubM MenuStru <0,0,0,PickStr-LoadStr,LoadStr> MenuStru <0,0,0,NewStr-PickStr,PickStr> MenuStru <0,0,0,SaveStr-NewStr,NewStr> MenuStru <0,0,0,WriteStr-SaveStr,SaveStr> MenuStru <0,0,0,DirStr-WriteStr,WriteStr> Men
18、uStru <0,0,0,ChangeStr-DirStr,DirStr> MenuStru <0,0,0,OsStr-ChangeStr,ChangeStr> MenuStru <0,0,0,QuitStr-OsStr,OsStr> MenuStru <0,0,0,RunSubM-QuitStr,QuitStr>LoadStr db 'Load F3'PickStr db 'Pick Alt-F3'NewStr db 'New'SaveStr db 'Save F2'WriteSt
19、r db 'Write to'DirStr db 'Diretory'ChangeStr db 'Change Dir'OsStr db 'Os Shell'QuitStr db 'Quit Alx-X'.主菜單的結(jié)構(gòu)體數(shù)據(jù)FileRec、EditRec.依次存放,由于類型相同,可(應(yīng))理解成數(shù)組。學(xué)習(xí)時(shí)注意數(shù)據(jù)中的帶下劃線的紅字和藍(lán)字部分指針的信息。完整數(shù)據(jù)請(qǐng)看“匯編原稿.asm”5.菜單系統(tǒng)相關(guān)操作約定系統(tǒng)實(shí)施時(shí)先按下列約定來(lái)實(shí)施:n “Enter”確認(rèn)菜單項(xiàng)或彈出子菜單;n “ESC”返回子菜單;n “、”主
20、菜單項(xiàng)間切換;n “、”子菜單項(xiàng)間切換;完成上述功能后,再對(duì)相應(yīng)的按鍵進(jìn)行功能的擴(kuò)展。6.理解菜單數(shù)據(jù)組織與算法的關(guān)系使用“實(shí)驗(yàn)藍(lán)本.exe”及“主菜單演示.exe”。了解相關(guān)的鍵對(duì)應(yīng)的功能,掌握菜單的數(shù)據(jù)組織與算法的關(guān)系。如初始顯示為:DebugOptionsProjectCompileRunEditFile當(dāng)按“”鍵時(shí),變成:OptionsProjectCompileRunEditFileDebug再按“”鍵時(shí),變成:OptionsProjectCompileRunEditFileDebug7.遍歷主菜單數(shù)據(jù)示例 通過(guò)對(duì)下列程序?qū)W習(xí),增強(qiáng)對(duì)菜單結(jié)構(gòu)的理解:掌握結(jié)構(gòu)體變量和指針的使用;在一循
21、環(huán)中用結(jié)構(gòu)體變量或指針來(lái)訪問(wèn)相關(guān)參數(shù);TraversalMainMenu proc mov bx,offset FileRec ;獲取主菜單的開(kāi)始地址 mov cx,8 ;主菜單共8項(xiàng)Trav0: mov ah,bx.SubMenuCount ;子菜單的個(gè)數(shù) mov al,bx.SubMenuWidth ;子菜單的寬度 mov si,bx.SubMenuAddr ;子菜單數(shù)據(jù)結(jié)構(gòu)地址 mov dh,bx.MenuStrWidth ;菜單項(xiàng)字符串長(zhǎng)度 mov di,bx.MenuStrAddr ;菜單項(xiàng)的字符串地址 add bx,size MenuStru ;指向下一項(xiàng) loop Trav0 r
22、etTraversalMainMenu endp學(xué)習(xí)時(shí),注意用調(diào)試器(Turbo debugger)查看數(shù)據(jù)區(qū)(用Dump、CPU功能)的內(nèi)容跟菜單數(shù)據(jù)結(jié)構(gòu)的關(guān)系。實(shí)訓(xùn)五 菜單系統(tǒng)的設(shè)計(jì).菜單項(xiàng)切換的設(shè)計(jì)思路如何來(lái)實(shí)現(xiàn)菜單項(xiàng)的切換是本實(shí)驗(yàn)的關(guān)鍵點(diǎn)。DebugOptionsProjectCompileRunEditFilemi,MenuIndex的縮寫(xiě)假定我們用一變量mi來(lái)指向當(dāng)前選中的菜單,當(dāng)按“”鍵時(shí),我們用“未選中的顏色”來(lái)定位重寫(xiě)“File”的串,使菜單變成:mi,MenuIndex的縮寫(xiě)DebugOptionsProjectCompileRunEditFile然后是按鍵處理后,mi修正
23、為,然后用“選中的顏色”定位重寫(xiě)“Edit”,DebugOptionsProjectCompileRunEditFilemi變成上圖的效果,實(shí)現(xiàn)了菜單項(xiàng)的動(dòng)態(tài)切換。2菜單系統(tǒng)的設(shè)計(jì)整個(gè)菜單系統(tǒng)的設(shè)計(jì)需要進(jìn)一步抽象。設(shè)計(jì)時(shí)要考慮擴(kuò)展性和通用性的問(wèn)題:如菜單數(shù)據(jù)的改變,如實(shí)例中只有3層菜單,可考慮把菜單數(shù)據(jù)增加到4層、5層子菜單,同時(shí)希望所編寫(xiě)的程序代碼可不作修改,仍可實(shí)現(xiàn)相應(yīng)的菜單功能。該如何設(shè)計(jì)來(lái)達(dá)到此目標(biāo)?要實(shí)現(xiàn)上述目標(biāo),必須對(duì)處理過(guò)程進(jìn)行抽象。菜單系統(tǒng)的處理按下列步驟執(zhí)行: 顯示主菜單; 讀鍵(暫定有效鍵為“、Esc、Enter”); 處理有效鍵。 反復(fù)執(zhí)行。特別要注意整個(gè)程序中只有一處讀
24、鍵的地方。根據(jù)菜單系統(tǒng)的操作方式:先進(jìn)后出,對(duì)應(yīng)棧的模型。如當(dāng)我們進(jìn)入主菜單項(xiàng)的“Options”“Compiler”“Compiler”的子菜單,當(dāng)我們用“Esc”鍵時(shí)可以回退到“Compiler”狀態(tài),從“Compiler”還可以回退到“Options”狀態(tài)。3. 實(shí)現(xiàn)菜單系統(tǒng)的模型及模型示例考慮到實(shí)現(xiàn)的需要,需要保存一些有用的狀態(tài)信息,如相應(yīng)菜單層的選中項(xiàng)、主/子菜單數(shù)組的首地址、數(shù)組的長(zhǎng)度以及跟下拉菜單有關(guān)的備份還原。我們采取以下結(jié)構(gòu)體來(lái)保存選擇的歷史信息(C語(yǔ)言):typedef struct MenuSelectStru ShortInt MenuIndex,MenuTotal;
25、/選擇菜單中的哪項(xiàng) MenuItemStru * MenuAddr; /對(duì)應(yīng)主菜單/子菜單的數(shù)據(jù)結(jié)構(gòu)地址 PCHAR_INFO AddrOfSaveText; /備份下拉菜單區(qū)域的空間 bool PullDownMenu; /下拉菜單有否顯示 ShortInt left,top,width,height; /子菜單顯示區(qū)域;也可考慮用下列歷史結(jié)構(gòu):(把left,top,width,height內(nèi)容放入AddrOfSaveText指向的空間中)HistoryStru struc MenuIndex db 0 ;選擇菜單中的哪項(xiàng) MenuTotal db 0 ;菜單的項(xiàng)數(shù) MenuAddr dw
26、0 ;對(duì)應(yīng)主菜單/子菜單的數(shù)據(jù)結(jié)構(gòu)地址 AddrOfSaveText dw 0 ;備份下拉菜單區(qū)域的空間 PullDownMenu db 0 ;下拉菜單有否顯示Left db 0 ;子菜單顯示區(qū)域Top db 0W db 0H db 0HistoryStru ends考慮到本實(shí)驗(yàn)的最大菜單級(jí)數(shù)為三級(jí),我們可定義含個(gè)元素的數(shù)組來(lái)保存歷史的選擇信息(如果考慮級(jí)以上,則應(yīng)該把數(shù)組的元素個(gè)數(shù)適當(dāng)加大)。/選擇的歷史緩沖區(qū)CHAR_INFO SecondSave300,FirstSave300;MenuSelectStru His3=0,8, MainMenu,0,0,0,0,0, 0,0,0,Firs
27、tSave,0e,0,0,0,0, 0,0,0,SecondSave,0,0,0,0,0;有了選擇的歷史緩沖區(qū),可以提高我們的抽象級(jí)別:該層菜單的選中項(xiàng)該層菜單的總數(shù)該層菜單的首地址MenuIndexMenuTotalMenuAddr08MainMenu012Layer指向當(dāng)前菜單選擇的層次當(dāng)我們操作菜單時(shí),可以圍繞“選擇的歷史緩沖區(qū)”來(lái)管理即可,如:當(dāng)我們?cè)谥鞑藛蔚倪x擇時(shí)定位到“Options”時(shí),歷史數(shù)據(jù)為:MenuIndexMenuTotalMenuAddr58MainMenu當(dāng)拉下“Options”的子菜單進(jìn)入到“子菜單的選擇”時(shí),歷史數(shù)據(jù)為:MenuIndexMenuTotalMen
28、uAddr58FileRec05OptSubM當(dāng)在“Options”的子菜單下操作時(shí),我們改變MenuIndex的值即可,如選中“Options”子菜單下的“Linker”項(xiàng),MenuIndex應(yīng)該為1:MenuIndexMenuTotalMenuAddr58MainMenu15OptSubMHisLayer. MenuAddr:表示主(或子)菜單數(shù)組的首地址對(duì)應(yīng)MainMenux. SubMenuAddr變成HisLayer. MenuAddrHisLayer. MenuIndex. SubMenuAddr此時(shí)Layer=0;如何得到子菜單的起始顯示列值?答:MainMenuColHis0.
29、 MenuIndex4.His數(shù)組應(yīng)用示例把上一章中的對(duì)主菜單數(shù)組的訪問(wèn),改成通過(guò)his0數(shù)組中保存的信息來(lái)遍歷主菜單數(shù)組:TraversalMainMenu proc mov bx,offset His ;獲取菜單選擇歷史的開(kāi)始地址 mov ah,Layer ;獲取菜單選擇的層號(hào),想當(dāng)于棧頂指針 mov al,size HistoryStru ;獲取結(jié)構(gòu)體的空間大小 mul ah ;算出Layer個(gè)HistoryStru的空間大小 add bx,ax ;bx為hisLayer元素的首地址 mov si,bx.MenuAddr ;bx.MenuAddr為菜單數(shù)組的首地址 mov cl,bx.M
30、enuTotal ;bx.MenuAddr指向的菜單數(shù)組的長(zhǎng)度 xor ch,chTrav0: mov ah,si.SubMenuCount ;子菜單的個(gè)數(shù) mov al,si.SubMenuWidth ;子菜單的寬度 mov bp,si.SubMenuAddr ;子菜單數(shù)據(jù)結(jié)構(gòu)地址 mov dh,si.MenuStrWidth ;菜單項(xiàng)字符串長(zhǎng)度 mov di,si.MenuStrAddr ;菜單項(xiàng)的字符串地址 add si,size MenuStru ;指向下一項(xiàng) loop Trav0 retTraversalMainMenu endp 通過(guò)該案例,掌握訪問(wèn)和匯編的編程,在頭腦中應(yīng)該有這樣
31、的關(guān)系圖:His數(shù)組字段SubMenuCount子菜單的數(shù)目SubMenuWidth子菜單的寬度SubMenuAddr子菜單地址MenuStrWidth菜單串長(zhǎng)度MenuStrAddr菜單串地址MenuIndexMenuTotalMenuAddr08FileRecLayer BX DIFileRec數(shù)組共8個(gè)元素:01234567SI5.主菜單的顯示算法結(jié)合的示例,根據(jù)下列算法來(lái)實(shí)現(xiàn)主菜單的顯示:菜單處理過(guò)程都基于His數(shù)組來(lái)實(shí)現(xiàn),其中用Layer變量來(lái)管理His數(shù)組。編程中約定:bx=HisLayer 首地址 si=HisLayer . MenuAddrAH=選中的顏色循環(huán): 計(jì)算菜單項(xiàng)顯示的地址 顯示菜單項(xiàng)(用填緩沖區(qū)方法實(shí)施) AH=未選中的顏色 si指向下一項(xiàng)Loop 類似C語(yǔ)言:訪問(wèn)HisLayer. MenuAddri結(jié)構(gòu)體變量,查看案例“主菜單.asm”6.主/子菜單的顯示算法主
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)數(shù)學(xué)趣味數(shù)學(xué)題庫(kù)與解法指導(dǎo)
- 單身公寓兩室廳房屋租賃合同
- 學(xué)姐分享經(jīng)驗(yàn)發(fā)言稿
- 廢棄玻璃制品粉碎技術(shù)
- 公司概況資料表格
- 歷史初中《春秋戰(zhàn)國(guó)時(shí)期歷史事件教學(xué)教案》
- 關(guān)于假期調(diào)整的公告與申請(qǐng)流程說(shuō)明
- 國(guó)際法與國(guó)際商務(wù)法律實(shí)踐知識(shí)卷
- bim輔助幕墻施工方案
- 代理招聘合作協(xié)議書(shū)
- 《反家庭暴力》課件
- 二零二五年度房地產(chǎn)預(yù)售合同協(xié)議4篇
- 建(構(gòu))筑物消防員初級(jí)技能培訓(xùn)課件
- 2025-2030年中國(guó)天線行業(yè)市場(chǎng)需求狀況規(guī)劃研究報(bào)告
- 2024年南京旅游職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 如何提升自我管理能力
- 2025年潛江市城市建設(shè)發(fā)展集團(tuán)招聘工作人員【52人】高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(新)九年級(jí)下冊(cè)化學(xué)全冊(cè)教案教學(xué)設(shè)計(jì)及教學(xué)反思
- DB50T 441-2012 渝菜 毛血旺烹飪技術(shù)規(guī)范
- 2024年05月富德生命人壽保險(xiǎn)股份有限公司招考筆試歷年參考題庫(kù)附帶答案詳解
- 醫(yī)防融合培訓(xùn)
評(píng)論
0/150
提交評(píng)論