Win32ASM學習[18]:串指令-MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE

--------------------------------------------------------------------------------------------------------------------------------------------------------

一.字符串傳送指令? MOVSB/MOVSW/MOVSD

?格式: MOVS OPD,OPS?
?功能: OPD<--OPS.

?

說明: 1. 其中OPS為源串符號地址,OPD為目的串符號地址.
??????????2. 對字節串操作時: 若DF=0,則作加,即[ES:DI]<--[DS:SI],(SI)<--(SI)+1,(DI)<--(DI)+1.
????????????????????????? 若DF=1,則作減,即 (SI)<--(SI)-1,(DI)<--(DI)-1.
??????????3. 對字串操作時: 若DF=0,則作加,即(SI)<--(SI)+2,(DI)<--(DI)+2.
??????????????????????? 若DF=1,則作減,即(SI)<--(SI)-2,(DI)<--(DI)-2.

????????? 4. 在指令中不出現操作數時,字節串傳送格式為MOVSB、字串傳送格式為MOVSW,雙??????????? 字傳送格式為MOVSD

???????? ?5. 本指令不影響標志位.

???????? ?6. 例如: 將存儲器中變量A開始的200個數據串傳送至B開始的存儲區,可用以下程??????????? 序段實現:
??????????????? MOV SI,OFFSET A ;SI指向源串首址
??????????????? MOV DI,OFFSET B ;DI指向目的串首址
??????????????? MOV CX,200??????? ?;字節串或字串長度200送CX
??????????????? CLD???????????????????? ? ;0-->DF?
????? ATOB:MOVS B,A???;對字節串傳送可用MOVSB
??????????????? DEC CX???????????????? ;(CX)<--(CX)-1?
?????????????? ?JNZ ATOB?????????????;?
??????????????? (CX)<>0,轉至ATOB

???????? 7. 用指令MOVS?? ?B,A究竟是字節傳送,還是字傳送,取決于A,B的類型定義.
??????????????? ?若DF=0,則在字傳送時,(SI)<--(SI)+2,(DI)<--(DI)+2.

----------------------------------------------------------------------------------------------------------------------------------------------------------

.

二.比較串指令:CMPSBCMPSWCMPSD ;比較 ESI、EDI; 執行后, ESI 與 EDI 的地址移動相應的單位

?

字符串比較指令

?格式: CMPS????? OPRD1,OPRD2
?----? CMPSB
???????? CMPSW

?功能: 由SI尋址的源串中數據與由DI尋址的目的串中數據進行比較,比較結果送標志位,而
?----? 不改變操作數本身.同時SI,DI將自動調整.

?

說明: 1. 其中OPRD2為源串符號地址,OPRD1為目的串符號地址.
??????? 2. 本指令影響標志位AF、CF、OF、SF、PF、ZF.本指令可用來檢查二個字符串是否相同,可以使用循環控制方法對整串進行比較.

??????? 3. 與MOVS相似,CMPS指令也可以不使用操作數,此時可用指令CMPSB或CMPSW分別表示字節串比較或字串比較.

??????? 4. 例如: 對兩個字節串進行比較,若一致,則AL內容置為0;若不一致,則AL內容置為0FFH.程序段如下:
??????????????? MOV SI,OFFSET ST1
??????????????? MOV DI,OFFSET ST2?
??????????????? MOV CX,N
??????????????? CLD?
????? ?NEXT:CMPSB
??????????????? JNZ FIN
??????????????? DEC CX
??????????????? JNZ NEXT
??????????????? MOV AL,0
??????????????? JMP OVR

?????????FIN:MOV AL,0FFH?
??????? OVR:MOV RSLT,AL

??????? 5.CMPSD不大一樣,它是雙字掃描,其它的基本相同.

----------------------------------------------------------------------------------------------------------------------------------------------------------

.

三.掃描串指令:SCASBSCASWSCASD ;依據 AL/AX/EAX 中的數據掃描 EDI 指向的數據, 執行后 EDI 自動變化

