版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《計算機系統》程序的機器級表示《計算機系統》課程教學組2025年春季學期從C代碼到機器代碼數據傳送與尋址方式算術操作010203內容提要程序執行CPUPC:程序計數器下一條指令的地址記為“EIP”(IA32)or“RIP”(x86-64)寄存器文件一組寄存器Conditioncodes條件碼是CPU根據運算結果由硬件設置的位,體現當前指令執行結果的各種狀態信息是程序分支和程序循環的依據內存代碼數據棧地址數據指令CPUPC寄存器文件條件碼Conditioncodes條件碼是CPU根據運算結果由硬件設置的位,體現當前指令執行結果的各種狀態信息是程序分支和程序循環的依據內存字節數組代碼與用戶數據支持過程的棧從C到目標代碼texttextbinarybinaryCompiler(gcc-S)Assembler(gccoras)Linker(gccorld)Cprogram(p1.cp2.c)Asmprogram(p1.sp2.s)Objectprogram(p1.op2.o)Executableprogram(p)Staticlibraries(.a)兩個源代碼文件p1.c
和p2.c,通過編譯指令
gcc–O1p1.cp2.c-op進行編譯,使用最基本的代碼優化(-O1),二進制代碼文件p。編譯系統編譯系統將高級語言變成機器指令不僅僅是翻譯,還有語法檢查、優化、鏈接等等編譯系統的重要性不亞于操作系統中國獨立自主的高性能編譯系統神威“太湖之光”超級計算機申威64指令集、神威睿智編譯器極其工具鏈、神威睿思操作系統……中國超算憑借獨立成果多次占據世界超算榜首。中國獨立自主的桌面操作系統
廖湘科院士
陳左寧院士
倪光南院士匯編代碼CCodeintsum(intx,inty){intt=x+y;returnt;}GeneratedIA32Assemblysum: pushl%ebp movl%esp,%ebp movl12(%ebp),%eax addl8(%ebp),%eax popl%ebp ret某些編譯器使用指令“leave”來打包出棧指令機器代碼CCode兩個有符號整數相加匯編將兩個4字節整數相加有符號或無符號都是同一指令操作數:y:
寄存器
%eaxx:
內存
M[%ebp+8]t:
寄存器
%eax返回值保存在
%eax目標代碼3-字節指令保存在地址
0x80483caintt=x+y;Addl8(%ebp),%eax0x80483ca:034508相似表達式:
x+=y更精確的表達:inteax;int*ebp;eax+=ebp[8]目標代碼Codeforsum0x401040<sum>:0x550x890xe50x8b0x450x0c0x030x450x080x5d0xc3匯編器將.s文件轉成.o文件每條指令都編碼不同文件之間的聯系沒有體現鏈接解決文件之間的引用關系與靜態鏈接庫整合e.g.,codeformalloc,printf有些庫是動態鏈接的(
dynamicallylinked)當程序開始執行時才鏈接一共有11個字節每條指令占1,2,or3個字節起始地址在0x0401040使用命令:gcc–O1-ccode.c–ocode.o得到文件:code.o目標代碼code.o起始地址是動態分配的反匯編0x401040<sum>:0x401040:55push%ebp0x401041:89e5mov%esp,%ebp0x401043:8b450cmov0xc(%ebp),%eax0x401046:034508add0x8(%ebp),%eax0x401049:5dpop%ebp0x40104a:c3ret反匯編器(Disassembler):將目標代碼編譯回匯編代碼objdump–dcode.o分析目標代碼時的有效工具反匯編另一種反匯編方式0x401040:0x550x890xe50x8b0x450x0c0x030x450x080x5d0xc3目標代碼使用GDBgdbpdisassemblesumx/11xbsum查看從sum函數地址開始的11個字節Dumpofassemblercodeforfunctionsum:0x080483c4<sum+0>:push%ebp0x080483c5<sum+1>:mov%esp,%ebp0x080483c7<sum+3>:mov0xc(%ebp),%eax0x080483ca<sum+6>:add0x8(%ebp),%eax0x080483cd<sum+9>:pop%ebp0x080483ce<sum+10>:rettest.s與反匯編代碼gcc-Etest.c-otest.igcc-Stest.i-otest.s
orgcc–Stest.c–otest.s
add:pushl %ebpmovl %esp,%ebpsubl $16,%espmovl 12(%ebp),%eaxmovl 8(%ebp),%edxleal (%edx,%eax),%eaxmovl %eax,-4(%ebp)movl -4(%ebp),%eaxleaverettest.s00000000<add>:0:55 push%ebp1:89e5 mov%esp,%ebp3:83ec10sub$0x10,%esp6:8b450cmov0xc(%ebp),%eax9:8b5508mov0x8(%ebp),%edxc:8d0402lea(%edx,%eax,1),%eaxf:8945fcmov%eax,-0x4(%ebp)12:8b45fcmov-0x4(%ebp),%eax15:c9leave16:c3ret位移量機器指令匯編指令反匯編目標代碼的結果兩種目標文件反匯編對比objdump–dtest.o反匯編test.o文件內存地址機器指令匯編指令objdump–dtest反匯編可執行目標文件“test”00000000<add>:0:55push%ebp1:89e5mov%esp,%ebp3:83ec10sub$0x10,%esp6:8b450cmov0xc(%ebp),%eax9:8b5508mov0x8(%ebp),%edxc:8d0402lea(%edx,%eax,1),%eaxf:8945fcmov%eax,-0x4(%ebp)12:8b45fcmov-0x4(%ebp),%eax15:c9leave16:c3ret080483d4<add>:80483d4:55push...80483d5:89e5…80483d7:83ec10…80483da:8b450c…80483dd:8b5508…80483e0:8d0402…80483e3:8945fc…80483e6:8b45fc…80483e9:c9…80483ea:c3ret課堂思考從目標文件到可執行目標文件,主要的變化有哪些??從C代碼到機器代碼數據傳送與尋址方式算術操作010203內容提要基本數據類型“整數”1,2,4,8bytes數據值地址(untypedpointers)—認真學習課程中心關于指針的講課視頻!浮點數4,8,or10bytes單精度(float:4bytes)雙精度(double:8bytes)長雙精度(longdoubleorextended:10bytes)數組與結構內存中一組連續分配的字節基本操作對寄存器或內存數據進行操作的運算類指令在內存與寄存器中之間傳送數據的傳送類指令將數據從內存加載到寄存器中將寄存器數據保存到內存中決定程序走向的控制類指令無條件/有條件跳轉分支/循環IA32寄存器%eax%ecx%edx%ebx%esi%edi%esp%ebp%ax%cx%dx%bx%si%di%sp%bp%ah%ch%dh%bh%al%cl%dl%bl16-bit虛擬寄存器(為了向下兼容)通用寄存器accumulatecounterdatabasesourceindexdestinationindexstackpointerbasepointerOrigin(mostlyobsolete)傳送數據IA32MOV指令movlSource,Dest:操作數類型Immediate:立即數
例:$0x400,$-533占用1,2,or4字節Register:8個整數寄存器之一例:%eax,%edx
%esp與%ebp保留作為特殊用途其他通用寄存器可能會在某些操作時有特定用途Memory:
內存地址簡單例子:(%eax)有非常多的尋址模式%eax%ecx%edx%ebx%esi%edi%esp%ebp操作數組合沒有內存到內存的數據傳送指令movlImmRegMemRegMemRegMemRegSourceDestCAnalogmovl$0x4,%eaxtemp=0x4;movl$-147,(%eax)*p=-147;movl%eax,%edxtemp2=temp1;movl%eax,(%edx)*p=temp;movl(%eax),%edxtemp=*p;Src,Destpush與pop數據為int匯編格式區別:(1)Intel格式的指令助記符省略了指示數據大小的后綴;(2)Intel格式省略了寄存器名字前的%;(3)Intel格式指令中,源操作數在右邊,目的操作數在左邊。(與ATT正好相反)ATT格式 Intel格式movl(%ecx),%eax moveax,[ecx]movl(%ecx),%eaxmovl8(%ebp),%edx寄存器間接尋址(R) Mem[Reg[R]]寄存器R中存放了內存地址基址變址尋址D(R)Mem[Reg[R]+D]寄存器R中存放了內存的起始地址常數D給出了偏移量內存尋址內存尋址
Imm:常數1,2,or4bytes(偏移量)Eb
:基址寄存器Ei
:變址寄存器(不要用
%esp)S
:比例因子1,2,4,or8(whythesenumbers?)內存尋址%edx0xf000%ecx0x0100ExpressionAddressComputationAddress0x8(%edx)0xf000+0x80xf008(%edx,%ecx)0xf000+0x1000xf100(%edx,%ecx,4)0xf000+4*0x1000xf4000x80(,%edx,2)2*0xf000+0x800x1e080地址計算舉例格式:lealSrc,DestSrc:地址計算表達式Src的結果保存在Dest中用途:計算內存地址值本身(不取內存里的值)e.g.,translationofp=&x[i];計算諸如x+k*y表達式的值k=1,2,4,or8舉例lea尋址LEAintmul12(intx){returnx*12;}leal(%eax,%eax,2),%eax;t<-x+x*2sall$2,%eax;returnt<<2課堂習題1參看下圖的寄存器信息和存儲器信息,若操作數為0xF4(,%edx,4),則該尋址方式獲得的值為:0XAB0X130XFF表中無正確值從C代碼到機器代碼數據傳送與尋址方式算術操作010203內容提要算術操作指令雙操作數指令:
格式
計算addl
Src,Dest Dest=Dest+Srcsubl
Src,Dest Dest=Dest-Srcimull
Src,Dest Dest=Dest*Srcsall
Src,Dest Dest=Dest<<Src(Arithmetic)shll
Src,Dest Dest=Dest<<Src(Logical)sarl
Src,Dest Dest=Dest>>Src(Arithmetic)shrl
Src,Dest Dest=Dest>>Src(Logical)xorl
Src,Dest Dest=Dest^Srcandl
Src,Dest Dest=Dest&Srcorl
Src,Dest Dest=Dest|Src
注意操作數的順序!算術操作指令單操作數指令:
格式
計算inclDest
Dest=Dest+1declDest
Dest=Dest-1neglDest
Dest=-Dest (取補=各位取反后+1)notlDest
Dest=~Dest (取反=各位取反)
算術指令示例intarith(intx,inty,intz){intt1=x+y;intt2=z+t1;intt3=x+4;intt4=y*48;intt5=t3+t4;intrval=t2*t5;returnrval;}arith:pushl %ebpmovl %esp,%ebpmovl 8(%ebp),%ecxmovl 12(%ebp),%edxleal (%edx,%edx,2),%eaxsall $4,%eaxleal 4(%ecx,%eax),%eaxaddl %ecx,%edxaddl 16(%ebp),%edximull %edx,%eaxpopl %ebpretSetUpBodyFinish算術運算intarith(intx,inty,intz){intt1=x+y;intt2=z+t1;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級歷史下冊期末復習:解題指導、常考題專項50練(原卷版)
- 肝臟相關選擇題及答案解析
- 央企中層崗位競聘題目及答案解析
- 醫學檢驗練習題及答案生成途徑
- 內勤試用期轉正工作總結
- 2025屆云南省昆明市呈貢縣數學四年級下學期期末監測模擬試題含答案解析
- 2025屆九江市永修縣三年級數學第二學期期中預測試題含答案
- 2025屆烏拉特前旗數學三下期中監測模擬試題(含答案解析)
- 基礎試題a及答案
- 交往藝術試題及答案
- 2025至2030中國智能無人船行業市場發展分析及競爭態勢與產業運行態勢及投資規劃深度研究報告
- 2025年淮南市潘集區公開招聘社區“兩委”后備干部10名備考考試題庫附答案解析
- 太空探索與航天科技:初中物理科普教學教案
- 豁免源管理辦法
- 《建筑施工技術》課件
- 《淀粉樣變心肌病》課件
- 安全保衛組織架構及職責描述
- 急診常見中毒的急救與護理
- 醫院培訓課件:《靜脈留置針的應用及維護》
- 烷烴的說課稿
- 商城物業服務合同模板
評論
0/150
提交評論