iT邦幫忙

DAY 14
4

freedos bochs 16位元 組合語言…等系列 第 14

組合語言熱身:debug之D ,方向旗標(DF Direction Flag),CLD 和 STD

  • 分享至 

  • xImage
  •  

小木偶前輩的大作裏,這段用文字帶過,雖然也講得夠清楚了,
但覺得還是測一下,比較有踏實的感覺。
前輩寫到:

CLD 和 STD 指令

此外,還有一點,小木偶在上面沒有提到。事實上我們也可以使每搬移一次之後,使 SI﹑DI 遞減,也就是往低位址搬移。方法是由『方向旗標』控制( 有關方向旗標請參考附錄二旗標暫存器 )。

當方向旗標清除時 (即方向旗標為零),搬移方向是向高位址處,SI﹑DI 會遞增,同時您可以看到在 DEBUG 顯示旗標處會有『UP』的字樣,表示向高位址搬移。這是大部分的情況。

當方向旗標設定時 (即方向旗標為一),搬移方向是向低位址處,SI﹑DI 會遞減。到在 DEBUG 顯示旗標處會有『DN』的字樣。

最後,方向旗標清除的指令是 CLD,意思是 clear direction flag;設定的指令是 STD,意思是 set direction flag。

來自於http://home.educities.edu.tw/wanker742126/asm/ch12.html
試一下

-a
08FA:0100 std
08FA:0101

旗標8兄弟的狀態:
NV UP EI NG NZ NA PE NC
改變的狀態:
NV DN EI NG NZ NA PE NC

08FA:0101 cld

清掉方向旗標:
NV UP EI NG NZ NA PE NC
std(SET DF), 設定方向旗標,這時由UP->DN。
反之cld(Clear DF),清除方向旗標,這時由DN->UP。
兩個設定指令的介紹。
--------------------
寫一段測試碼,來試試。

C:\>debug
-a
08FA:0100 std
08FA:0101 mov cx,10
08FA:0104 mov si,210
08FA:0107 mov di,310
08FA:010A rep movsb
08FA:010C
-a 200
08FA:0200 db "Tim learn assembly"
08FA:0212

當方向旗標為反相時,DN
SI=0210 DI=0310
SI=020F DI=030F
SI=020D DI=030D
單步執行,SI/DI呈現,遞減,
-d cs:300 l10
08FA:0300 59 68 30 05 E8 A8 D0 59-0B C0 74 73 73 65 6D 62 Yh0....Y..tssemb
DUMP記憶體,看得出字串呈現,
所謂高位址往低位址搬移

小結:
反向,如果是陣列,我們用索引,+1,+2,+3,就有正方向的效果,反之索引,-1,-2,-3,就有反方向的效果,好像for(i=10,i--,i>=0)這類的迴圈。
而CPU提供方向旗標來配合指令來達到正/反向的效果。

題外話:今天本來想寫BP,基底位址指標暫存器,原理雖懂,但不容易做成一段小程式來驗証,花了不少時間,之後要用一小段C語言,反組譯後,來看main和函數間呼叫傳遞參數時,
用組語的實作方式。因為小木偶前輩是在32位元組語時,對BP有較詳盡的解說,只是呼叫的是win32API, 和特定平台相依性過高,且程式太複雜,又用soft-ice來反組譯,實在太…艱深了,
只是要講
BP,基底位址指標暫存器,
,想用Hello World的程度來解釋即可,大概再一週後會實作到。


上一篇
組合語言熱身:debug之C ,字串,SI,DI
下一篇
組合語言熱身:debug之E ,CMPSB 和 CMPSW ,字串的比較及ZF零旗標。
系列文
freedos bochs 16位元 組合語言…等17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
timloo
iT邦研究生 2 級 ‧ 2012-10-07 21:13:13

董事長最近在增資前,
開了一場員工大會,
他講到,經濟可以輸韓國,政府可以輸韓國,手機可以輸韓國,但企業經營不能輸韓國。
和郭總裁的思路如出一途。面板被他們抓耙子整慘了。友達比奇美更慘,為什麼國家不出面??

最近一期商周報導,發現韓國企業對英文能力的要求,托益(TOEIC)800分,
知道,韓國人真得很賤,即使國際賽,愛國裁判,青棒用手肘觸擊犯規,一堆下三濫小動作。

如果仇韓,可以提升國民能力的話,其實不錯。但其他負面的@#¥,就不用了

仍舊討厭三星的手機,平板。但是人家行銷手法及軟體設計,的確有過人之處。

看更多先前的回應...收起先前的回應...
ted99tw iT邦高手 1 級 ‧ 2012-10-07 23:29:52 檢舉

經濟可以輸韓國,政府可以輸韓國,手機可以輸韓國,但企業經營不能輸韓國。

我還以為是什麼都可以輸韓國.......但“組語”不能輸...無言

真是的,是我太融入Tim大的劇情了.....臉紅

echen688 iT邦高手 1 級 ‧ 2012-10-08 00:06:36 檢舉

timloo提到:
為什麼國家不出面??

為什麼國家要出面 ??

賺了算自己的, 虧了馬上要國家救、要員工共體時艱, 有些企業實在是又沒骨氣又不爭氣..... 翻桌

外獅佬 iT邦大師 1 級 ‧ 2012-10-08 01:38:00 檢舉

反過來想...如果三星出了什麼事...韓國的處境肯定比希臘更慘..
台灣是以中小企業為主的經濟體...死了個HTC...大不了上萬人失業...(誰都不願見到這種狀況就是了...)
韓國...如果死了個三星或樂金.....那恐怕失業的人口...是以幾十萬計算的....
所以..救DRAM??救幹嘛??總是會有人接手...
救HTC?說真的...我買了HTC唯一一台平板....我非常後悔...要贏人家,拿出點實力...
台灣政府為什麼要救HTC?怎麼不救救一碗小羊肉?人家的員工不是人啊??

外獅佬 iT邦大師 1 級 ‧ 2012-10-08 01:40:24 檢舉

撇開民族議題...三星的產品,比宏達電的品質好...那是大家都看得到的...
產品品質...又不是政府救得到的...

echen688 iT邦高手 1 級 ‧ 2012-10-08 05:05:53 檢舉

wiselou提到:
救DRAM??救幹嘛??

台灣 DRAM 產業整合的不成功, 其實就是各家「寧為雞首, 不為牛後」的心理在作怪......爆氣

我要留言

立即登入留言