?字符串搜索指令

?格式: SCAS OPRD
?----? SCASB?
?????????SCASW

???????? SCASD??????? ;它是雙字掃描,其它的基本相同

?功能: 把AL(字節串)或AX(字串)的內容與由DI寄存器尋址的目的串中的數據相減,結果置標志位,但不改變任一操作數本身.地址指針DI自動調整.
?

?說明: 1. 其中OPRD為目的串符號地址.
?----
?????? 2. 本指令影響標志AF、CF、OF、PF、SF、ZF.該指令可查找字符串中的一個關鍵字,只需在本指令執行前,把關鍵字放在AL(字節)或AX(字串 )中,用重復前綴可在整串中查找.
????????? 指令中不使用操作數時,可用指令格式SCASB,SCASW,分別表示字節串或字串搜索指令.

?????? 3. 例如: 尋找字符串中有否'$'字符
??????????????? MOV DI,OFFSET STR
??????????????? MOV CX,N?????????????? ;N為串長度
??????????????? MOV AL,'$'
??????????????? CLD?
???????AGN:SCASB
??????????????? JZ FIN
??????????????? DEC CX
??????????????? JNZ AGN
??????????????? MOV AL,0 ;未找到,AL中置0
??????????????? JMP OVR?
???????? FIN:MOV AL,0FFH?? ;找到,AL中置為0FFH?
???????OVR:MOV RALT,AL

----------------------------------------------------------------------------------------------------------------------------------------------------------

.

四.儲存串指令:STOSBSTOSWSTOSD ;將 AL/AX/EAX 中的數據儲存到 EDI 給出的地址, 執行后 EDI 自動變化

?

?字符串存儲指令 STOS

?格式: STOS OPRD
?----??STOSW

?????????STOSD???它是雙字傳送,其它的基本相同.

?功能: 把AL(字節)或AX(字)中的數據存儲到DI為目的串地址指針所尋址的存儲器單元中去.指針DI將根據DF的值進行自動調整.

?說明: 1. 其中OPRD為目的串符號地址.
? ?????? 2. 本指令不影響標志位.當不使用操作數時,可用STOSB或STOSW分別表示字節串或字串的操作.

---------------------------------------------------------------------------------------------------------------------------------------------------------

.

五.載入串指令:LODSBLODSWLODSD ;將 ESI 指向的數據載入到 AL/AX/EAX, 執行后 ESI 自動變化

?

?取字符串元素指令 LODS

?格式: LODS OPRD 其中OPRD為源字符串符號地址.
?
?功能: 把SI尋址的源串的數據字節送AL或數據字送AX中去, 并根據DF的值修改地址指針SI
??????????? 進行自動調整.

?

?說明:?? 1. 本指令不影響標志位.
??? ?????? 2. 當不使用操作數時,可用LODS(字節串)或LODSW(字串)指令.

----------------------------------------------------------------------------------------------------------------------------------------------------------.

上述指令可以有重復前綴

:REP? ? ? ECX > 0

REPE (或 REPZ)ECX > 0 且 ZF=1

REPNE(或REPNZ)ECX > 0 且 ZF=0

;重復前綴可以自動按單位(1、2、4)遞減 ECX

?

嗯?? 串傳送指令?? 功能都是比較強大的??

對一個函數進行反編譯? 我們也會發現?? 編譯器利用了這些串傳送指令 對局部變量進行了初始化??

?

xor eax,eax???????????????????? ;要將這塊內存的每個單元要初始化的數值 送入eax
mov edi,offset szString?? ;獲取這塊內存的地址 送去edi
mov ecx,dwStingSize????? ;這塊內存的要初始化的長度 送去ecx
cld???????????????????????????????? ?;CLD使DF復位,即DF=0
rep stosb??????????????????????? ;重復覆蓋掉edi所指向的單元
REP????????????????????????????????;CX<>0 重復執行字符串指令


