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

2021-05-26 07:01:59 字數 684 閱讀 1720

實現乙個簡單的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進行自動的增加,可以如下

歡迎指正批評請教……

組合語言 《組合語言》王爽 實驗一

從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...

組合語言 王爽 實驗4

這學期在學彙編,沒怎麼自己動手程式設計過,結果到了中期編不出程式來,實在太尷尬了 特此來補各個實驗。4 11 0 200 0 20b 為什麼等同於 0020 0 0020b?0 200 0x16h 200 00200h 所以拆分成不同的形式即可轉換 assume cs code code segme...

《組合語言》 王爽 實驗11

題 編寫乙個子程式,將包含任意字元,以0結尾的字串中的小寫字母轉變成大寫字母,描述如下。名稱 letterc 功能 將以0結尾的字串中的小寫字母轉變成大寫字母。引數 ds si指向字串首位址。如題,任意字元,就得考慮一些其他字元,這就需要劃分乙個範圍,就是取出的字元應該在小寫字母的ascii碼範圍內...