1. 程式人生 > >【彙編】 常用程式碼段 rep movsw/rep movsw

【彙編】 常用程式碼段 rep movsw/rep movsw

移動程式碼段:

rep movsw

              mov    ax,#BOOTSEG
             mov    ds,ax
             mov    ax,#INITSEG
             mov    es,ax
             mov    cx,#256
              sub    si,si
             sub    di,di
             cld
             rep
              movsw

              jmpi go,INITSEG
【linux中bootsection.s用這段程式碼完成moves itself out of theway to address Ox90000,and jumps there】

先說搬移字串。搬移字串指令有兩種,分別是 MOVSB MOVSW,先說 MOVSB。MOVSB 的英文是 move string byte,意思是搬移一個位元組,它是把 DS:SI 所指地址的一個位元組搬移到 ES:DI 所指的地址上,搬移後原來的內容不變,但是原來 ES:DI 所指的內容會被覆蓋而且在搬移之後 SI 和 DI 會自動的指向下一個要搬移的地址。

一般而言,通常程式設計師一般並不會只搬一個位元組,通常都會重複許多次,如果要重複的話,就得把重複次數 ( 也就是字串長度 ) 先記錄在 CX 暫存器,並且在 MOVSB 之前加上 REP 指令,REP 是重複 (repeat) 的意思。這種寫法很是奇怪,一般而言組合語言原始檔的每一行都只有一個指令,但 REP MOVSB 卻可以在同一行寫兩個指令,當然分開寫也是一樣的。

SUB (subtract)
指令的彙編格式:SUB dst,src
指令的基本功能:(dst)<-(dst)-(src)

重複執行串 REP
指令的彙編格式:REP (CX)=重複次數
指令的基本功能:① (CX)=0時,串指令執行完畢,否則執行② ~ ④
② (CX)←(CX)-1③ 執行串指令(MOVS或STOS)④ 重複執行①

串傳送 MOVSB / MOVSW (move string byte/word)
指令的彙編格式:MOVSB
MOVSW
指令的基本功能:(ES:DI)<-(DS:SI)
(SI)<-(SI)+/-1(位元組)或+/-2(字)
(DI)<-(DI)+/-1(位元組)或+/-2(字)
指令對條件碼的影響:不影響條件碼。
指令的特殊要求:源串必須在資料段中,目的串必須在附加段中,串處理指令隱含的定址方式是SI和DI暫存器的間接定址方式。源串允許使用段跨越字首來指定段

http://apps.hi.baidu.com/share/detail/32932237