匯編指令stosb,stosw,stosd,分別是把AL,AX,EAX的內容存儲到EDI所指的內存單元中,同時根據EDI的值根據方向標志增加或減少,可配合指令REP一起使用

另外:匯編指令MOVSB,MOVSW,意思是搬移一個字節或一個字,它是把 DS:SI 所指地址的一個字節搬移到 ESI 所指的地址上,搬移后原來的內容不變,但是原來 ESI 所指的內容會被覆蓋而且在搬移之后 SI 和 DI 會自動的指向下一個要搬移的地址。

RtlMoveMemory????? 移動內存 ----> ?--->movsb
RtlFillMemory?????????? 填充內存塊 --->eax = ? ---->stosb
RtlZeroMemory?????? ?以0填充內存塊 -->eax = 0 ----->stosb 如果是sw,sd的話 那樣計數的方式就不一樣了

----------------------------------------------------------------------------------------------------------------------------------------------------------?

?

?

?

----------------------------------------------------------------------------------------------------------------------------------------------------------?

?

?

----------------------------------------------------------------------------------------------------------------------------------------------------------?

?

?

?

?

----------------------------------------------------------------------------------------------------------------------------------------------------------?

?

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

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

相關文章

Xamarin iOS編寫第一個應用程序創建工程

Xamarin iOS編寫第一個應用程序創建工程 在Xcode以及Xamarin安裝好后&#xff0c;就可以在Xamarin Studio中編寫程序了。本節將主要講解在Xamarin Studio中如何進行工程的創建以及編寫代碼等內容XamariniOS編寫第一個應用程序創建工程本文選自Xamarin iOS開發實戰大學霸。 1.3.…

Jade之Extends

Extends jade允許多個jade文件繼承一個jade文件。 jade&#xff1a; //- layout.jade doctype html htmlheadblock titletitle Default titlebodyblock content //- index.jade extends ./layout.jadeblock titletitle Article Titleblock contenth1 My Article html&#xff1…

Win32ASM學習[19]:結構與聯合

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義. 它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址. -------------------------------------------------------------------------------------------------------------------------------…

hdu 1257 最少攔截系統(貪心)

題意&#xff1a; 最少需要多少個攔截系統才能將所有的導彈攔截下來。 思路&#xff1a; 第1枚導彈一定需要第一個攔截系統&#xff0c;第2枚導彈如果比第1個高度高&#xff0c;則需要第二個攔截系統。 考慮第i枚導彈&#xff0c;如果前i-1枚導彈的高度都比它小&#xff0c;則需…

Birt使用總結

把report放到其他服務器要重新建立Data Source ,這是配置&#xff0c;拷貝項目時不會同時拷貝 (1)在EXTJs中利用Report實現報表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

Win32ASM學習[20]:子程序

關于函數調用約定 :函數調用約定 這是以前的一個求和函數的例子 ---------------------------------------------------------------------------------------------------------------- .386 .model flat, stdcall include windows.inc include kernel32.inc include …

Mac聯網恢復系統重新安裝Lion

Mac的Lion系統&#xff0c;雖然不像Windows那樣需要經常重裝&#xff0c;但也難免會有要重置的時候&#xff0c;比如更換硬盤。本文介紹如何利用Mac的聯網恢復系統進行Lion系統的在線恢復。Mac的在線恢復系統只在近幾年的機型上才有&#xff0c;在進行系統恢復前&#xff0c;請…

【線性代數公開課MIT Linear Algebra】 第二十三課 微分方程與exp(At)

本系列筆記為方便日后自己查閱而寫&#xff0c;更多的是個人見解&#xff0c;也算一種學習的復習與總結&#xff0c;望善始善終吧~ 一階常系數微分方程 Aududt 將一階常系數微分方程轉換為線性代數問題的關鍵在于常系數微分方程的解一定是指數形式的。那么我們的需要求解的東西…

Win32ASM學習[21]:宏匯編(1)

