找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2780|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

機組和匯編原理

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51472 發(fā)表于 2013-7-6 14:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
=============== JVM ================
nop 不做事情,但要占用時間


JVM 是基于堆棧的,所以提供很多棧指令
  pop2: 從堆棧pop 2個字
  swap: 交換棧兩個字等等

指令應(yīng)該是固定長度 1個字
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 允許用特殊的位模式來表示不是一個數(shù)
IEEE 754中,用指數(shù)部分全一、小數(shù)部分非零表示NaN。以32位 IEEE 單精度浮點數(shù)的NaN為例,按位表示即:S111 1111 1AXX XXXX XXXX XXXX XXXX XXXX,S為符號位、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個直接,就是前后可以跳 32k的offset


=============== 實際計算機  ================
分時工作方式  在程序停止的任意處把與程序相關(guān)的信息 ( 棧,局部變量,當(dāng)前 PC等) 拷貝到主存;并加載另一個程序相關(guān)信息并運行

指令集優(yōu)化 DMA支持用將大塊數(shù)據(jù)從存儲器移動到顯卡

流水化
    轉(zhuǎn)移預(yù)測 計算機繼續(xù)執(zhí)行指令,產(chǎn)生結(jié)果放在流水線特殊位置,猜測正確才被copy 回相應(yīng)處理器

超標(biāo)量
   同一周期執(zhí)行多條不同的指令(對某一流水階段進(jìn)行備份)

存儲器優(yōu)化
   cache  
        L1位于CPU 并以 CPU 的速度運行,L2 以前在靠近CPU的主板上
   存儲管理:
         直接地址轉(zhuǎn)化: 直接映射物理地址
         頁式地址轉(zhuǎn)化:

=========== Power 體系結(jié)構(gòu) ======================
RISC
  加速常用指令
  增加不常用的指令會降低指令的執(zhí)行性能 ( 計算機要檢查 指令的尋址方式,需要昂貴的電路)
RISC
  1) 指令固定長度
  2) 指令數(shù)少,容易優(yōu)化

Power 有數(shù)量較多的通用寄存器 (32) , ALU, FPU 都有狀態(tài)/控制寄存器( CR, FPSCR)
有機器狀態(tài)寄存器(MSR) 保存系統(tǒng)超級用戶級別的重要信息
CPU 可以復(fù)制 CR,  用戶不同的用戶級程序同時運行

存儲管理
   邏輯地址由存儲管理硬件轉(zhuǎn)換
   塊地址轉(zhuǎn)換: BAT 寄存器,  如果邏輯地址和 BAT標(biāo)記的存儲區(qū)對應(yīng),將條桌虛擬存儲過程,直接訪問物理地址(圖形設(shè)備,其他IO)
   cache 訪問:

匯編:
  寄存器多,并行性高。

RISC體系支持良好的流水化工作。對于 Pentium 因為指令可變,取指15字節(jié) ,可能比取指1字節(jié)慢15倍

PowerPC G5有10個獨立模塊
1個交換單元
1個ALU
2個FPU
2個定點運算單元
2個載入存儲單元
1個條件/系統(tǒng)寄存器單元
1個轉(zhuǎn)移單元
能同事執(zhí)行多大10條不同指令。一個智能編譯器嘗試混合不同指令類型的代碼


==================== Intel Pentium ==================
AX,BX 等寄存器擴展到 32位
可以用實模式(1M內(nèi)存,沒有存儲保護(hù))
流水線: 486 5階, P3 14階  P4 24階

并行操作
MMX (SIMD) , 寄存器 64字節(jié),可以同時執(zhí)行 8個字節(jié)的加法

宏指令被翻譯成許多微指令,Pentium 是一個RISC芯片,各類執(zhí)行單元的獨立微操作按照 RISC設(shè)計

============= 微控制器 ===================
運行頻率 20MHz, 64k存儲器,存儲器和外設(shè)都在同一個物理芯片上
Atmel AVR: Risc 芯片,2個字節(jié),130條指令,32個通用寄存器,64個I/O寄存器都是8個帶寬;不支持浮點
代碼保存在 Flash (rom), PC 可字節(jié)定位; 程序運行在 RAM (AT90s2313是256字節(jié));EEPROM(啟動配置信息)。保玻缸止(jié)

AVR實現(xiàn)簡單的存儲器-IO映像,寫IO等價于在段都設(shè)置一個電氣信號(有驅(qū)動芯片完成)
另外提供雙向數(shù)據(jù)接口和計時電路,中斷
很多引腳重疊,UART與端口B重疊
一般傳輸指令缺省對SRAM,但由于寄存器和IO都是存儲體的一部分,所以沒有區(qū)別,但算數(shù)運算只能和通用寄存

======= JVM 高級編程 ==============
數(shù)組創(chuàng)建
    newarray 在堆中分配,而后把新數(shù)組地址壓棧
    anewarry 創(chuàng)建派生類對象 ( anewarryjava/lang/String)
   multianewarry (multianewarry【【【F。; 生成三維數(shù)組

存儲指令  astore_1 ,  iastore
獲取長度 。幔颍颍幔欤澹睿纾簦

給對象域賦值
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)建對象
new MyClass
invokespecail MyClass/<init>()V

類系統(tǒng)支持遞歸,每次方法調(diào)用生成新的局部變量。不同于jsr/ret技術(shù)(使用原來堆棧)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表