第四講匯編語言第五部分_第1頁
第四講匯編語言第五部分_第2頁
第四講匯編語言第五部分_第3頁
第四講匯編語言第五部分_第4頁
第四講匯編語言第五部分_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、計算機(jī)原理與應(yīng)用第4講匯編語言北京理工大學(xué)信息與電子學(xué)院匯編程序設(shè)計提綱Ø 順序結(jié)構(gòu)程序設(shè)計Ø 分支結(jié)構(gòu)程序設(shè)計Ø 循環(huán)結(jié)構(gòu)程序設(shè)計匯編程序設(shè)計步驟1.分析題意,確定算法。首先分析理解題意,找出合理的算法及適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),這是決定程序質(zhì)量高低的關(guān)鍵。2.根據(jù)算法畫出程序流程圖,可以從粗到細(xì)把算法逐步的具體化。3.根據(jù)框圖編寫程序。4.上機(jī)調(diào)試程序。匯編程序的基本結(jié)構(gòu)順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)子程序結(jié)構(gòu)復(fù)合結(jié)構(gòu):多種程序結(jié)構(gòu)的組合順序結(jié)構(gòu)程序設(shè)計安排指令的先后次序很重要。編程時,要順序合理,避免不必要的重復(fù)操作。例1:已知某班學(xué)生的英語成績按學(xué)號(從1開始)從小到大的

2、順序排列在TAB表中,要查的學(xué)生的學(xué)號放在變量NO中,查表結(jié)果放在變量ENGLISH中。DATATAB NOSEGMENTDB80,85,86,71,79,96,83,56,32,66,78,84DBDB10ENGLISH?DATACODEENDSSEGMENTASSUME DS:DATA,CS:CODEBEGIN:MOV,AXAX,DATAMOVLEA MOVDSBX,TABAL,NOXLAT TABMOVMOV INTCODEENDENGLISH,ALAH,4CH 21H ENDSBEGIN分支結(jié)構(gòu)程序設(shè)計?case 1 case 2case ncase 1case 2case nCASE

3、 結(jié)構(gòu)IF-THEN-ELSE 結(jié)構(gòu)法è利用邏輯尺實(shí)現(xiàn)二分支;1. 邏輯尺2. 地址跳躍表法è利用跳躍表實(shí)現(xiàn)多分支;法è利用條件轉(zhuǎn)移指令實(shí)現(xiàn)二分支或多分支;3. 條件直接標(biāo)志轉(zhuǎn)移指令l在指令助記符中直接給出標(biāo)志狀態(tài)的測試條件:以CF,ZF,SF,OF和PF等5個標(biāo)志的10種狀態(tài)為的條件。間接標(biāo)志轉(zhuǎn)移指令CMP指令格式:CMP 目標(biāo)操作數(shù),源操作數(shù)功能:模擬目標(biāo)減源的減法操作,影響標(biāo)志寄存器,不改變目標(biāo)操作數(shù)。TEST指令格式:TEST 目標(biāo)操作數(shù),源操作數(shù)功能:模擬目標(biāo)與源的與操作,影響標(biāo)志寄存器,不改變目標(biāo)操作數(shù)。注意:p 使用CMP與SUB,TEST與AND能

4、夠進(jìn)行相同的轉(zhuǎn)移,但CMP和TEST均不改變被的操作數(shù),而SUB與AND則會改變目標(biāo)操作數(shù);p 負(fù)數(shù)以補(bǔ)碼形式存放,當(dāng)做為無符號數(shù)進(jìn)行比較式做為無符號數(shù)進(jìn)行的,因此-1高于3。以其對應(yīng)的補(bǔ)碼形(1) MOV AL,-1 MOV BL,3 SUB AL,BL JL L1(2) MOV AL,-1 MOV BL,3 CMP AL,BL JBE L1;-4送AL;由于-1小于3,即AL小于BL所以轉(zhuǎn)移到L1執(zhí)行;AL不變,僅僅影響標(biāo)志位;由于-1作為無符號數(shù)是0FFH高于3,即AL高于BL所以順序執(zhí)行,不轉(zhuǎn)移(應(yīng)用:JLE)(3) MOV AL,80HMOV BL,80H AND BL,AL JNZ

