|
=============== JVM ================
nop 不做事情,但要占用時(shí)間
JVM 是基于堆棧的,所以提供很多棧指令
pop2: 從堆棧pop 2個(gè)字
swap: 交換棧兩個(gè)字等等
指令應(yīng)該是固定長度 1個(gè)字
http://yinwufeng.iteye.com/blog/757565
方法調(diào)用
壓棧后調(diào)用
getstatic java/lang/System/out Ljava/io/PrintStream // 相當(dāng)于傳遞 this
ldc "This is a sample program"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
NaN
IEEE 754 允許用特殊的位模式來表示不是一個(gè)數(shù)
IEEE 754中,用指數(shù)部分全一、小數(shù)部分非零表示NaN。以32位 IEEE 單精度浮點(diǎn)數(shù)的NaN為例,按位表示即:S111 1111 1AXX XXXX XXXX XXXX XXXX XXXX,S為符號(hào)位、A表示NaN的類型。如果 A = 1,則該數(shù)是quiet NaN;如果A為零、其余X部分非零,則是signaling NaN
http://zh.wikipedia.org/wiki/NaN
goto
goto 指令后整數(shù)是 offset, 跳的位置是 PC + offset
goto 跟的2個(gè)直接,就是前后可以跳 32k的offset
=============== 實(shí)際計(jì)算機(jī) ================
分時(shí)工作方式 在程序停止的任意處把與程序相關(guān)的信息 ( 棧,局部變量,當(dāng)前 PC等) 拷貝到主存;并加載另一個(gè)程序相關(guān)信息并運(yùn)行
指令集優(yōu)化 DMA支持用將大塊數(shù)據(jù)從存儲(chǔ)器移動(dòng)到顯卡
流水化
轉(zhuǎn)移預(yù)測(cè) 計(jì)算機(jī)繼續(xù)執(zhí)行指令,產(chǎn)生結(jié)果放在流水線特殊位置,猜測(cè)正確才被copy 回相應(yīng)處理器
超標(biāo)量
同一周期執(zhí)行多條不同的指令(對(duì)某一流水階段進(jìn)行備份)
存儲(chǔ)器優(yōu)化
cache
L1位于CPU 并以 CPU 的速度運(yùn)行,L2 以前在靠近CPU的主板上
存儲(chǔ)管理:
直接地址轉(zhuǎn)化: 直接映射物理地址
頁式地址轉(zhuǎn)化:
=========== Power 體系結(jié)構(gòu) ======================
RISC
加速常用指令
增加不常用的指令會(huì)降低指令的執(zhí)行性能 ( 計(jì)算機(jī)要檢查 指令的尋址方式,需要昂貴的電路)
RISC
1) 指令固定長度
2) 指令數(shù)少,容易優(yōu)化
Power 有數(shù)量較多的通用寄存器 (32) , ALU, FPU 都有狀態(tài)/控制寄存器( CR, FPSCR)
有機(jī)器狀態(tài)寄存器(MSR) 保存系統(tǒng)超級(jí)用戶級(jí)別的重要信息
CPU 可以復(fù)制 CR, 用戶不同的用戶級(jí)程序同時(shí)運(yùn)行
存儲(chǔ)管理
邏輯地址由存儲(chǔ)管理硬件轉(zhuǎn)換
塊地址轉(zhuǎn)換: BAT 寄存器, 如果邏輯地址和 BAT標(biāo)記的存儲(chǔ)區(qū)對(duì)應(yīng),將條桌虛擬存儲(chǔ)過程,直接訪問物理地址(圖形設(shè)備,其他IO)
cache 訪問:
匯編:
寄存器多,并行性高。
RISC體系支持良好的流水化工作。對(duì)于 Pentium 因?yàn)橹噶羁勺儯≈?5字節(jié) ,可能比取指1字節(jié)慢15倍
PowerPC G5有10個(gè)獨(dú)立模塊
1個(gè)交換單元
1個(gè)ALU
2個(gè)FPU
2個(gè)定點(diǎn)運(yùn)算單元
2個(gè)載入存儲(chǔ)單元
1個(gè)條件/系統(tǒng)寄存器單元
1個(gè)轉(zhuǎn)移單元
能同事執(zhí)行多大10條不同指令。一個(gè)智能編譯器嘗試混合不同指令類型的代碼
==================== Intel Pentium ==================
AX,BX 等寄存器擴(kuò)展到 32位
可以用實(shí)模式(1M內(nèi)存,沒有存儲(chǔ)保護(hù))
流水線: 486 5階, P3 14階 P4 24階
并行操作
MMX (SIMD) , 寄存器 64字節(jié),可以同時(shí)執(zhí)行 8個(gè)字節(jié)的加法
宏指令被翻譯成許多微指令,Pentium 是一個(gè)RISC芯片,各類執(zhí)行單元的獨(dú)立微操作按照 RISC設(shè)計(jì)
============= 微控制器 ===================
運(yùn)行頻率 20MHz, 64k存儲(chǔ)器,存儲(chǔ)器和外設(shè)都在同一個(gè)物理芯片上
Atmel AVR: Risc 芯片,2個(gè)字節(jié),130條指令,32個(gè)通用寄存器,64個(gè)I/O寄存器都是8個(gè)帶寬;不支持浮點(diǎn)
代碼保存在 Flash (rom), PC 可字節(jié)定位; 程序運(yùn)行在 RAM (AT90s2313是256字節(jié));EEPROM(啟動(dòng)配置信息) 128字節(jié)
AVR實(shí)現(xiàn)簡單的存儲(chǔ)器-IO映像,寫IO等價(jià)于在段都設(shè)置一個(gè)電氣信號(hào)(有驅(qū)動(dòng)芯片完成)
另外提供雙向數(shù)據(jù)接口和計(jì)時(shí)電路,中斷
很多引腳重疊,UART與端口B重疊
一般傳輸指令缺省對(duì)SRAM,但由于寄存器和IO都是存儲(chǔ)體的一部分,所以沒有區(qū)別,但算數(shù)運(yùn)算只能和通用寄存
======= JVM 高級(jí)編程 ==============
數(shù)組創(chuàng)建
newarray 在堆中分配,而后把新數(shù)組地址壓棧
anewarry 創(chuàng)建派生類對(duì)象 ( anewarryjava/lang/String)
multianewarry (multianewarry【【【F 3; 生成三維數(shù)組
存儲(chǔ)指令 astore_1 , iastore
獲取長度 arraylength
給對(duì)象域賦值
putfield BaseballPlayer/Name Ljava/lang/String;
putfield BaseballPlayer/Year I;
讀取域
putstatic Example/PI D;
getfield BaseballPlayer/Year I; // load 壓入棧頂
調(diào)用方法
getstatic java/lang/System/out Ljava/io/PrintStream
ldc "hello, world"
invoevirtual java/io/PrintStream/println(Ljavaa/langString;)V
創(chuàng)建對(duì)象
new MyClass
invokespecail MyClass/<init>()V
類系統(tǒng)支持遞歸,每次方法調(diào)用生成新的局部變量。不同于jsr/ret技術(shù)(使用原來堆棧)
|
|