找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2529|回复: 0
打印 上一主题 下一主题
收起左侧

机组和汇编原理

[复制链接]
跳转到指定楼层
楼主
ID:51472 发表于 2013-7-6 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
=============== JVM ================
nop 不做事情,但要占用时间


JVM 是基于堆栈的,所以提供很多栈指令
  pop2: 从堆栈pop 2个字
  swap: 交换栈两个字等等

指令应该是固定长度 1个字
http://yinwufeng.iteye.com/blog/757565

方法调用
压栈后调用

getstatic java/lang/System/out Ljava/io/PrintStream  // 相当于传递 this
ldc "This is a sample program"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V

NaN
IEEE 754 允许用特殊的位模式来表示不是一个数
IEEE 754中,用指数部分全一、小数部分非零表示NaN。以32位 IEEE 单精度浮点数的NaN为例,按位表示即:S111 1111 1AXX XXXX XXXX XXXX XXXX XXXX,S为符号位、A表示NaN的类型。如果 A = 1,则该数是quiet NaN;如果A为零、其余X部分非零,则是signaling NaN
http://zh.wikipedia.org/wiki/NaN

goto
goto 指令后整数是 offset,  跳的位置是 PC + offset
goto 跟的2个直接,就是前后可以跳 32k的offset


=============== 实际计算机  ================
分时工作方式  在程序停止的任意处把与程序相关的信息 ( 栈,局部变量,当前 PC等) 拷贝到主存;并加载另一个程序相关信息并运行

指令集优化 DMA支持用将大块数据从存储器移动到显卡

流水化
    转移预测 计算机继续执行指令,产生结果放在流水线特殊位置,猜测正确才被copy 回相应处理器

超标量
   同一周期执行多条不同的指令(对某一流水阶段进行备份)

存储器优化
   cache  
        L1位于CPU 并以 CPU 的速度运行,L2 以前在靠近CPU的主板上
   存储管理:
         直接地址转化: 直接映射物理地址
         页式地址转化:

=========== Power 体系结构 ======================
RISC
  加速常用指令
  增加不常用的指令会降低指令的执行性能 ( 计算机要检查 指令的寻址方式,需要昂贵的电路)
RISC
  1) 指令固定长度
  2) 指令数少,容易优化

Power 有数量较多的通用寄存器 (32) , ALU, FPU 都有状态/控制寄存器( CR, FPSCR)
有机器状态寄存器(MSR) 保存系统超级用户级别的重要信息
CPU 可以复制 CR,  用户不同的用户级程序同时运行

存储管理
   逻辑地址由存储管理硬件转换
   块地址转换: BAT 寄存器,  如果逻辑地址和 BAT标记的存储区对应,将条桌虚拟存储过程,直接访问物理地址(图形设备,其他IO)
   cache 访问:

汇编:
  寄存器多,并行性高。

RISC体系支持良好的流水化工作。对于 Pentium 因为指令可变,取指15字节 ,可能比取指1字节慢15倍

PowerPC G5有10个独立模块
1个交换单元
1个ALU
2个FPU
2个定点运算单元
2个载入存储单元
1个条件/系统寄存器单元
1个转移单元
能同事执行多大10条不同指令。一个智能编译器尝试混合不同指令类型的代码


==================== Intel Pentium ==================
AX,BX 等寄存器扩展到 32位
可以用实模式(1M内存,没有存储保护)
流水线: 486 5阶, P3 14阶  P4 24阶

并行操作
MMX (SIMD) , 寄存器 64字节,可以同时执行 8个字节的加法

宏指令被翻译成许多微指令,Pentium 是一个RISC芯片,各类执行单元的独立微操作按照 RISC设计

============= 微控制器 ===================
运行频率 20MHz, 64k存储器,存储器和外设都在同一个物理芯片上
Atmel AVR: Risc 芯片,2个字节,130条指令,32个通用寄存器,64个I/O寄存器都是8个带宽;不支持浮点
代码保存在 Flash (rom), PC 可字节定位; 程序运行在 RAM (AT90s2313是256字节);EEPROM(启动配置信息) 128字节

AVR实现简单的存储器-IO映像,写IO等价于在段都设置一个电气信号(有驱动芯片完成)
另外提供双向数据接口和计时电路,中断
很多引脚重叠,UART与端口B重叠
一般传输指令缺省对SRAM,但由于寄存器和IO都是存储体的一部分,所以没有区别,但算数运算只能和通用寄存

======= JVM 高级编程 ==============
数组创建
    newarray 在堆中分配,而后把新数组地址压栈
    anewarry 创建派生类对象 ( anewarryjava/lang/String)
   multianewarry (multianewarry【【【F 3; 生成三维数组

存储指令  astore_1 ,  iastore
获取长度  arraylength

给对象域赋值
putfield BaseballPlayer/Name Ljava/lang/String;
putfield BaseballPlayer/Year I;

读取域
putstatic  Example/PI D;
getfield BaseballPlayer/Year I; // load 压入栈顶

调用方法
getstatic java/lang/System/out Ljava/io/PrintStream
ldc "hello, world"
invoevirtual java/io/PrintStream/println(Ljavaa/langString;)V

创建对象
new MyClass
invokespecail MyClass/<init>()V

类系统支持递归,每次方法调用生成新的局部变量。不同于jsr/ret技术(使用原来堆栈)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表