5、 L1(4) MOV AL,80H MOV BL,80H TEST BL,AL JNZ L1;0送BL;因為結(jié)果為ZF=1所以順序執(zhí)行,不轉(zhuǎn)移(與JNE等價);不改變BL,但模擬運(yùn)算結(jié)果為0,置ZF為1;因為結(jié)果為0所以順序執(zhí)行,不轉(zhuǎn)移邏輯尺例:有數(shù)組x(x1,x2,x10) 和y(y1,y2,y10),編程計算z(z1,z2,z10)z1 z2 z3 z4 z5 z6 z7 z8z9=x1 x2 x3 x4 x5 x6 x7 x8 x9x10+-+-+y1 y2 y3 y4 y5 y6 y7 y8 y9y10邏輯尺:001101011100減法加法z10=x y zlogic_ruledw

6、dw dwdwx1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z1,z2,z3,z4,z5,z6,z7,z8,z9,z1000dch mov mov mov mov shr jc addjmpbx,cx,dx,ax,dx,010logic_rule xbx1next:subtractax, ybx; 向前shortresultsubtract:subax, ybxzbx, ax bx, 2 nextresult:mov add loop地址跳躍表例:根據(jù)AL寄存器中哪一位為1(從低位到),把程序轉(zhuǎn)移到8個不同的程序分支

7、branch_tabledw dw dw dw dw dw dwdwroutine1 routine2 routine3 routine4 routine5 routine6 routine7routine8 cmp je lea shr jncjmp(寄存器間接尋址)al, 0continuebx, branch_table al, 1add1word ptrbx;邏輯右移;L:間接轉(zhuǎn)移;add1: addjmp continue:routine1:routine2:bx,Ltypebranch_table cmp je mov shr jnbjmp(變址尋址)al, 0 continue

8、si, 0al, 1 add1branch_tablesi;邏輯右移;jnb=jncL:間接轉(zhuǎn)移;add1:add jmpcontinue:routine1:routine2:si,Ltypebranch_table cmp je lea mov movshljnb jmp(基址變址尋址)al, 0continuebx,si,cx,al,branch_table7 * type branch_table 81;邏輯左移L:sub1word ptr;jnb=jnc間接轉(zhuǎn)移bxsibranch_table;sub1: subloopcontinue:routine1:routine2:si,Lty

9、pe條件例:折半查找算法條件例:折半查找算法(1) 初始化首尾下標(biāo),low=1,high=n;(2) 若low>high,則查找失敗,置CF=1,否則,計算重點(diǎn):mid=(low+high)/2;(3) k與重點(diǎn)元素rmid比較。;若k= rmid,則查找,;若k< rmid,則轉(zhuǎn)步驟(4);若k> rmid,則轉(zhuǎn)步驟(5);(4) 低半部分查找:high=mid-1,返回步驟(2),繼續(xù)比較;(5) 高半部分查找:low=mid+1,返回步驟(2),繼續(xù)比較;條件例:折半查找算法datasegmentarraydw12,11,22,33,44,55,66,77,88,99,

10、111,222,333numberdw55low_idxdw?high_idxendsdw?datalea movdi,ax,arraynumber(ax)與第一個元素比較cmp ja lea je stc jmpchk_last:mov shl add cmp jb je stcjmpax,di+2;chk_last si, di+2exitsi存放位置(ax)第一個元素,找到cf=1 查找失敗(ax)<第一個元素,未找到;exitsi,si,si,ax,di 1disi;字節(jié)數(shù)數(shù)目2; (ax)與最后一個元素比較searchexit; (ax)最后一個元素,找到; (ax)>最

11、后一個元素,未找到exitsearch:mov low_idx, 1mov bx, dimov high_idx, bx mov bx, dimid:mov cx, low_idx mov dx, high_idx cmp cx, dxjano_match add cx, dx shr cx, 1 mov si, cx shl si, 1compare:cmp ax, bx+sijeexitjahigherdec cxmov high_idx, cxjmp midhigher:inc cxmov low_idx, cxjmp midno_match: stcexit:low_idxhigh_i

12、dx0123456789101112114512555(ax)=55(si)=0ahCf=0vwxulow_idxhigh_idx177891212888(ax)=90(si)=10hCf=112112233445566778899111222333循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)程序就是某段指令序列在執(zhí)行時多次反復(fù)執(zhí)行的程序。N條件Y N 條件YWHILE -DO結(jié)構(gòu)DO-UNTIL 結(jié)構(gòu)循環(huán)體循環(huán)體初始化初始化循環(huán)結(jié)構(gòu)程序設(shè)計設(shè)計循環(huán)結(jié)構(gòu)的基本操作:1. 初始化è設(shè)置循環(huán)的初始狀態(tài)2. 循環(huán)體è循環(huán)的工作部分及修改部分條件è計數(shù);3.、特征值、地址邊界循環(huán)結(jié)構(gòu)程序設(shè)計常用

