日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言-017(SCASW 、STRUCT 、STRUCT_ALLPOINTS 、STRUCT_ALIGN 、SYSTEMTIME、UNION 、 STRUCTTEST )

發(fā)布時(shí)間:2023/12/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言-017(SCASW 、STRUCT 、STRUCT_ALLPOINTS 、STRUCT_ALIGN 、SYSTEMTIME、UNION 、 STRUCTTEST ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1:SCASW : 在wordArray中掃描16位數(shù)值0100h,將匹配元素的偏移量復(fù)制到EAX

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data wordArray WORD 0500h,0400h,0300h,0200h,0100h.code main PROCmov ax,0100hmov edi,OFFSET wordArraymov ecx,LENGTHOF wordArraycld repne scaswjne L1sub edi,TYPE wordArraymov eax,edijmp quit L1:mov eax,0 quit:INVOKE ExitProcess,0 main ENDP END main

2: STRUCT : 偽指令STRUCT 結(jié)構(gòu)的使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data ;定義結(jié)構(gòu) COORD STRUCTX WORD ?Y WORD ? COORD ENDS Employee STRUCTIdNum BYTE "000000000" ;9字節(jié)LastName BYTE 30 DUP(0) ;30字節(jié)ALIGN WORD ;1個(gè)字節(jié)Years WORD 0 ;2ALIGN DWORD ;2個(gè)字節(jié)SalaryHistory DWORD 0,0,0,0 ;16字節(jié) Employee ENDS ;60point1 COORD <5,10> ;x=5,y=10 point2 COORD <20> ;x=20,y=? point3 COORD <> ;x=?,y=? worker Employee<> ;默認(rèn)初始值 person1 Employee<"555223333"> ;IdNum初始值,其他默認(rèn) person2 Employee <,,,2 DUP(20000)> ;只初始化SalaryHistory前兩個(gè)值,剩下兩個(gè)0;對(duì)齊結(jié)構(gòu)變量 ALIGN DWORD ;要與結(jié)構(gòu)中最大結(jié)構(gòu)成員對(duì)齊 person Employee <>;結(jié)構(gòu)數(shù)組 AllPoints COORD 3 DUP(<0,0>) ;3個(gè)結(jié)構(gòu)的X,Y都為0department Employee 5 DUP(<>).code main PROCmov eax,TYPE Employee ;60mov eax,SIZEOF Employee;60mov eax,SIZEOF worker ;60;引用成員mov dx,worker.Yearsmov worker.SalaryHistory,20000 ;第一個(gè)工資mov [worker.SalaryHistory+4],3000;第二個(gè)工資mov worker.SalaryHistory+4,4000;第二個(gè)工資mov edx,OFFSET worker.SalaryHistory ;得到字段的地址;間接尋址操作數(shù)mov esi,OFFSET workermov ax,(Employee PTR[esi]).Years;變址操作數(shù)可以訪(fǎng)問(wèn)結(jié)構(gòu)數(shù)組mov esi,TYPE Employee ;索引 = 1mov department[esi].Years ,4INVOKE ExitProcess,0 main ENDP END main

3:STRUCT_ALLPOINTS : 變址尋址操作數(shù)遍歷結(jié)構(gòu)數(shù)組

include Irvine32.incNumPoints = 3 .data ALIGN WORD AllPoints COORD NumPoints DUP(<0,0>).code main PROCmov edi,0 ;數(shù)組索引mov ecx,NumPointsmov ax,1 ;起始X,Y的值 L1:mov (COORD PTR AllPoints[edi]).X,axmov AllPoints[edi].Y,axadd edi,TYPE COORDinc axloop L1exit main ENDP END main

4:STRUCT_ALIGN : 比較結(jié)構(gòu)內(nèi)有對(duì)齊處理與無(wú)對(duì)齊處理的訪(fǎng)問(wèn)時(shí)間,照道理是有對(duì)齊的快,但這里反而是無(wú)對(duì)齊快

include Irvine32.incEmployeeBad STRUCTIdNum BYTE "000000000"LastName BYTE 30 DUP(0)Years WORD 0SalaryHistory DWORD 0,0,0,0 EmployeeBad ENDSEmployee STRUCTIdNum BYTE "000000000"LastName BYTE 30 DUP(0)ALIGN WORDYears WORD 0ALIGN DWORDSalaryHistory DWORD 0,0,0,0 Employee ENDS.data ALIGN DWORD startTime DWORD ? emp Employee <> ;或:EmployeeBad .code main PROCcall GetMSecondsmov startTime,eaxmov ecx,0FFFFFFFFh L1:mov emp.Years,5mov emp.SalaryHistory,35000loop L1call GetMSecondssub eax,startTimecall WriteDecexit main ENDP END main

5: SYSTEMTIME : 使用結(jié)構(gòu)獲取系統(tǒng)時(shí)間函數(shù)

include Irvine32.incCOMMENT % COORD STRUCTX WORD ?Y WORD ? COORD ENDS SYSTEMTIME STRUCTwYear WORD ?wMonth WORD ?wDayOfWeek WORD ?wDay WORD ?wHour WORD ?wMinute WORD ?wSecond WORD ?wMilliseconds WORD ? SYSTEMTIME ENDS %.data sysTime SYSTEMTIME <>.code main PROCINVOKE GetLocalTime ,ADDR sysTimemovzx eax,sysTime.wYearcall WriteDecexit main ENDP END main

6:結(jié)構(gòu)內(nèi)包括結(jié)構(gòu)的使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORDCOORD STRUCTX WORD ?Y WORD ? COORD ENDS Rectangle STRUCTUpperLeft COORD <>LowerRight COORD <> Rectangle ENDS .data rect1 Rectangle <> rect2 Rectangle {} rect3 Rectangle {{10,10},{50,20}} rect4 Rectangle <<10,10>,<50,20>>.code main PROCmov rect1.UpperLeft.X , 10mov esi,OFFSET rect1mov (Rectangle PTR [esi]).UpperLeft.Y,10mov edi,OFFSET rect2.LowerRightmov (COORD PTR [edi]).X,50mov edi,OFFSET rect2.LowerRight.Xmov WORD PTR[edi],50INVOKE ExitProcess,0 main ENDP END main

7:STRUCT_WALK :結(jié)構(gòu)應(yīng)用例子,醉漢行走,利用隨機(jī)數(shù),選擇每一步行走方向

;醉漢行走,教授的起點(diǎn)坐標(biāo)為2525,并在周?chē)腔瞚nclude Irvine32.inc WalkMax = 50 StartX = 25 StartY = 25DrunkardWalk STRUCTpath COORD WalkMax DUP (<0,0>)pathsUsed WORD 0 DrunkardWalk ENDSDisplayPosition PROTO currX:WORD,currY:WORD.data aWalk DrunkardWalk <>.code main PROCmov esi,OFFSET aWalkcall TakeDrunkenWalkexit main ENDP;向隨機(jī)方向行走(北,南,東,西) ;接收:ESI=DrunkardWalk結(jié)構(gòu)的指針 ;返回:結(jié)構(gòu)初始化為隨機(jī)數(shù) TakeDrunkenWalk PROCLOCAL currX:WORD,currY:WORDpushad;用OFFSET 運(yùn)算符獲取path --COORD 對(duì)象數(shù)組--的地址,將其復(fù)制EDImov edi,esiadd edi,OFFSET DrunkardWalk.path ;OFFSET返回0mov ecx,WalkMax ;循環(huán)計(jì)數(shù)器mov currX,StartX ;當(dāng)前X的位置mov currY,StartY ;當(dāng)前Y的位置Again:;把當(dāng)前位置插入數(shù)組mov ax,currXmov (COORD PTR [edi]).X,axmov ax,currYmov (COORD PTR [edi]).Y,axINVOKE DisplayPosition,currX,currYmov eax,4 ;選擇一個(gè)方向(03)call RandomRange.IF eax == 0 ;北dec currY.ELSEIF eax == 1 ;南inc currY.ELSEIF eax == 2 ;西dec currX.ELSEinc currX ;.ENDIFadd esi,TYPE COORD ;指向下一個(gè)COORDloop AgainFinish:mov (DrunkardWalk PTR [esi]).pathsUsed,WalkMaxpopadret TakeDrunkenWalk ENDP;顯示當(dāng)前X和Y的位置 DisplayPosition PROC currX:WORD,currY:WORD .data commaStr BYTE ",",0 .codepushadmovzx eax,currX ;當(dāng)前X的位置call WriteDecmov edx,OFFSET commaStrcall WriteStringmovzx eax,currYcall WriteDeccall Crlfpopadret DisplayPosition ENDP END main

8:UNION : 聯(lián)合使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORDInteger UNION ;初始值要一致,否則就被最大字段的初始值覆蓋D DWORD 0W WORD 0B BYTE 0 Integer ENDS;結(jié)構(gòu)中包含聯(lián)合 FileInfo STRUCTFileID Integer <>FileName BYTE 64 DUP (?) FileInfo ENDS;也可以在結(jié)構(gòu)中直接定義聯(lián)合 FileInfo2 STRUCTUNION FileIDD DWORD ?W WORD ?B BYTE ?ENDSFileName BYTE 64 DUP(?) FileInfo2 ENDS.data myInt Integer <> val1 Integer <12345678h> val2 Integer <100h> val3 Integer <>.code main PROCmov val3.B , almov val3.W,axmov val3.D,eaxINVOKE ExitProcess,0 main ENDP END main

總結(jié)

以上是生活随笔為你收集整理的汇编语言-017(SCASW 、STRUCT 、STRUCT_ALLPOINTS 、STRUCT_ALIGN 、SYSTEMTIME、UNION 、 STRUCTTEST )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。