第1章数制<br>1.1简介<br>1.2按位记数制<br>1.3各数制的算术规则<br>1.4数制转换<br>1.5Horner法<br>1.6有符号二进制数<br>1.6.1符号-绝对值表示法<br>1.6.22的补码表示法<br>1.6.31的补码表示法<br>1.6.4加n表示法<br>1.7用2的补码加法计算减法<br>1.82的补码和无符号数的范围<br>1.9扩展2的补码和无符号数<br>1.10溢出<br>1.10.1有符号数溢出<br>1.10.2无符号数溢出<br>1.11分析2的补码数<br>1.12加法器电路<br>1.13门<br>1.14用加法器执行减法<br>1.15比较有符号数<br>1.16比较无符号数<br>1.17正数、负数和无符号数的一致对待<br>1.18浮点数表示法<br>1.18.1科学记数法<br>1.18.232位IEEE754浮点数格式<br>1.18.3下溢、溢出和特殊值<br>1.18.4某些Java程序中的计算误差<br>1.18.5长格式<br>1.19小结<br>1.20问题<br><br>第2章机器语言<br>2.1简介<br>2.2计算机的组件<br>2.3机器语言编程<br>2.4在sim上运行机器语言程序<br>2.5问题<br><br>第3章H1汇编语言:第1部分<br>3.1简介<br>3.2汇编语言基础<br>3.3注释汇编语言程序<br>3.4使用标号<br>3.5使用汇编器<br>3.6低级语言与高级语言<br>3.7汇编器工作原理<br>3.8使用dup修饰符<br>3.9操作数字段中的算术表达式<br>3.10指定当前位置<br>3.11字符串<br>3.12org伪指令<br>3.13end伪指令<br>3.14指令的顺序执行<br>3.15问题<br><br>第4章H1汇编语言:第2部分<br>4.1简介<br>4.2描述指令的简写形式<br>4.3直接指令<br>4.4堆栈指令<br>4.5立即指令<br>4.6I/O指令<br>4.7转移指令<br>4.8间接指令<br>4.9相对指令<br>4.10变址<br>4.11连接指令<br>4.12终止指令<br>4.13高级语言中指令的自动生成<br>4.14调试<br>4.15使用存储映像式I/O<br>4.16equ伪指令<br>4.17Java程序的潜在问题:大小端<br>4.18问题<br><br>第5章电子学和数字逻辑电路基础<br>5.1简介<br>5.2电子学基础<br>5.2.1导体和绝缘体<br>5.2.2一个简单电路<br>5.2.3有效电压<br>5.2.4电源<br>5.2.5如何避免触电<br>5.2.6晶体管<br>5.2.7电容、电感和阻抗<br>5.3组合逻辑电路<br>5.3.1门<br>5.3.2布尔函数<br>5.3.3最小电路<br>5.3.4使用布尔代数使电路最小化<br>5.3.5摩根定律的图示法<br>5.3.6使用卡诺图使电路最小化<br>5.3.7多路复用器<br>5.3.8解码器和编码器<br>5.3.9半加器和全加器<br>5.3.10一位移位器<br>5.3.11乘法器阵列<br>5.3.12算术逻辑单元<br>5.3.13三态缓冲器<br>5.3.14ROM<br>5.4时序逻辑电路<br>5.4.1SR触发器<br>5.4.2时钟控制D触发器<br>5.4.3时钟控制JK触发器<br>5.4.4边沿检测<br>5.4.5T触发器<br>5.4.6RAM<br>5.4.7二进制计数器<br>5.4.8寄存器<br>5.4.9时钟和序列发生器<br>5.5集成电路<br>5.6问题<br><br>第6章H1和V1的微级<br>6.1简介<br>6.2H1的微级<br>6.2.1H1的组织概述<br>6.2.2微指令<br>6.2.3存储器数据总线<br>6.2.4存储器地址总线<br>6.2.5寄存器库<br>6.2.6指定微操作<br>6.2.7驱动寄存器库的控制输入端<br>6.2.8整合H1各部分<br>6.2.9分支多路复用器<br>6.2.10定时问题<br>6.2.11微指令格式<br>6.2.12序列发生器驱动的控制输入端<br>6.2.13基本指令集的微代码<br>6.2.14硬件/微代码权衡<br>6.3在sim上使用新的微代码<br>6.3.1如何使用!伪指令<br>6.3.2创建配置文件<br>6.3.3创建二进制微代码<br>6.3.4用新指令集汇编<br>6.3.5在微级上跟踪<br>6.3.6加密微代码<br>6.3.7编写并优化复杂的微代码<br>6.4解释机器语言指令<br>6.5硬接线控制<br>6.6垂直微编程<br>6.6.1使用V1<br>6.6.2构成更短的微指令<br>6.6.3汇编垂直微代码<br>6.7问题<br><br>第7章评估H1的指令集体系结构:第1部分<br>7.1简介<br>7.2哑编译器<br>7.3全局变量<br>7.4局部变量<br>7.5变化的相对地址<br>7.6参数和传值调用<br>7.7返回值<br>7.8需要相对指令的原因<br>7.9确定动态局部变量和参数的地址<br>7.10间接引用指针<br>7.11问题<br><br>第8章评估H1的指令集体系结构:第2部分<br>8.1简介<br>8.2引用调用<br>8.2.1引用调用的实现<br>8.2.2C++引用参数的概念视图<br>8.2.3不间接引用C++引用参数的情况<br>8.2.4传值调用与引用调用的比较<br>8.2.5常数和表达式作为变元<br>8.3函数重载和重命名<br>8.4结构<br>8.5Java中的指针<br>8.6函数指针<br>8.7数组<br>8.7.1定义并访问数组<br>8.7.2数组作为变元<br>8.7.3Java中的数组<br>8.8控制语句<br>8.9有符号数和无符号数比较<br>8.10多字加法<br>8.11位级操作<br>8.12递归<br>8.13问题<br><br>第9章高级汇编语言编程<br>9.1简介<br>9.2指向指针的指针<br>9.3引用调用及其他地方存在的潜在错误<br>9.4关系和布尔表达式<br>9.5字符串<br>9.6值结果调用<br>9.7变长变元列表<br>9.8问题<br><br>第10章连接和加载<br>10.1简介<br>10.2浮动字段<br>10.3显示标题和机器代码正文的程序<br>10.4小s项<br>10.5禁止重定位<br>10.6分别汇编<br>10.7乘法子例程<br>10.8使用库<br>10.9分别汇编的优点<br>10.10启动代码<br>10.11C++模块的分别编译<br>10.12问题<br><br>第11章用C++或Java实现汇编器和连接器<br>11.1简介<br>11.2编写汇编器<br>11.2.1一个简单汇编器的规范<br>11.2.2操作码表<br>11.2.3符号表<br>11.2.4使用二进制文件<br>11.2.5读取输入文本文件并创建标题<br>11.2.6汇编机器字<br>11.2.7将机器正文写入输出文件<br>11.2.8分析输入<br>11.2.9Java程序的大小端问题<br>11.2.10添加对public、extern和end伪指令的支持<br>11.3编写连接器<br>11.3.1一个简单连接器的规范<br>11.3.2构建P、E、R和S表<br>11.3.3重定位地址并解析外部引用<br>11.3.4添加库支持<br>11.4问题<br><br>第12章最优指令集<br>12.1简介<br>12.2新增和改进的指令<br>12.2.1mult、m、div和rem<br>12.2.2addc和subc<br>12.2.3scmp<br>12.2.4ucmp<br>12.2.5shll和shrl<br>12.2.6shra<br>12.2.7addy<br>12.2.8or、xor、and和flip<br>12.2.9cali<br>12.2.10sect和dect<br>12.2.11sodd<br>12.2.12esba、reba、bpbp、pobp和pbp<br>12.2.13cora<br>12.2.14bcpy<br>12.3链表--使用最优指令集示例<br>12.4关于最优指令集的进展报告<br>12.4.1主存储器的数量不足<br>12.4.2存储器存储字符串的效率不高<br>12.4.3缺少加和减的立即指令<br>12.4.4缺少变址寄存器<br>12.4.5累加器型寄存器太少<br>12.4.6swap指令破坏sp寄存器<br>12.4.7缺少乘法和除法指令<br>12.4.8sp寄存器作为栈顶指针和基址寄存器的双重用途<br>12.4.9难以获得堆栈上变量的地址<br>12.4.10缺少块复制指令<br>12.4.11难以调用地址已知的函数<br>12.4.12aloc和dloc指令的局限性<br>12.4.13难以执行有符号数和无符号数比较<br>12.4.14难以执行多字加法<br>12.4.15不支持位级操作<br>12.5问题<br><br>第13章使用、评估并实现最优指令集和堆栈指令集<br>13.1简介<br>13.2H1上的乘法<br>13.3二维数组<br>13.4汇编语言中的面向对象编程<br>13.4.1C++的结构、类和对象<br>13.4.2继承<br>13.4.3通过指针调用成员函数<br>13.4.4虚函数和多态性<br>13.5名调用<br>13.6面向堆栈的体系结构<br>13.6.1体系结构与组织<br>13.6.2以栈顶代替ac寄存器<br>13.6.34位操作码的可用性<br>13.6.4特殊的堆栈操作<br>13.6.5更简单的编译<br>13.6.6返回值<br>13.6.7使用堆栈指令集示例<br>13.6.8比较最优指令集和堆栈指令集<br>13.6.9关于JVM的几点观察<br>13.7编写最优和堆栈指令集的微代码<br>13.8微编程的挑战<br>13.9问题<br><br>第14章存储系统<br>14.1简介<br>14.2地址的传送<br>14.3多程序系统<br>14.4直接存储器存取<br>14.5分时系统<br>14.6重定位寄存器<br>14.7虚拟存储器<br>14.7.1简单分页系统<br>14.7.2关联存储器<br>14.7.3中断<br>14.7.4请求式分页<br>14.7.5请求式分页的页面替换策略<br>14.7.6页面大小的考虑<br>14.7.7超级用户/用户模式<br>14.7.8存储器保护<br>14.7.9分页的分段<br>14.8高速缓冲存储器<br>14.8.1缓存的替换策略<br>14.8.2写策略<br>14.8.3存储器到缓存的映射方案<br>14.9可共享的程序<br>14.10问题<br><br>第15章某些现代体系结构<br>15.1简介<br>15.2CISC与RISC<br>15.3SPARC:RISC体系结构<br>15.3.1重叠的寄存器窗口<br>15.3.2保存和恢复指令<br>15.3.3加载和存储指令<br>15.3.4转移、call和jmpl指令<br>15.3.5指令流水线<br>15.3.6连接指令<br>15.3.7寻址方式<br>15.3.8一个简单的汇编语言程序<br>15.3.9合成指令<br>15.3.10编译器生成的代码<br>15.3.11存储映像式I/O<br>15.4Pentium:CISC体系结构<br>15.4.1寄存器结构<br>15.4.2汇编语言<br>15.4.3编译器生成的代码<br>15.4.4I/O指令<br>15.5问题<br><br>第16章Java虚拟机(JVM)<br>16.1简介<br>16.2JVM的结构<br>16.3某些使用操作数堆栈的普通操作<br>16.4方法的调用和返回<br>16.5执行引擎的实现<br>16.6明智之举:JVM使用堆栈体系结构<br>16.7一个简单的例子<br>16.8常数池<br>16.9类文件格式<br>16.10字节码的空间效率<br>16.11控制语句<br>16.12反汇编类文件<br>16.13对象和数组<br>16.14JVM:抽象机器<br>16.15问题<br>附录A指令集汇总(s.txt、b.txt、o.txt、k.txt)<br>附录B微指令级汇总(mic.txt)<br>附录C标准指令集的微代码(s.has)<br>附录DSPARC汇总(sparc.txt)<br>附录Ejava虚拟机字节码汇总(jvm.txt)<br>附录FASCII汇总(ascii.txt)<br>附录G数制汇总(number.txt)<br>附录H了解C++对Java程序员的帮助
展开