2017-2018-1 20155320第六週課堂實踐總結

2017-2018-1 20155320第六週課堂實踐總結

完善了一些課上交了但不夠完善的測試並補交了課上沒有完成的測試html

第六週課上測試-2-ch02

  1. 調用附圖代碼,編寫一個程序 「week0602學號.c",用show_int(), show_float()打印一下你的4位學號,參考教材P33打印出匹配的位序列。sass

  2. 提交運行結果截圖,要全屏,要包含本身的學號信息函數

3.*************課下把代碼推送到代碼託管平臺**************學習

  1. 參考教材p82,給出出匹配的位序列的推導過程

分析

經過學習課本P33與P82的代碼及練習,我輸入學號信息5320,依據輸出獲得的int 和 float型結果,將其轉換爲2進制,分析以下:
測試

第六週課上測試-3-ch02

課上交的太慌了,交錯了截圖,如下爲正確的截圖.net

  1. 編寫一個程序 「week0603學號.c",運行下面代碼:

1    short int v = -學號後四位3d

2   unsigned short uv = (unsigned short) v調試

3  printf("v = %d,  uv = %u\n ", v, uv);code

  1. 在第三行設置斷點用gdb調試,用p /x v; p /x uv 查看變量的值,提交調試結果截圖,要全屏,要包含本身的學號信息

3 分析p /x v; p /x uv 與程序運行結果的不一樣和聯繫htm

分析

經過學習博客,對gdb內容進行了一下總結:

1.條件斷點:b fxx(函數名)

2.條件斷點:b 12 if i=5000

行斷點:b 行號
4.臨時斷點:tb 行號

5.還能夠經過p 變量在調試過程當中來查看變量的值

p/x xx 是用16進制查看,首先b 5 設置行斷點,而後r 運行至行斷點,使用p/x 查看v、uv的值。結果與運行出來的結果比較截圖以下

不一樣:可看出用p/x查看獲得的v和uv值是同樣的,而直接運行獲得的結果v=-5320,uv=60216

聯繫:
在書中P49頁有提到產生這種緣由的解釋,將short強制類型轉換爲unsigned short 改變數值,可是不改變位的表示,因此16進制查看時v與uv的結果相同,可是運行出來的結果不一樣。

第六週課上測試-4-ch03

1 經過輸入gcc -S -o main.s main.c 將下面c程序」week0603學號.c「編譯成彙編代碼

int g(int x){
   return x+3;
}
int f(int x){
    int i = 學號後兩位;
   return g(x)+i;
}
int main(void){
   return f(8)+1;
}
  1. 刪除彙編代碼中 . 開關的代碼,提交f 函數的彙編代碼截圖,圖中用矩形標出函數棧幀的造成和銷燬的代碼

    分析:

    我學習了一下課本3.7章的內容,並查閱了博客函數棧幀的建立與銷燬獲得以下圖所示結果:

第六週課上測試-5-ch03

1 經過輸入gcc -S -o main.s main.c 將下面c程序」week0603學號.c「編譯成彙編代碼

int g(int x){
   return x+3;
}
int f(int x){
    int i = 學號後兩位;
   return g(x)+i;
}
int main(void){
   return f(8)+1;
}
  1. 參考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟蹤彙編代碼,在紙上畫出f中每一條語句引發的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和棧的變化狀況。提交照片,要有學號信息。

    分析

    參考博客GDB調試彙編堆棧過程分析

1.輸入disassemble 調出對應的彙編代碼,disassemble指令獲取彙編代碼,用i(info) r(registers)指令查看各寄存器的值

2.並重復si-->i r-->x/a 寄存器(地址)

disassemble指令獲取彙編代碼,用i(info) r(registers)指令查看各寄存器的值

3.通過分析獲得以下變化狀況

. 完成教材 p97 2.96 2.97,要有完備的測試

2.96 編寫的函數float_f2i(float_bits f);是用來實現float型轉換爲int型

測試結果爲:

2.97

目前還不會,和同窗們討論了一下仍然沒法理解,但願老師講解一下

相關文章
相關標籤/搜索