日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言MIPS指令翻译成机器码,计算机指令

發布時間:2024/3/26 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言MIPS指令翻译成机器码,计算机指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在軟硬件接口中,CPU幫我們做了什么?

從硬件角度來看,?CPU就是一個超大規模集成電路,通過電路實現了加法,乘法乃至各種各樣的處理邏輯。

從軟加工程師的角度來講,CPU就是一個執行各種計算機指令(Instruction?Code)的邏輯機器。這里的計算機指令,就好比一門CPU能夠聽懂的語言,我們把它叫做機器語言(Machine?Language)

不同的CPU能夠聽懂的語言不太一樣。比如我們個人電腦用的Intel的CPU,蘋果手機用的是ARM的CPU。類似這樣兩種CPU各自支持的語言,就是兩組不同的計算機指令集(Instruction?set)

一個計算機程序,不可能只有一條指令,而是由成千上萬條指令組成的。但是CPU里不能一直放著所有指令,所以計算機程序平時是存儲在存儲器中的。這種指令存儲在存儲器里面的計算機,我們就叫做存儲程序型計算機

從編譯到匯編,代碼怎么變成機器碼?

//test.c

intmain()

{int a = 1;int b = 2;

a= a +b;

}

要讓這段程序在一個Linux操作系統上跑起來,我們需要把整個程序翻譯成一個匯編語言(ASM,Assembly?Language)的程序,這個過程我們一般叫編譯(Compile)成好匯編代碼。

針對匯編代碼,我們可以再用匯編器(Assembler)翻譯成機器碼(Machine?Code)。這些機器碼由“0”和“1”組成的機器語言表示。這一條條機器碼,就是一條條的計算機指令。這樣一串串的16進制數字,就是我們CPU能夠真正認識的計算機指令

在一個Linux操作系統上,我們可以簡單地使用gcc和objdump這樣兩條命令,把對應的匯編代碼和機器碼都打印出來。

[learning_log@localhost 桌面]$ gcc -g -c text.c

[learning_log@localhost 桌面]$ objdump-d -M intel -S text.o

text.o: 文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 :intmain()

{0: 55push rbp1: 48 89e5 mov rbp,rspint a = 1;4: c7 45 fc 01 00 00 00 mov DWORD PTR [rbp-0x4],0x1

int b = 2;

b: c745 f8 02 00 00 00 mov DWORD PTR [rbp-0x8],0x2a= a +b;12: 8b 45 f8 mov eax,DWORD PTR [rbp-0x8]15: 01 45 fc add DWORD PTR [rbp-0x4],eax

}18: 5d pop rbp19: c3 ret

可以看到左側一堆數字,這些就是一條條機器碼;右邊有一系列的push、mov、add、pop等,這些就是對應的匯編代碼。一行C語言代碼,有時候對應一條機器碼和匯編代碼,有時候則是對應兩條機器碼和匯編代碼。匯編代碼和機器碼之間是一一對應的。

從高級語言到匯編代碼,再到機器碼,就是一個日常開發程序,最終變成了CPU可以執行的計算機指令的過程。

解析指令和機器碼

常見的指令可以分為五大類。

第一類是算術類指令。我們的加減乘除,在CPU層面,都會變成一條條算術類指令。

第二類是數據傳輸類指令。給變量賦值,在內存里讀寫數據,用的都是數據傳輸類指令。

第三類是邏輯類指令。邏輯上的與或非,都是這一類指令。

第四類是條件分支類指令。日常我們寫的“if/else”,其實都是條件分支類指令。

最后一類是無條件跳轉指令。寫一些大一點的程序,我們常常需要寫一些函數或者方法。再調用函數的時候,其實就是發起了一個無條件跳轉指令。

我們說過,不同的CPU有不同的指令集,也就對應著不同的匯編語言和不同的機器碼。為了方便你快速理解這個機器碼的計算方式,我們選用最簡單的MIPS指令集,來看機器碼是如何生成的。

MIPS的指令是一個32位的整數,高6位叫操作碼(Opcode),也就是代表這條指令具體是一條什么樣的指令,剩下的26位有三種格式,分別是R、I、J。

