王爽《彙編語言》綜合研究實驗5 (3)

實現一個簡單的printf函數,只需支持"%c、%d"即可

 

這邊先看一下C中printf函數的簡單例子的彙編代碼,這邊我們用綜合研究中所搭建的簡介C開發環境寫一個簡單的printf例子:

生成相應的printft.exe可執行文件,在cmd下用debug進行調試,得到對應的彙編指令如下:

printf函數本身的彙編指令太長,這邊我們重點放到printf函數和參數的確定和儲存還有傳遞關係,我們知道函數內部參數都是放入堆棧中,但是上面代碼中的MOV AX,0194是幹嘛用的呢,是不是爲了確定參數的個數呢,還是什麼,大家可以探討一下……

過了幾天……

現在明白MOV AX,0194的含義了,因爲我們在printf參數中,由一個參數定義爲char *,這個0194就是我們定義的char *字符串的相對於數據段的偏移地址。實在是對不起之前的同仁了,之前沒有把自己寫的printf函數放上去,是因爲還沒有寫出來,這次放上去請原諒:

這邊的代碼由一個問題是,如果,在一個程序中多次的調用printf的話,那麼之後的printf輸出來的數據就會覆蓋前面的數據,並且,我們默認是顯示在cmd模式下的第10行,第40列的,這邊因爲考慮的是跟彙編似乎沒有多大的關係,所以沒有在繼續完整下去,但是如果有興趣的閱覽者可以將代碼進行改善,給個建議:可以將showp定義成靜態的全局變量,只在調用printf的時候,showp進行自動的增加,可以如下 

歡迎指正批評請教…… 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章