13、指令1.2.LOOP,LOOPZ/LOOPE,LOOPNZ/LOOPNE;各種跳轉(zhuǎn)指令;指令格式循環(huán)條件功能描述LOOPOPR(CX/ECX)0若條件滿足,則轉(zhuǎn)向標(biāo)號所指向的指令;否則:終止循環(huán);LOOPZ /LOOPEOPR(ZF=1)且(CX/ECX)0LOOPNZ /LOOPNE OPR(ZF=0)且(CX/ECX)0LOOP指令Ø 格式:loop標(biāo)號Ø CPU執(zhí)行l(wèi)oop指令的時候,進(jìn)行兩步操作:(cx)=(cx)-1;cx中的值,不為零則轉(zhuǎn)至標(biāo)號處執(zhí)行程序,如果為零則向下執(zhí)行。LOOP指令Ø 任務(wù)1:編程計算22,結(jié)果存放在ax中。Ø 分析:設(shè)

14、(ax)=2,可計算:(ax)= (ax)*2,最后(ax)中為22的值。N*2可用N+N實(shí)現(xiàn)。任務(wù)1:編程計算22,結(jié)果存放在ax中。程序代碼:assumecs:codecodesegmentmovaddax,2ax,axmovintax,4c00h21hcodeendendsLOOP指令Ø 任務(wù)2:編程計算23。分析:23=2*2*2,若設(shè)(ax)=2,可計算: (ax)= (ax)*2*2,最后(ax)中為23的值。N*2可用N+N實(shí)現(xiàn)。任務(wù)2:編程計算23。程序代碼:assume cs:codecode segment mov ax,2 add ax,ax add ax,ax

15、mov ax,4c00hint 21h code ends endLOOP指令Ø 任務(wù)3:編程計算212。分析:212=2*2*2*2*2*2*2*2*2*2*2*2,若設(shè)(ax)=2,可計算:(ax)=(ax)*2*2*2*2*2*2*2*2*2*2*2,最后(ax)中為212的值。N*2可用N+N 現(xiàn)。實(shí)任務(wù)3:編程計算212。程序代碼:assume cs:codecode segmentmov ax,2;做11次add ax,ax mov ax,4c00hint 21h code endsend按照我們的算法,計算212需要11條重復(fù)的指令add ax, ax。我們顯然不希望這

16、樣來寫程序,這里,可用loop來簡化我們的程序 程序分析:(1)標(biāo)號編程計算212。程序代碼:assume cs:codecode segment mov ax,2 mov cx,11在匯編語言中,標(biāo)號代表一個地址,此有一個標(biāo)號s 。它實(shí)際上標(biāo)識了一個地址,這個地址處有一條指令:add ax,ax。s:add ax,ax loop s(2)loop sCPU 執(zhí)行l(wèi)oop s的時候,要進(jìn)行兩步操作: (cx)=(cx)-1;mov ax,4c00h int 21hcode endsendcx 中的值,不為0 則轉(zhuǎn)至標(biāo)號s 所標(biāo)識的地址處執(zhí)行(這里的指令是“add ax,ax),如果為零則執(zhí)行下

17、一條指令(下一條指令是mov ax,4c00h)。編程計算212。程序代碼:assume cs:codecode segment mov ax,2 mov cx,11 程序分析(續(xù)):(3)以下三條指令mov cx,11s: ddd ax,ax loop s執(zhí)行l(wèi)oop s時,首先要將(cx)減1,然后若(cx)不為0,則向前轉(zhuǎn)至s處執(zhí)行add ax,ax。所以,我們可以利用cxs:add ax,ax loop smov ax,4c00h int 21hcode endsend來add ax,ax的執(zhí)行次數(shù)。LOOP指令Ø 用cx和loop三個要點(diǎn):(1)在cx中存放循環(huán)次數(shù);指令相

