匯編語言-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

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

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

相關文章

弗林的計算機體系結構分類

計算機體系結構分類 (Classification of computer architecture) According to Flynns there are four different classification of computer architecture, 根據弗林的說法&#xff0c;計算機體系結構有四種不同的分類&#xff0c; 1)SISD(單指令單數據流) (1) SISD (Single…

讀入txt

用C#讀取txt文件的方法1、使用FileStream讀寫文件 文件頭&#xff1a; using System;using System.Collections.Generic;using System.Text;using System.IO; 讀文件核心代碼&#xff1a; byte[] byData new byte[100];char[] charData new char[1000]; try{FileStream sFile…

實驗6 數據查詢--高級查詢

實驗6 數據查詢--高級查詢一、實驗目的 1.掌握查詢結果排序的方法。 2.掌握排序結果進行計算的方法。 3.掌握排序結果分組的方法。 4.掌握排序結果分組后再選擇的方法。 二、實驗要求 應用SELECT語句對數據庫eshop中數據進行指定條件的高級查詢。 三、實驗步驟 1.查詢性別為“…

Python程序可打印今天的年,月和日

In the below example – we are implementing a python program to print the current/ todays year, month and year. 在下面的示例中-我們正在實現一個python程序來打印當前/今天的年&#xff0c;月和年 。 Steps: 腳步&#xff1a; Import the date class from datetime …

工資年結時提示“上年數據已經結轉”

解決方案&#xff1a;執行如下SQL語句即可解決&#xff1a;use ufsystem update ua_account_sub set bclosing0 where cacc_id001 and iyear2005 and csub_idwa 重新年結即可 問題分析&#xff1a;產生問題的原因是用戶進行過工資的年結&#xff0c;在業務數據需要調整&…

匯編語言-007(ADD_SUB_NEG 、 PUSH和POP指令應用 、 AND,OR,XOR使用 、 條件跳轉應用)

1&#xff1a; ADD_SUB_NEG : ADD偽指令增加數值&#xff0c;SUB偽指令減少數值,NEG取反1 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data var1 DWORD 10000h var2 DWORD 20000h.code main PROCmov eax,var1add eax,var2mov eax,var2sub eax,v…

Automatic Reference Counting

Automatic Reference Counting http://clang.llvm.org/docs/AutomaticReferenceCounting.html轉載于:https://www.cnblogs.com/StarMud/articles/2642263.html

實驗5 數據查詢--連接查詢

實驗5 數據查詢--連接查詢一、實驗目的 1.熟悉等值聯接查詢的方法。 2.熟悉非等值聯接查詢的方法。 3.熟悉自身聯接查詢的方法。 4.熟悉外聯接查詢的方法。 5.熟悉復合條件聯接的方法。 二、實驗要求 應用SELECT語句對數據庫eshop中數據進行指定條件的連接查詢。 三、實驗步驟…

Java RandomAccessFile readInt()方法與示例

RandomAccessFile類readInt()方法 (RandomAccessFile Class readInt() method) readInt() method is available in java.io package. readInt()方法在java.io包中可用。 readInt() method is used to read signed 32-bit integer value from this RandomAccessFile. readInt()方…

天高地厚(轉)

信樂團-天高地厚作詞:武雄作曲:詹凌駕 keith stuart你累了沒有可否伸出雙手想擁抱怎能握著拳頭我們還有很多夢沒做還有很多明天要走要讓世界聽見我們的歌準備好沒有時間不再回頭想要飛不必任何理由不管世界盡頭多寂寞你的身邊一定有我我們說過不管天高地厚想飛到那最高最遠最灑…

實驗4 數據查詢--簡單查詢

實驗4 數據查詢--簡單查詢一、實驗目的 1.掌握SELECT語句的基本方法。 2.掌握從表中查詢特定行的方法。 3.掌握從表中查詢前N行的方法。 4.掌握從查詢結果中去掉重復行的方法。 5.掌握使用列的別名的方法。 6.掌握從表中查詢特定列的方法。 7.掌握查詢語句中的通配符的使用。 …

POJ 3189 Steady Cow Assignment

POJ_3189 一開始題意各種理解錯&#xff0c;首先輸入的那個矩陣第i行第j列的值表示的是奶牛i會第j個中意的牛棚&#xff0c;最后求的range就相當于j的range&#xff0c;至于range是變化的范圍&#xff0c;比如j在1、2變化&#xff0c;那么range就應該是2&#xff0c;也就是MAX-…

匯編語言-008(條件跳轉應用 、loopnz 條件循環指令使用 、loopz 條件循環指令使用 、 if語句編寫匯編時 、while語句編寫匯編時 、循環內的if語句嵌套)

1&#xff1a; 條件跳轉應用&#xff0c;三個數中最小數 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data V1 WORD 1 V2 WORD 2 V3 WORD 3.code main PROCmov ax,V1 ;假設V1是最小值cmp ax,V2 ;如果AX小于等于V2jbe L1mov ax,v2 L1:cmp ax,V…

java jar包示例_Java包isCompatibleWith()方法與示例

java jar包示例包類的isCompatibleWith()方法 (Package Class isCompatibleWith() method) isCompatibleWith() method is available in java.lang package. isCompatibleWith()方法在java.lang包中可用。 isCompatibleWith() method is used to check the specification versi…

面向對象的JavaScript編程

Javascript對于做過Web程序的人不應該是陌生&#xff0c;初期是用來做一些簡單的FORM驗證&#xff0c;基本上是在玩弄一些技巧性的東西。IE 4.0引入了DHTML&#xff0c;同時為了對抗Netscape的Javascript,提出了自己的腳本語言JScript&#xff0c;除了遵循EMAC的標準之外&#…

實驗3 SQL Server 表中記錄更新操作

實驗3 SQL Server 表中記錄更新操作一、實驗目的 1.掌握INSERT INTO語句的方法。 2.了解INSERT FROM語句的方法。 3.掌握UPDATE語句的方法。 4.掌握DELETE語句的方法。 二、實驗要求 1.在已經創建好的eshop數據庫中的各表中添加樣例數據。 三、實驗步驟 1.在eshop數據庫的memb…

HTML 5 標簽

HTML 5 <nav> 標簽 定義和用法 <nav> 標簽定義導航鏈接的部分。 實例 <nav> <a href"index.asp">Home</a> <a href"html5_meter.asp">Previous</a> <a href"html5_noscript.asp">Next</a>…

Assert和異常處理

Assert用于檢查不應該發生情況&#xff0c;用來幫助開發人員對問題的快速定位。異常處理用于對程序發生異常情況的處理&#xff0c;增強程序的健壯性、容錯性&#xff0c;減少程序使用中對用戶不有好的行為&#xff0c;不讓(通常也不必)用戶知道發生了什么錯誤。實際開發中&…

tooctalstring_Java Long類toOctalString()方法的示例

tooctalstring長類toOctalString()方法 (Long class toOctalString() method) toOctalString() method is available in java.lang package. toOctalString()方法在java.lang包中可用。 toOctalString() method is used to represent an octal string of the given parameter […

匯編語言-009(表驅動選擇 、條件控制流偽指令 、邏輯移位SHL,SHR 算術移位SAL,SAR)

1&#xff1a; 表驅動選擇&#xff0c;用查表來代替多路選擇結構的一種方法 .386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data CaseTable BYTE A ;查詢值DWORD Process_A ;過程地址 EntrySize ($ - CaseT…