串操作指令

  串操作指令可以方便對一組連續的數據進行操作。串操作后自動根據DF標志位修改ESI和EDI,DF = 0時,ESI,EDI遞增,DF = 1時,ESI,EDI遞減。串操作指令有2組,1組實現數據串傳送,另1組實現數據串檢測。串操作指令通常需要反復執行,所以常與重復指令前綴聯合使用,它通過計數器ECX控制重復執行串指令的次數。

?

1.串傳送指令

這組指令實現對串的傳送,它們有,MOVS,STOS,LODS,可以配合REP前綴,但不影響標志。

MOVSB      ;BYTE PTR[EDI] = BYTE PTR[ESI]

MOVSW      ;WORD PTR[EDI] = WORD PTR[ESI]

MOVSD      ;DWORD PTR[EDI] = DWORD PTR[EDI]

STOSB      ;BYTE PTR[EDI] = AL

STOSW      ;WORD PTR[EDI] = AX

STOSD      ;DWORD PTR[EDI] = EAX

LODSB      ;AL = BYTE PTR[ESI]

LODSW      ;AX = WORD PTR[ESI]

LODSD      ;EAX = DWORD PTR[ESI]

?

REP重復指令前綴,可以表示為當ECX != 0時,則繼續執行,直到ECX = 0。可以說,ECX指明了重復次數。如果不使用REP前綴,那么串指令其實是只被執行1次的,這是很多新手易出錯的地方。

比如,我們可以使用串傳送指令代替ZeroMemory。

結合上篇文章,我們可以定義一個宏,程序源碼如下:

ZeroMem        MACRO    Addr,Sizecld    ;;CLD標志位清0,表示遞增正向傳輸xor    al,almov    edi,Addrmov    ecx,Sizerep    stosb
endm

調用格式如下:

ZeroMem 數據串地址,長度

?

2.串檢測指令

這組指令包含有CMPS和SCAS。由于串比較指令和減法的實質是一樣的,所以它們也影響標志位。這兩個串操作指令可以和REPE/REPZ和REPNE/REPNZ聯合使用,通過ZF判斷是否相等。

CMPSB      ;BYTE PTR[ESI] - BYTE PTR[EDI]

CMPSW      ;WORD PTR[ESI] - WORD PTR[EDI]

CMPSD      ;DWORD PTR[ESI] - DWORD PTR[EDI]

SCASB      ;AL - BYTE PTR[EDI]

SCASW      ;AX - WORD PTR[EDI]

SCASD      ;EAX - DWORD PTR[EDI]

?

REPE/REPZ    ;每執行一次指令,ECX遞減1。如果ECX = 0或ZF = 0,則結束重復執行

REPNE/REPNZ   ;每執行一次指令,ECX遞減1。如果ECX = 0或ZF = 1,則結束重復執行

?

實際運用時要注意區分,串操作指令結束時因為比較完了,還是因為標志位問題。

我根據串操作指令定義了一個宏,可以代替ComapreMemory,如下:

CmpMem        MACRO    Addr1,Addr2,SizeLOCAL    nxor    eax,eaxmov    esi,Addr1mov    edi,Addr2mov    ecx,Sizerepe    cmpsb    ;;當ZF = 0時,結束是因為有不同jnz    n    ;;當兩數據串完全相等時,則EAX = 1inc    eax
n:
endm

?

 

轉載于:https://www.cnblogs.com/galano/p/8721794.html

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

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

相關文章

IS-IS基本配置

實驗內容:現在網絡中有4臺路由器,用戶希望利用這4臺路由器通過IS-IS協議實現網絡互聯,并且因為R1和R2性能相對較低,所以還要使這兩臺路由器處理的數據信息相對較少。 網絡拓撲: 實驗分析: 根據題意可知R1和…

高并發高流量網站架構

Web2.0的興起,掀起了互聯網新一輪的網絡創業大潮。以用戶為導向的新網站建設概念,細分了網站功能和用戶群,不僅成功的造就了一大批新生的網站,也極大的方便了上網的人們。但Web2.0以用戶為導向的理念,使得新生的網站有…

多處理機的進程調度方式

一.自調度方式 二.成組調度方式 三.專用處理機分配方式

枚舉類型用法_Mybatis-plus常見用法總結三