-------------------------------------------------------------------------------------------------------------------- 嗯 上個星期到現在 把Win32ASM基礎匯編復習了下 在網上找到了 這個不錯系列 于是就轉載過來了 其中 根據我自己的水平 刪減了一些內容 或…

ubunu安裝軟件的一個錯誤

http://tonychiu.blog.51cto.com/656605/654776/ 由于ubuntu/debian軟件庫中有時候不同的庫更新速度不一致&#xff0c;apt-get 出出現如下的錯誤提示 Some packages could not be installed. This may mean that you have requested an impossible situation or if you are us…

常用的基本Windows數據類型

常用的基本Windows數據類型 --------------------------------------------------------------------------------------------------------------------------------------------------------- 類 型 …

刪除空文件夾 清除CS擴展名文件 bat

刪除空文件夾。刪的干凈。刪的徹底。 將下列代碼復制到txt中保存。并把后綴.txt命成.bat。然后運行即可。 方案&#xff11;.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 刪除指定目錄及其子目錄下的空文件夾.bat 代碼&#xff1a;…

ios 坐標轉換

// 將像素point由point所在視圖轉換到目標視圖view中&#xff0c;返回在目標視圖view中的像素值 - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; // 將像素point從view中轉換到當前視圖中&#xff0c;返回在當前視圖中的像素值 - (CGPoint)convertPoint:(C…

80X86偽指令

8086 偽指令表 一、數據定義偽操作 偽 指 令 名 稱 語 句 格 式 功 能 定義字節類型的數據存儲區 [變量名] DB 表達式[&#xff0c;…] 定義一個以變量名為首址的字節類型數據存儲區&#xff0c;所含數據元素的個數由其后表達式的個數所決定&#xff0c;數據存儲單元…

jQuery慢慢啃之選擇器(二)

1.$("#myDiv");ID匹配一個元素 <span id"foo[bar]"></span> $("#foo\\[bar\\]);//轉義 2.$("div");//元素標簽名匹配 3.$(".myClass"); css類名匹配 4.$("*") 匹配所有元素&#xff0c;多用于結合上下文…

iOS學習之基本概念

學習iOS最重要的是態度和興趣&#xff0c;如果你對于學習始終抱有不斷的熱情和端正的態度&#xff0c;那么&#xff0c;無論是什么&#xff0c;你總會成功的&#xff01; 有一句話與大家共勉&#xff1a;過程中跌倒多少次都沒有關系&#xff0c;重要的是&#xff0c;跌倒后你能…

Win32ASM代碼基本模塊

;-------------------------------------------------------------------------------- ;程序環境設置 .386 .model flat,stdcall option casemap:none ;-------------------------------------------------------------------------------- ;頭文件與庫文件導入 include windo…

ORA-16038: log 3 sequence# 103 cannot be archived

[sizelarge]今天在自己機器做了個實驗&#xff0c;插入10萬條&#xff0c;由于空間少&#xff0c;重啟數據庫時出現&#xff1a; [sizex-large]SQL> startup ORACLE instance started. Total System Global Area 188743680 bytes Fixed Size 1218460 byte…

Win32ASM學習[23]:RadASM快捷鍵

RadASM快鍵操作 一.書簽 SHIFTF8為所在行下書簽或刪除書簽(Crtl0-9能定義存于文件中的10個書簽)&#xff0c; 可通過編輯\書簽\開關書簽。&#xff08;CRTLF8為下一書簽&#xff0c;F8為上一書簽&#xff09; 二、列選擇&#xff1a; 拉框時用到&#xff0c;CRTLB為切換行…

SAP MM/FI 自動過賬實現 OBYC 接口執行

一. 自動過賬原理 在MM模塊的許多操作都能實現在FI模塊自動過賬&#xff0c;如PO收貨、發票驗證(LIV)、工單發料、向生產車間發料等等。不用說&#xff0c;一定需要在IMG中進行配置才可以實現自動處理。但SAP實現的這種自動配置的機制是怎樣的呢&#xff1f;其實也并不復雜&…