18、配合實(shí)現(xiàn)循環(huán)功能的(2)loop指令中的標(biāo)號所標(biāo)識地址要在前面;(3)要循環(huán)執(zhí)行的程序段,要寫在標(biāo)號和loop指令的中間。循環(huán)體不能超過256字節(jié)è把BX中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上基本思想如下圖所示,程序流程圖常見;BX=A6CE循環(huán)左移4位顯示BH高4位循環(huán)左移4位顯示BH低4位循環(huán)左移4位顯示BL高4位循環(huán)左移4位顯示BL低4位10100110110011101110101001101100110011101010011001101100111010101010011011001110用條件跳轉(zhuǎn)實(shí)現(xiàn)循環(huán):movmov rol mov and add cmp jl a

19、dd mov mov int decjnzch, 4cl,bx,al,al,al,al,;設(shè)置循環(huán)次數(shù); BX循環(huán)左移4位,把高4位移至低4位rotate:4cl bl;取出BL給AL;保留AL低4位;把AL中的數(shù)轉(zhuǎn)換成對應(yīng)的ASCII碼;09 ASCII 30H39H;程序二分支;AF ASCII41H46H,10與A的ASCII差07H; 屏顯0fh30h3ahprintital,dl,ah, 21h ch07hal2printit:;若沒處理完,繼續(xù)循環(huán)處理rotate用LOOP指令實(shí)現(xiàn)循環(huán):movpush mov rol mov and add cmp jl add mov mov i

20、nt;decpop Loopcx,cx cl,bx,al,al,al,al,4;設(shè)置LOOP循環(huán)次數(shù)rotate:4cl bl 0fh 30h3ah; BX循環(huán)左移4位,把高4位移至低4位;取出BL給AL;保留AL低4位;把AL中的數(shù)轉(zhuǎn)換成對應(yīng)的ASCII碼;09 ASCII 30H39Hprintital,dl,ah, 21hchcx07hal2;AF ASCII 41H46H,10與A的ASCII差07H; 屏顯printit:;若沒處理完,繼續(xù)循環(huán)處理rotate例:將正數(shù)nx array_head array_end n一個已排序的正數(shù)字?jǐn)?shù)組dw dw dw dw?3,5,15,23,

21、37,49,52,65,78,9910532x ®array_head®array_end®n ®movax, nmovarray_head-2, 0ffffhmovsi, 0compare:cmparray_endsi , ax jleinsertmovbx, array_endsi movarray_endsi+2 , bx subsi, 2jmpshort compareinsert:movarray_endsi+2 , ax-135152337495265789910532例:將首地址為a 的字?jǐn)?shù)組從大到小排序(冒泡排序算法,多重循環(huán))uvwxy

22、z|256189100997866453015-11001892569976431-100991892567866453015-1100997818925666453015-1100997866189256453015-1100997866451892563015-1100997830664518925615-1100789930156645189256-110030789915-adw100,30,78,99,15,-1,66,45,189,256 mov dec movmovcx, cx di,bx,10loop1:cx0loop2:mov cmp jge xchgmovax,ax,abx

23、abx+2continue ax, abx+2abx, axcontinue:add loop mov loopbx, 2 loop2 cx, diloop1DATABUFSEGMENT;冒泡法完整程序loop2.asmDW3,-4,6,7,9,2,0,-8,-9,-10,20N=($-BUF)/2ENDSDATACODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVMOV MOV DEC MOVMOVAX,DATADS,AX CX,N CX DX,CXBX,0LOOP1:LOOP2:MOVCMP JGE XCHG MOV ADD DEC JNE MOV LOOP

24、MOV INT ENDSENDAX,BUFBXAX,BUFBX+2 L AX,BUFBX+2 BUFBX,AX BX,2CX LOOP2 CX,DX LOOP1 AH,4CH21HL:CODESTARTØ 程序運(yùn)行后,BUF區(qū)中的內(nèi)容如下:0000 14 00 09 00 07 00 06 00-03 00 02 00 00 00 FC FF0010 F8 FF F7 FF F6 FF 00 00-00 00 00 00 00 00 00 00Ø 20,9,7,6,3,2,0,-4,-8,-9,-10Ø 若要對N個無符號數(shù)按由大到小的順序排列,只需將指令“JGEL

