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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



指令用來確定“做什么”和“怎樣做”,數據是“做”的時候需要原始數。


計算機可以從時間和空間兩方面來區分指令和數據,在時間上,取指周期從內存中取出的是指令,而執行周期從內存取出或往內存中寫入的是數據,在空間上,從內存中取出指令送控制器,而執行周期從內存從取的數據送運算器、往內存寫入的數據也是來自于運算器。

比如:要計算機做1+2=?中,“+”表示要做什么和怎樣做,1和2則是做的時候需要的原始數。現在假設某CPU中,“+”用二進制“00000001”來表示,“1、2”分別用“00000001、00000010”來表示。那么,這段程序存入內存中就是這樣的:
XXXX1:00000001
XXXX2:00000001
XXXX3:00000010 前面的XXXX1 XXXX2
XXXX3表示內存的地址
? 從上面可以看出,“+”指令和被加數是完全相同的,當然,這是我故意這樣假設的,但是,在實際情況中,這種情況是大量存在的。在正常情況下,CPU只能把XXXX1內存中的00000001作為指令,XXXX2內存中的00000001作為被加數才能得到正確的結果。那么CPU如何才能做到不把第二個00000001也當成“+”呢?
? 1.人們把內存的某個地址規定為起始地址(又稱為復位地址),也就是說,當計算機開機或者被強行復位(也就是機箱上那個重啟動按鈕按下的的時候),CPU立即跳轉到這個地址中,并且把它里面的代碼作為指令來執行,同時根據這個指令的長度和格式判斷下一條指令在什么地方。
? 對于X86系列CPU(也就是現在人們常用的什么奔XX、賽XX系列),它的復位地址是FFFF0,如果表示成邏輯地址則是:FFFF:0000。對DEBUG比較熟悉的朋友或者會在一些高級語言中嵌入匯編語言的朋友可以這樣做一個試驗:
? 用DEBUG執行一條指令(這是一條無條件跳轉指令):jmp
FFFF:0000,或者在高級語言中嵌入這條匯編指令,執行后,你就會發現,計算機重新啟動了。其實,用程序控制計算機重啟的最本質的操作就是這樣的。
? 2.給各種指令規定了相應的長度和格式。比如:某數+某數這條指令就規定:這條指令的長度是3個字節,其中第一個字節表示“+”,后面兩個字節表示被加數和加數。于是,當CPU到達這個指令后,就自動把第一個代碼作為指令,后面兩個代碼作為數據,依次類推,第4個代碼就必然是指令.....

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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