串操作指令

2021-08-20 10:36:31 字數 1155 閱讀 2375

指令:                                          

movsb, movsw, movsd

描述:

移動字串資料,複製由esi暫存器定址的記憶體位址處的資料至edi定址的記憶體位址處。

在保護模式程式中,也就是我們80386預設的啟動模式,esi自動作為由ds定址的段內偏移,edi自動作為由es定址的段內偏移,es和ds總是具有同樣的值且無法改變它們。(

在實位址模式(8086)模式下es和ds是我們程式設計師操縱的)。

我們來看這三個指令:movsb, movsw, movsd   ,我們可以發現它們就最後乙個字母不同,其實最後乙個字母也就表示的是我們每次移動的資料位元組大小。第乙個movsb是每次乙個位元組,其次是乙個字、接著乙個雙字。 我們從它的'b','w','d'就可以看出來。 b代表byte,w代表word, d代表dword。

上面這3個字串操作指令本身每次只能處理乙個或一對值,但如果增加乙個重複字首,指令就會使用ecx暫存器作為計數器進行重複。重複字首可以僅用一條指令處理整個陣列。

重複字首rep : 當ecx>0時重複 (和我們的loop迴圈相似)。

看了上面的理論,我們來個演示吧。

cld   ;方向標誌

mov   esi, 記憶體位址1     ;(也就是存放字串的記憶體位址)

mov   edi, 記憶體位址2     ;(要移動到目的處的位址)

mov   ecx, 要移動的數量 ;

rep   movsb 

mov ax,1000

mov ds,ax

mov ax,2000

mov es,ax

mov si,10a0

mov di,10b0

mov cx,64

cldrep movsb

cld是來控制重複移動時候的esi 和edi的遞增方式。 cld是將方向標誌位df設定為0,每次rep迴圈的時候,esi和edi自動+1。   std是將方向標誌位df設定為1,每次rep迴圈的時候,esi和edi自動-1。

rep迴圈字首在執行迴圈的時候,ecx暫存器是每次減1的。和我們的loop迴圈一樣。

我們在進行字串操作時,

千萬要記住要首先設定方向標誌,否則會發生不可預料的結果。

8086串操作指令

1.串傳送指令movs 常與無條件重複字首rep連用 movs 運算元1 運算元2 movsb movsw 2.串比較指令cmps 常與條件重複字首repe repz 或repne repnz 連用 cmps 運算元1 運算元2 cmpsb cmpsw repe repz cx 0且zf 1時繼續迴...

串操作指令2

組合語言 微機原理 8086 1.movs multi segment executable file template.data segment add your data here pkey db press any key.str1 db howbin str2 db 6 dup 0 ends...

8086彙編指令大全 串操作型別

型別 彙編指令格式 功 能運算元說明 時鐘週期數 位元組數串 操 作 類 movsb movsw di si si si 1,di di 1 di si si si 2,di di 2 不重複 18 重複 9 17 rep 不重複 18 重複 9 17 rep 1 1stosb stosw di a...