25、”改為“JAEL”即可。子程序結(jié)構(gòu)及設(shè)計完整段定義偽指令(4)PROC/ENDP 定義過程偽指令格式:<過程名> PROC<過程名> ENDP功能:定義過程的起始和結(jié)束。PROC和ENDP必須成對出現(xiàn)。關(guān)于堆棧段定義方法1:Stack1DB TOPStack1SEGMENT256 DUP(?);256是堆棧的長度,可改變LABEL ENDSWORD單元說明語句之后,再說明一個棧頂別名,對SP在堆棧的賦值就很方便。方法2:STACK1DB STACK1SEGMENT 256 DUP(?) ENDSSTACK ;定義一個堆棧段系統(tǒng)會自動把段寄存器SS和棧頂寄存器SP與該堆棧

26、段之間建立相應(yīng)的關(guān)系,并設(shè)置其初值。提綱Ø 子程序的說明Ø 子程序的調(diào)用和返回Ø 寄存器的保護(hù)和恢復(fù)Ø 子程序的參數(shù)傳送Ø 嵌套與遞歸子程序Ø程序的不同部分,常用到類似的程序段,它們的功能和結(jié)構(gòu)都相同,只是某些變量的賦值不同,可把 這些程序段寫成子程序。Ø某些常用的特定功能的程序段,也可編制成子程序,供不同用戶使用。子程序的說明過程名 PROCRET過程名 ENDPNEAR ( FAR )(1)NEAR屬性:調(diào)用子程序在同一代碼段中(調(diào)用)(2)FAR屬性:調(diào)用子程序不在同一代碼段中(調(diào)用)codesegmentmainpr

27、occall ret endpfarsubr1mainsubr1procretendpnearsubr1codeends調(diào)用調(diào)用segxsubtsubtsegx segysegysegmentproc far ret endpcall subtendssegmentcall subtends子程序的調(diào)用和返回子程序調(diào)用:隱含使用堆棧保存返回地址callnear ptrsubp(1) 保存返回地址(2) 轉(zhuǎn)子程序(SP)callfarptrsubp(1) 保存返回地址(2) 轉(zhuǎn)子程序(SP)(IP)(CS)(IP)子程序的調(diào)用和返回RET/RETN/RETF ImmØ近返回:RET指令

28、將SP所指向的棧頂字(斷點(diǎn)的位移量)彈出送至指令指示器IP中,并將SP加2遠(yuǎn)返回:RET指令先彈出棧頂之值送到IP中,再彈出棧頂之值送到CS中,并再將SP加4如果返回指令后面帶有立即數(shù)表示在得到返回地址之后,SP還要增加的偏移量。ØØRETRETN RETF;可能是近返回,也可能是遠(yuǎn)返回;近返回指令;遠(yuǎn)返回指令RET6;子過程返回后,(SP)(SP)+6寄存器的保護(hù)和恢復(fù)寄存器對于所有的程序都是公用的。subtproc push push push push pop pop poppopfar ax bx cxdx注意:p寄存器入棧和出棧的順序相反。p用PUSHF和POPF

29、保護(hù)和恢復(fù)標(biāo)志寄存器。dx cx bxaxretsubtendp子程序的參數(shù)傳送1. 通過寄存器傳送參數(shù)2. 通過器傳送參數(shù)3. 通過地址表傳送參數(shù)地址4. 通過堆棧傳送參數(shù)或參數(shù)地址例:十進(jìn)制到十六進(jìn)制的轉(zhuǎn)換(通過寄存器傳送參數(shù))10®16decihexsegment;assume proc push sub push call call call call jmp retendpcs: far ds ax,axdecihexmainax10®2回車換行2®16repeat:decibin crlf binihex crlfrepeat;maindecihex三

30、個子程序;endsendmainbinihexproc mov mov rol mov and add cmp jl add mov mov int dec jnz retendpnearch,cl,bx,al,al,al,al,44cl bl 0fh 30h3ahdecibinproc mov mov int sub jl cmp jg cbw xchg mov mul xchg add jmp retendpnear bx,ah,21hrotate:0newchar:1al,exit30hal, 9exitprintital,dl,ah, 21h ch7al 2printit:ax,cx,

31、 cx ax,bx,bx10bxaxrotatenewcharbinihexexit:decibincrlfproc mov mov int mov mov int retendpnear dl,ah, 21h dl,ah,21h0dh20ah2crlf例:累加數(shù)組中的元素(通過器傳送參數(shù))datasegment ary count sumendsdwdwdw1,2,3,4,5,6,7,8,9,1010?datacodemainsegment proc assume push sub push mov mov callretfarcs:code,ds:data dsax, ax ax,ds,a

