匯編語言-017(SCASW 、STRUCT 、STRUCT_ALLPOINTS 、STRUCT_ALIGN 、SYSTEMTIME、UNION 、 STRUCTTEST )

1:SCASW : 在wordArray中掃描16位數值0100h,將匹配元素的偏移量復制到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 結構的使用

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

3:STRUCT_ALLPOINTS : 變址尋址操作數遍歷結構數組

include Irvine32.incNumPoints = 3
.data
ALIGN WORD
AllPoints COORD NumPoints DUP(<0,0>).code
main PROCmov edi,0  ;數組索引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 : 比較結構內有對齊處理與無對齊處理的訪問時間,照道理是有對齊的快,但這里反而是無對齊快

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 : 使用結構獲取系統時間函數

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:結構內包括結構的使用

.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 :結構應用例子,醉漢行走,利用隨機數,選擇每一步行走方向

;醉漢行走,教授的起點坐標為2525,并在周圍徘徊include 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;向隨機方向行走(北,南,東,西)
;接收:ESI=DrunkardWalk結構的指針
;返回:結構初始化為隨機數
TakeDrunkenWalk PROCLOCAL currX:WORD,currY:WORDpushad;用OFFSET 運算符獲取path --COORD 對象數組--的地址,將其復制EDImov edi,esiadd edi,OFFSET DrunkardWalk.path ;OFFSET返回0mov ecx,WalkMax   ;循環計數器mov currX,StartX  ;當前X的位置mov currY,StartY  ;當前Y的位置Again:;把當前位置插入數組mov ax,currXmov (COORD PTR [edi]).X,axmov ax,currYmov (COORD PTR [edi]).Y,axINVOKE DisplayPosition,currX,currYmov eax,4   ;選擇一個方向(03)call RandomRange.IF eax == 0        ;北dec currY.ELSEIF eax == 1    ;南inc currY.ELSEIF eax == 2    ;西dec currX.ELSEinc currX        ;.ENDIFadd esi,TYPE COORD  ;指向下一個COORDloop AgainFinish:mov (DrunkardWalk PTR [esi]).pathsUsed,WalkMaxpopadret
TakeDrunkenWalk ENDP;顯示當前X和Y的位置
DisplayPosition PROC currX:WORD,currY:WORD
.data
commaStr BYTE ",",0
.codepushadmovzx eax,currX  ;當前X的位置call WriteDecmov edx,OFFSET commaStrcall WriteStringmovzx eax,currYcall WriteDeccall Crlfpopadret
DisplayPosition ENDP
END main

8:UNION : 聯合使用

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORDInteger UNION   ;初始值要一致,否則就被最大字段的初始值覆蓋D DWORD 0W WORD 0B BYTE 0
Integer ENDS;結構中包含聯合
FileInfo STRUCTFileID Integer <>FileName BYTE 64 DUP (?)
FileInfo ENDS;也可以在結構中直接定義聯合
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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379299.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【筆記】正則表達式[1]

元字符 符號 意思 示范 詳例 \d 任意一個數字 \d{2}-\d{8} 22-12345678 * *前的符號重復任意次數 次數可以為零 \d* 222222222222... 或 2 \s 任意的空白符 全半角空格&#xff0c;tab&#xff0c;換行符 \bhi\b\s\bLucy\b hi Lucy 和*用法相似 次數>1 \d …

編寫一個匯編語言程序,完成以下要求。從BUF單元處定義有10個帶符號字數據:-1,3,24,94,62,72,55,0,-48,99,試找出他們中的最大值和平均值,并以此分別存放至該數據區的后兩個單元

編寫一個匯編語言程序&#xff0c;完成以下要求。從BUF單元處定義有10個帶符號字數據:-1,3,24,94,62,72,55,0,-48,99&#xff0c;試找出他們中的最大值和平均值&#xff0c;并以此分別存放至該數據區的后兩個單元中(假設這10個數的和值不超過16位范圍) P176 4.12 編程思路&am…

prototype 的ajax

原文&#xff1a;http://www.prototypejs.org/learn/introduction-to-ajax]翻 譯&#xff1a;www.ruby-china.cn 站長]Prototype框架提供了非常容易和有意思的方法處理Ajax的調用&#xff0c;同時它也是瀏 覽器安全的 。除了簡單的請求外&#xff0c;這個模塊&#xff08;指pro…

匯編語言-018(FLD 、FST、FSTP、FCHS、FABS 、浮點運算符、浮點比較 )

1&#xff1a;FLD : FPU&#xff08;浮點處理器&#xff09;的加載浮點數到堆棧指令 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data array REAL8 10 DUP(?) dblOne REAL8 234.56 dblTwo REAL8 10.1.code main PROCfld array …

mcq 隊列_MCQ | 基礎知識 免費和開源軟件| 套裝4

mcq 隊列Q1. What do you call the technique of storing encrypted user passwords in Linux? Q1。 您如何稱呼在Linux中存儲加密的用戶密碼的技術&#xff1f; System Password Management 系統密碼管理 Shadow Password 影子密碼 Encrypted Password 加密密碼 None of the…

將AX寄存器中的16位數據分成4組(從高到低),每組4位,然后把這4組數作為數當中的低4位分別放在AL,BL,CL,DL中。

