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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言-006(数组操作 、字符串应用、PUSHFD_POPFD 、PUSHAD_POPAD 、 子程序 函数、 USES 、 INC_DEC )

發布時間:2023/12/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言-006(数组操作 、字符串应用、PUSHFD_POPFD 、PUSHAD_POPAD 、 子程序 函数、 USES 、 INC_DEC ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1: 計算斐波那契數列前7個數值之和

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data.code main PROCmov esi,1mov edi,1mov eax,2mov ecx,5 L1: mov ebx,esiadd ebx,edimov esi,edimov edi,ebxadd eax,ebxloop L1INVOKE ExitProcess,0 main ENDP END main

2: 數組反向,使用TYPE,LENGTHOF運行符和 TEXTEQU偽指令來應對往后程序的數值大小和類型可能變化的情況

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORDtempReg TEXTEQU <eax> .data List DWORD 1,2,3,4,5.code main PROCmov ecx,LENGTHOF List /2mov esi,0mov edi,LENGTHOF List - 1 L1:mov tempReg,List[esi * TYPE List]xchg tempReg,List[edi * TYPE List]mov List[esi * TYPE List],tempReginc esidec ediloop L1INVOKE ExitProcess,0 main ENDP END main

3: 將字符串復制相反順序到另一個字符串

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data source BYTE "This is the source string",0 target BYTE SIZEOF source DUP('#').code main PROCmov target[SIZEOF target -1],0mov esi,SIZEOF target - 2mov edi,0mov ecx,SIZEOF target - 1 L1: mov al,source[esi]mov target[edi],aldec esiinc ediloop L1INVOKE ExitProcess,0 main ENDP END main

4: 數組元素移位,數組[10,20,30,40]移位后為[40,10,20,30]

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data dwordList DWORD 10,20,30,40.code main PROCmov esi,LENGTHOF dwordList - 1mov ecx,esimov ebx,dwordList[esi * TYPE dwordList]dec esi L1:mov edi,dwordList[esi * TYPE dwordList]inc esimov dwordList[esi * TYPE dwordList],edisub esi,2loop L1mov dwordList,ebxINVOKE ExitProcess,0 main ENDP END main

5: PUSHFD_POPFD : 將標識寄存器入棧出棧

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data saveFlags DWORD ?.code main PROCpushfd ;標識寄存器內容入棧pop saveFlags ;復制給一個變量push saveFlags ;被保存的標識入棧popfd ;復制給標識寄存器INVOKE ExitProcess,0 main ENDP END main

6: PUSHAD_POPAD : 將通用寄存器入棧和反順序出棧,順序:eax,ecx,edx,ebx,esp,ebp,esi,edi

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCpushad ;保存通用寄存器的內容 eax,ecx,edx,ebx,esp,ebp,esi,edi順序;mov eax,0 ;如果有返回值在eax中后面就要注意用popad了popad ;反順序出棧INVOKE ExitProcess,0 main ENDP END main

7: 運用棧將字符串反轉

.386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data aName BYTE "Abraham Lincoln",0 nameSize = ($ - aName) - 1.code main PROC;將名字壓入棧mov ecx,nameSizemov esi,0 L1:movzx eax,aName[esi] ;獲取字符push eax ;壓入棧inc esiloop L1;將名字按逆序彈出棧;并存入aName數組mov ecx,nameSizemov esi,0 L2:pop eax ;獲取字符mov aName[esi],al;存入字符串inc esiloop L2INVOKE ExitProcess,0 main ENDP END main

8: 創建過程(子程序,函數)進行數組求和

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwEixtCode:DWORD.data array DWORD 10000h,20000h,30000h,40000h,50000h theSum DWORD ?.code main PROCmov esi,OFFSET array ;esi指向數組mov ecx,LENGTHOF array ;數組計數器call ArraySum ;計算和數mov theSum,eax ;取返回的和數INVOKE ExitProcess,0 main ENDP;ArraySum ;計算32位整數數組之和 ;接收:ESI = 數組偏移量 ; ECX = 數組元素的個數 ;返回 EAX = 數組元素之和ArraySum PROCpush esipush ecx ;保存esi和ecxmov eax,0 L1:add eax,[esi] ;將每個整數與和數相加add esi,TYPE DWORD ;指向下一個整數loop L1 ;按照數組大小重復pop ecx ;恢復ecx和esipop esiret ;返回調用片 ArraySum ENDP END main

9: USES : USES偽指令告訴匯編器,在過程開始時生成PUSH寄存器指令,在結束時生成POP寄存器指令(可以查看反匯編窗口)

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwEixtCode:DWORD.data array DWORD 10000h,20000h,30000h,40000h,50000h theSum DWORD ?.code main PROCmov esi,OFFSET array ;esi指向數組mov ecx,LENGTHOF array ;數組計數器call ArraySum ;計算和數mov theSum,eax ;取返回的和數INVOKE ExitProcess,0 main ENDP;ArraySum ;計算32位整數數組之和 ;接收:ESI = 數組偏移量 ; ECX = 數組元素的個數 ;返回 EAX = 數組元素之和ArraySum PROC USES esi ecx;匯編器會生成將這兩個寄存器入棧的指令; push esi; push ecx ;保存esi和ecxmov eax,0 L1:add eax,[esi] ;將每個整數與和數相加add esi,TYPE DWORD ;指向下一個整數loop L1 ;按照數組大小重復;匯編器會生成將這兩個寄存器出棧的指令;pop ecx ;恢復ecx和esi;pop esiret ;返回調用片 ArraySum ENDP END main

10: INC_DEC : INC 偽指令自增,DEC偽指令自減

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data myWord WORD 1000h.code main PROCinc myWordmov bx,myWorddec bxINVOKE ExitProcess,0 main ENDP END main

總結

以上是生活随笔為你收集整理的汇编语言-006(数组操作 、字符串应用、PUSHFD_POPFD 、PUSHAD_POPAD 、 子程序 函数、 USES 、 INC_DEC )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。