前面已經介紹了Mybatis-plus基本用法,今天為大家分享一些Mybatis-plus高級應用邏輯刪除自動注入枚舉類型處理Sql注入器多租戶表結構CREATE TABLE sys_role ( id varchar(64) NOT NULL COMMENT 主鍵, code varchar(64) NOT NULL DEFAULT COMMENT 角色編碼, name …

NOIP 2011 Day2

tags: 貪心模擬NOIP categories:信息學競賽總結計算系數 Solution 根據二項式定理,\[ \begin{align} (ab)^n\sum_{k0}^nC_{n}^{k}a^kb^{n-k} \end{align} \] 那么\[ \begin{align}(axby)^k&\sum_{p0}^kC_{k}^p(ax)^p(by)^{k-p}\\ &\sum_{p0}^k(C_{k}^pa^pb^{k-p})x^py^…

VS Code的golang開發配置 之 代碼提示

之前用VS Code的時候,發現自己的代碼的提示一直不好,換用JetBrain的Goland的代碼提示是好了,但是比較占用資源。在網上找了一些資料,發現很多人也是遇到第三方或者自己的代碼無法提示的情況,但是都沒有下文了。后來發現…

使用oprofile分析性能瓶頸

使用oprofile分析性能瓶頸 1. 概述oprofile 是 Linux 平臺上,類似 INTEL VTune 的一個功能強大的性能分析工具。其支持兩種采樣(sampling)方式:基于事件的采樣(event based)和基于時間的采樣(time based)。基于事件的采樣是oprofile只記錄特定事件&#…

什么是死鎖

死鎖是多個進程在運行過程中因競爭資源時產生的一種僵局。 各并發資源彼此等待對方擁有的資源,且在得到對方資源前不釋放自己的資源。

python數據工程師 面試題_阿里P7工程師耗時兩天整理的292道python大廠面試題,內含解析!...

前言相對于python大家應該都不會陌生吧!現在java跟python可以算的是勢均力敵了,所以現在學習python 的小伙伴也是越來越多了,可是學完之后就能找到稱心如意的工作了嗎?很多小伙伴學習Python的時候感覺很簡單,但是到了去…

數組復制

在Java里面,可以用復制語句”AB”給基本類型的數據傳遞值,但是如果A,B是兩個同類型的數組,復制就相當于將一個數組變量的引用傳遞給另一個數組;如果一個數組發生改變,那么引用同一數組的變量也要發生改變。 1.使用FOR循環,將數組的每個元素復…

IntelliJ IDEA 對于generated source的處理

IntelliJ IDEA 對于generated source的處理 學習了:https://stackoverflow.com/questions/5170620/unable-to-use-intellij-with-a-generated-sources-folder 如果有generated source ,例如使用gRPC過程中生成的,可以使用鼠標右鍵點擊使之成為…

產生死鎖的原因

一 競爭資源,但是資源的數目不能滿足進程的需要。 二 進程間推進順序非法,進程在運行過程中請求和釋放資源的順序不當。

fabric shim安裝合約_hyperledger fabric 開發第一個智能合約

一、編寫智能合約代碼HelloWorld.go,go語言實現,代碼很簡單,每個合約包含兩個方法,Init、Invoke。package mainimport ("fmt""github.com/hyperledger/fabric/core/chaincode/shim""github.com/hyperled…

不能干一輩子開發???

程序員的職業生涯之我見 總是聽到下面的論調 程序員干不了一輩子! 程序員怎么也不能干一輩子吧! 在中國程序員還能干一輩子? 過了(30)40我就干不動程序員了! 每每聽…

分布式緩存的25個優秀實踐與線上案例 done

楊彪,螞蟻金服技術專家,《分布式服務架構:原理、設計與實戰》和《可伸縮服務架構:框架與中間件》作者。近10年互聯網和游戲行業工作經驗。本文節選自即將出版的《可伸縮服務架構:框架與中間件》一書,作者&a…

服務器性能估算參考(硬件-應用服務器)

2019獨角獸企業重金招聘Python工程師標準>>> Environment(2013-05-24) two identical machines via a GB-Ethernet link a client machine generating HTTP requests with wrk as the load generator a server machine running the respective “benchmarkee”all …

產生死鎖的四個必要條件

(1)互斥條件:進程對所分配到的資源不允許其他進程進行訪問,若其他進程訪問該資源,只能等待,直至占有該資源的進程使用完成后釋放該資源 (2)請求和保持條件:進程獲得一定的…

下拉選擇_在管理Excel中實現聯動下拉選擇

在系統中常常出現這樣的情況:由于下拉選擇的數量太多了,難以高效選擇。為此管理Excel通過通過引入多級聯動選擇的方式來減少下拉選擇的困難度。先看下使用效果:聯動下拉選擇這個功能,在管理Excel中可以通過比較簡單的配置方法實現…

圖片預覽

// 預覽圖片yulanFn: function (e) {var arr [];var that this;//獲取當前圖片的下表var indexw e.currentTarget.dataset.indexw;var index e.currentTarget.dataset.index;//數據源var pictures this.data.banner[indexw].shoppingCarouselList;var picture "http…

風雨20年:我所積累的20條編程經驗

原文作者喬納森丹尼可(Jonathan Danylko)是一位自由職業的web架構師和程序員,編程經驗已超過20年,涉足領域有電子商務、生物技術、房地產、醫療、保險和公用事業。正如喬納 森在文中所言,本文適合剛畢業的大學生和剛入…