32、xdataaxproaddmaincodeendp;proadd子程序endsendmainproadd proc nearpush axpush cxpush sileasi, arymovcx, countxorax, ax next:addax, siaddsi, 2loop nextmovsum,axpopsipopcxpopax retproadd endp如果數(shù)據(jù)段定義如下:datasegmentarycountsumdwdwdw1,2,3,4,5,6,7,8,9,1010?ary1 count1sum1dw dwdw10,20,30,40,50,60,70,80,90,10010

33、?dataends如果直接內(nèi)存變量,那么累加數(shù)組ary和數(shù)組ary1中的元素不能用同一個子程序 proadd。例:累加數(shù)組中的元素(通過地址表傳送參數(shù)地址)datasegment ary count sum table ends segment proc assume push sub push mov movmov mov mov mov call retendpdw dw dwdw1,2,3,4,5,6,7,8,9,1010?; 地址表3dup (?)data codemainfarcs:code,dsds:dataax, ax ax,ds,axdataaxtable, table+2,

34、table+4, bx,proaddoffset offset offsetoffsetary countsum; 建立地址表table ; 地址表的地址->bxmainary®0000count®001400160018sum®table®®(bx)1d2d3d4d5d6d7d8d9d10d10d55d000000140016proadd proc nearpush axpush cxpush sipush dimovsi, bx movdi, bx+2 movcx, di movdi, bx+4 xorax, axnext:addax

35、, siaddsi, 2loop nextmovdi,axpopdipopsipopcxpopax retproadd endp codeendsendmain通過堆棧傳送參數(shù)或參數(shù)地址:stack segmentstackDS®ESdw100dup (?)tos label wordSS®stack endsCS®stack segmentdw100dup (?)tos label wordstack endsDSstart:ES®movax, stackSS®movss, axmovsp, offset tospushdsCS®s

36、ubax, axpushax例:累加數(shù)組中的元素(通過堆棧傳送參數(shù)地址)datasegment ary count sumendsdw dwdw1,2,3,4,5,6,7,8,9,1010?datastacksegmentdwtos100labeldup (?)wordstackendscode1mainsegment proc assumefarcs:code1, ds:data,ss:stackstart:mov mov movax,ss,sp,stack ax offsettosmov mov mov push mov push mov pushax,ds,bx, bx bx, bx b

37、x, bxdataaxoffsetary4ch 中斷出現(xiàn)前的程序(sp)®offsetcountoffsetsumcallfarptrproaddcode1endsretmain endppushdssubax, axpushax(ip)(cs)0016001400000(ds)(sp)®(bp)®®(bp)+6®(bp)+8®(bp)+0ah®(di)(si)(cx)(ax)(bp)(ip)(cs)0016001400000(ds)xorax, ax next:addax, siaddsi, 2loop nextmovdi

38、,axpopdipopsipopcxpopaxpopbpret6 proadd endpcode2segmentassume cs:code2proaddproc farpush bpmovbp, sppush axpush cxpush sipush dimovsi,bp+0ah movdi,bp+8movcx,dimovdi,bp+6code2endsend start結(jié)構(gòu)偽操作STRUC:定義一種可包含不同類型數(shù)據(jù)的結(jié)構(gòu)模式格式:結(jié)構(gòu)名STRUC字段名1 字段名2 字段名3ENDSDBDW DD?結(jié)構(gòu)名例:學(xué)生個人信息STUDENT_DATANAME ID AGE DEPSTUDENT_

39、DATASTRUC DB DW DB DBENDS50? 10DUP(?)DUP(?)例:累加數(shù)組中的元素(通過堆棧傳送參數(shù)地址)code2segmentassumecs:code2proaddprocendpfarproaddcode2endsendstartstack_strcstrucsave_bpdw? save_cs_ipdw2 dup(?) par3_addrdw?par2_addrdw?par1_addrdw?stack_strcends(sp)®(bp)®par3_addr par2_addrpar1_addr(di)(si)(cx)(ax)(bp)(ip)(cs)0016001400000(ds)proadd proc farpush bpmovbp, sppush axpush cxpush sipush dimov si, bp.par1_addr mov di, bp.par2_addr mov cx, dimov di, bp.par3_addr xor ax, axnext:addax, siaddsi, 2loop

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論