R指令是一般用來做算術和邏輯操作,里面有讀取和寫入數據的寄存器的地址。如果是邏輯位移操作,后面還有位移操作的位移量,而最后的功能碼,則是在前面的操作碼不夠的時候,擴展操作碼表示對應的具體指令的。

I指令,則通常是用來數據傳輸,條件分支,以及在運算的時候使用的并非變量還是常數的時候。這個時候,沒有了位移量和操作碼,也沒有了第三個寄存器,而是把這三部分直接合并成一個地址值或者常數。

J指令就是一個跳轉指令,高6位之外的26位都是一個跳轉后的地址。

add $t0,$s2,$s1

對應的MIPS指令里的opcode是0,rs代表第一個寄存器s1的地址是17,rt代表第二個寄存器s2的地址是18,rd代表目標的臨時寄存器t0的地址,是8。因為不是位移操作,所以位移量是0.把這些數字拼在一起,就變成了一個MIPS的加法指令。

為了讀起來方便,我們一般把對應的二進制數,用16進制表示,也就是0X02324020。這個數字也就是這條指令對應的機器碼。

如果想要對日常使用的Intel?CPU的指令集有所了解,可以參看《計算機組成與設計:軟/硬件借口》第5版的2.17小節。

總結

以上是生活随笔為你收集整理的C语言MIPS指令翻译成机器码,计算机指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九热这里都是精品 | 亚洲性自拍| 一区二区三区四区在线 | av女大全列表 | 日日日网站| 亚洲一区综合 | 亚洲国产精品一区二区三区 | 992tv在线影院 | 国产色悠悠 | 依依成人综合网 | 日本性高潮视频 | 久久精品久久99 | 欧美在线xxxx | 国产精品国产三级国产专播品爱网 | 2024av视频 | www,jizz,com| 美女网站在线看 | 中文字幕第一页亚洲 | 91九色视频 | 黄色片aa| www.亚洲一区二区三区 | 美女又黄又免费的视频 | 五月婷婷色丁香 | 国产熟妇一区二区三区四区 | 成人一卡二卡 | 色播视频在线观看 | 最新中文字幕一区 | 偷拍青青草 | 亚洲少妇30p | 一二三av | 色先锋资源网 | 在线观看免费视频一区 | 中文在线www | 公侵犯人妻中文字慕一区二区 | 欧美aaaaaaa| 国产三级a | 欧美大片免费播放器 | 亚洲视频一区在线观看 | 高贵麻麻被调教成玩物 | 无码成人精品区在线观看 | 粗大黑人巨茎大战欧美成人免费看 | 欧美a级片在线观看 | 天堂а在线中文在线新版 | 黄色a∨ | c逼视频 | 亚洲免费视频一区二区三区 | 女人下面无遮挡 | 天天舔日日操 | 国产精品自拍区 | 国产精品美女久久久久av爽 | 久久99精品久久久久久三级 | 国产精品无码99re | 成人app在线 | 精品国产自在精品国产精小说 | 一区二区成人av | 亚洲av无码一区二区三区人妖 | 一呦二呦三呦精品网站 | 九一在线观看免费高清视频 | 日本福利视频导航 | 骚色综合 | jzjzjzjzj亚洲成熟少妇 | 亚洲深夜视频 | 操操插插 | 欧美69影院 | 一级肉体全黄裸片中国 | 一区二区在线观看av | 亚洲射吧| 少妇又色又爽又黄的视频 | 久久草精品| 久久全国免费视频 | 黄色av播放 | 香蕉视频成人在线观看 | 国产精品伦理 | 在线欧美成人 | 成人免费看片'在线观看 | 91精品人妻互换一区二区 | 欧美不在线 | 日韩中文字幕精品 | 天堂中文资源在线观看 | 女同激情久久av久久 | 亚洲aⅴ | 521a人成v香蕉网站 | 波多野结衣一区二区 | 伊人伊人伊人伊人 | 波多野结衣中文在线 | 一区二区三区免费在线观看 | 欧美第一页浮力影院 | 亚洲视频在线一区二区 | 亚洲成人国产 | 龚玥菲三级露全乳视频 | 天天草比 | 久久国内精品视频 | 美女一级黄色片 | 一区二区在线免费观看视频 | 天堂亚洲精品 | 精品少妇一区二区三区 | 韩日三级视频 | 亚洲熟女少妇一区 | 国产做爰免费观看视频 |