彙編中的重複指令

2021-10-09 23:30:43 字數 1761 閱讀 9734

duprep是字串操作指令movs,cmps等的字首,在cx不等於0的情況下,對字串執行重複操作。

rep的重複次數也存在cx中,但是其實cx本身不具有讓cx-1的功能,一般是rep後面跟著的指令執行之後自動讓cx-1

還可以擴充套件出:

repe(相等時重複)、repne(不相等時重複)、repz(為零時重複)及 repnz(不為零時重複)

老師上課的時候說, rep有點類似於巨集。

loop指令的格式是:

loop 標號

cpu執行至loop指令的時候,要進行兩步操作

cx=cx-1

判斷cx的值,不是0就轉到標號處執行程式;如果為0就向下執行。

因此cx中的值是執行次數。

rep字首一次只能應用於一條字串指令。要重複指令塊,需要使用 loop 指令或其它迴圈結構。

迴圈次數都存在cx中;cx中的就是迴圈次數。

dup是資料定義偽指令,其實他跟前面兩個不太一樣,他是用來定義一塊記憶體區域,但是他也涉及到重複,因此把它們放在一起加以辨析。

dup是和db、dw、dd等資料定義偽指令配合使用的,用來進行資料的重複。

dup的使用格式如下:

db 重複的次數 dup(重複的位元組型資料)

dw 重複的次數 dup (重複的字型資料)

dd 重複的次數 dup (重複的雙字型資料)

如:db 3 dup (0)

定義了三個位元組,它們的值都是0,相當於db 0,0,0

像這兩個圖中

dest_buffer和source_buffer就是名字,代表了這段空間的首位址。

(?)表示初始值隨便。

參考定義緩衝區的詳細理解

在實際應用中,我們有時候會忽略名字,直接

stack segment

db 16 dup (0)

stack ends

這樣也是完全可以的。

還有乙個比較特別的例子

db 3 dup (

'abc','abc'

)

這條語句定義了18個位元組,它們是abcabcabcabcabcabc,相當於

db 'abcabcabcabcabcabc'
(這種做法也要留心,注意用的是單引號,就我目前的理解,我覺得這裡用單雙引號應該都可以的,但是書上用的是單引號)

對這條語句的解釋:

db:定義的是位元組型資料

3:重複的次數

(『abc』,『abc』):重複的是什麼

所以上面這條語句的意思就是定義位元組型資料,把abcabc重複三遍。

(因此就要注意了,你不能看見db 3,就說人家一定是定義了3個位元組)

定義緩衝區時也會用到dup語句

dat1 bd 20,?,20 dup(?)

dat1是名字

20是要定義的緩衝區的大小

第乙個?留給系統數你敲了幾下鍵,也可以不寫?,寫成0,1或其他任何數都可以。

兩個20必須保持一致,不能是20和21這樣。

更詳細的對dup的解釋參加王爽老師組合語言p171

彙編中的指令

跳轉指令用於實現程式流程的跳轉,在 arm 程式中有兩種方法可以實現程式流程的跳 1 使用專門的跳轉指令。2 直接向程式計數器 pc 寫入跳轉位址值。通過向程式計數器 pc 寫入跳轉位址值,可以實現在 4gb 的位址空間中的任意跳轉,在跳轉之前結合使用 mov lr pc 等類似指令,可以儲存下一條...

彙編中的操作指令

不太會搞,將就著看吧。說明 小括號裡是指令格式,後面是指令的功能,opd是目的運算元,ops是源運算元1 加法指令 add加法 add opd,ops opd opd ops adc帶進製加法 adc opd,ops opd opd ops cf inc加1 inc opd opd的內容加 opd可...

GNU ARM中的彙編指令 word

gnu arm中的彙編 指令.word 彙編中的標號通常情況下是用來標明程式段的起始位址的,如 start b reset ldr pc,undefined instruction ldr pc,software interrupt ldr pc,prefetch abort ldr pc,data...