將AX寄存器中的16位數據分成4組&#xff08;從高到低&#xff09;&#xff0c;每組4位&#xff0c;然后把這4組數作為數當中的低4位分別放在AL&#xff0c;BL&#xff0c;CL&#xff0c;DL中。 P176 4.14 編程思路&#xff1a;首先用BX、DX存放AX&#xff0c;即原AX原BX原DX&…

一個很不錯的wp企業站模板

http://zjuhpp.com/chinese-localization-of-business-wordpress-theme-devster.html轉載于:https://www.cnblogs.com/i-kyle/archive/2012/09/13/2683817.html

著名的自由軟件圣戰- “KDE/QT .VS. Gnome/Gtk”

在 Unix 的圖形界面一向是以 MIT 的 X Window 系統為標準&#xff0c; 可是在商業應用上有兩大流派&#xff0c;一派是以 Sun 公司領導的 Openlook 陣營&#xff0c;一派是 IBM/HP 領導的OSF (Open Software Foundation) 的 Motif&#xff0c; 雙方經過多年競爭之后&#xff0c…

匯編語言-019(匯編程序與c\c++相互調用)

1&#xff1a;在C程序中使用__asm塊插入匯編代碼程序&#xff08;不能用LENGTHOF與SIZEOF運算符&#xff0c;而是LENGTH和SIZE&#xff09; struct Package {long originZip; //4long destinationzip;//4float shippingPrice; //4 };int main(int argcount,char* args[]) {c…

kotlin 判斷數字_Kotlin程序檢查數字是偶數還是奇數

kotlin 判斷數字Given a number N, we have to check whether it is EVEN or ODD. 給定數字N &#xff0c;我們必須檢查它是偶數還是奇數 。 Example: 例&#xff1a; Input:N 13Output:"ODD"Input:N 24Output:"EVEN"程序在Kotlin檢查偶數或奇數 (Prog…

微機原理與接口技術(第2版)考點

第一章 1&#xff0c;微型計算機的特點&#xff1a; 功能強、可靠性高價格低廉系統設計靈活&#xff0c;適應性強體積小&#xff0c;重量輕&#xff0c;維護方便 2&#xff0c;微型計算機的硬件組成 微處理器內存儲器I/O接口電路I/O設備系統總線 3&#xff0c;微機的工作過…

搜狗面試筆試一面二面全經歷

09.25 華科西十二教&#xff0c;搜狗招聘筆試&#xff1a; C搜索引擎研發。同時有威盛、烽火兩家筆試&#xff0c;就沒有去。 09.26 華科校內某酒店&#xff0c;搜狗一面&#xff1a; 筆試做的不錯&#xff0c;客觀題錯了3.5&#xff08;20個&#xff09;&#xff0c;后兩個算法…

UltraEdit語法高亮

語法加亮分支位于配置&#xff0d;編輯器顯示之下&#xff0c;允許用戶配置語法加亮選項&#xff1a;語法加亮可以識別預定詞語&#xff0c;并用不同顏色顯示它們。該功能對于程序員來說尤其有用&#xff0c;并且對那些想用不同顏色顯示文檔中詞語的用戶也非常有用。提供二十種…

線性代數 向量長度_用戶定義長度的向量| 使用Python的線性代數

線性代數 向量長度Prerequisite: Defining a vector 先決條件&#xff1a; 定義向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a matrix in n-dimensional space…

順序表(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ typedef void SeqList; //定義鏈表數據類型&#xff0c;void因為要適用不同鏈表數據類型 typedef void SeqListNode; //定義鏈表節…

設有兩個16位整數變量A和B,試編寫完成下述操作的程序。

設有兩個16位整數變量A和B&#xff0c;試編寫完成下述操作的程序。 &#xff08;1&#xff09;若有兩個數中一個是奇數&#xff0c;則將奇數存入A中&#xff0c;偶數存入B中。 &#xff08;2&#xff09;若兩個數均為奇數&#xff0c;則兩數分別減1&#xff0c;并存回原變量中…

棋牌游戲服務器架構: 詳細設計(三) 數據庫設計

主要有3類Database: ServerInfoDB,UserInfoDB和GameDB。 ServerInfoDB主要存儲的是游戲列表的信息,UserInfoDB存儲玩家的全局信息&#xff0c;而GameDB就是積分以及積分變化情況。下面分別加以描述。 1. ServerInfoDB ServerInfoDB主要存儲游戲列表信息。主要有以下幾個表: 1. …

程序開發與性格特征

程序開發與性格特征 引言&#xff1a; 程序員給很多人的印象一般是不善于交際、表情嚴肅、思維緊密、做事認真、沉著冷靜等等。那么這些特征到底和程序開發有沒有關系呢&#xff1f;不同性格的人在團隊開發當中將面臨什么樣的問題以及不同性格的人在團隊開發中又將發揮著什么樣…

匯編語言編寫程序從1加到100要求使用循環結構。

匯編語言編寫程序從1加到100要求使用循環結構。 匯編思路&#xff1a;AX用于存放每次累加的結果—>09998…0 首先&#xff0c;DATA段中定義SUM用來存放結果和&#xff0c;STACK段定義一個200DB類型空間&#xff0c;用來存放數據。CODE段&#xff0c;AX清0&#xff0c;CX賦值…

c語言指針++_C ++此指針| 查找輸出程序| 套裝3

c語言指針Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {int VAL;public:Test(int v){VAL v;}Test* Sum(Test T1, Test T2){VAL T1.VAL T2.VAL;return this;}void print(){cout << VAL << " ";}};int mai…