首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

引见一本汇编语言新书《汇编语言漫游INTEL处理器》

2013-01-17 
介绍一本汇编语言新书《汇编语言漫游INTEL处理器》目录5第1部分预备知识12第一章十六进制计数法131.1二进制

介绍一本汇编语言新书《汇编语言漫游INTEL处理器》
目  录5第1部分   预备知识12
第一章  十六进制计数法13
  1.1  二进制计数法回顾13
    1.1.1  关于二进制计数法13
    1.1.2  二进制到十进制的转换13
    1.1.3  十进制到二进制的转换14
    1.2  十六进制计数法14
    1.2.1  十六进制计数法的原理14
    1.2.2  十六进制到十进制的转换15
    1.2.3  十进制到十六进制的转换15
  1.3  为什么需要十六进制16
  本章习题2

第二章  处理器、内存和指令3
  2.1  最早的处理器3
  2.2  寄存器和算术逻辑部件3
  2.3  内存储器5
  2.4  指令和指令集6
  2.5  古老的INTEL 8086处理器8
    2.5.1  8086的通用寄存器8
    2.5.2  程序的重定位难题9
    2.5.3  内存分段机制13
    2.5.4  8086的内存分段机制15
  本章习题17

第三章  汇编语言和汇编软件18
  3.1  汇编语言简介18
  3.2  NASM编译器20
    3.2.1  从网上下载NASM安装程序20
    3.2.2  安装NASM编译器22
    3.2.3  下载配书源码和工具23
    3.2.4  用nasmide体验代码的书写和编译过程25
    3.2.5  用HexView观察编译后的机器代码27
  本章习题29

第四章  虚拟机的安装和使用30
  4.1  计算机的启动过程30
    4.1.1  如何将编译好的程序提交给处理器30
    4.1.2  计算机的加电和复位30
    4.1.3  基本输入输出系统BIOS31
    4.1.4  硬盘及其工作原理32
    4.1.5  一切从主引导扇区开始34
  4.2  创建和使用虚拟机35
    4.2.1  别害怕,虚拟机是软件35
    4.2.2  下载Oracle VM VirtualBox35
    4.2.3  安装Oracle VM VirtualBox36
    4.2.4  创建一台虚拟PC(个人计算机)37
    4.2.5  虚拟硬盘(VHD)简介45
    4.2.6  练习使用FixVhdWr工具向虚拟硬盘写数据46

第2部分   16位处理器下的实模式51
第五章  编写主引导扇区代码52
  5.1  欢迎来到主引导扇区52
    5.1.1  本章意图52
    5.1.2  代码清单5-1(主引导程序)52
  5.2  注释55
  5.3  在屏幕上显示文字55
    5.3.1  显卡和显存55
    5.3.2  初始化段寄存器57
    5.3.3  显存的访问和ASCII代码58
    5.3.4  在屏幕上显示字符60
  5.4  显示标号的汇编地址61
    5.4.1  标号61
    5.4.2  如何显示十进制数字64
    5.4.3  在程序中声明并初始化数据(伪指令db/dw/dd/dq)65
    5.4.4  分解数的各个数位(div/and/xor)66
    5.4.5  显示分解出来的各个数位(add)70
  5.5  使程序进入无限循环状态70
  5.6  完成并编译主引导扇区代码71
    5.6.1  主引导扇区有效标志(伪指令times)71
    5.6.2  代码的保存和编译72
  5.7  加载和运行主引导扇区代码72
    5.7.1 把编译后的指令写入主引导扇区72
    5.7.2  启动虚拟机观察运行结果74
    5.7.3  程序的调试76
  本章习题76

第六章  相同的功能,不同的代码78
  6.1  代码清单6-178


  6.2  跳过非指令的数据区80
  6.3  在数据声明中使用字面值80
  6.4  段地址的初始化80
  6.5  段之间的批量数据传送(cld/std/movsb/movsw)81
  6.6  使用循环分解数位(inc /loop)82
  6.7  计算机中的负数84
    6.7.1  无符号数和有符号数(neg/cbw/cwd)84
    6.7.2  处理器视角中的数据类型(sub/ idiv)87
  6.8  数位的显示(dec/jns)89
  6.9  其它标志位和条件转移指令90
    6.9.1  奇偶标志位PF(Parity Flag)91
    6.9.2  进位标志CF(Carry Flag)。91
    6.9.3  溢出标志OF(overflow flag)91
    6.9.4  现有指令对标志位的影响92
    6.9.5  条件转移指令(cmp/jcc)92
  6.10  NASM编译器的$和$$标记94
  6.11  观察运行结果95
  本章习题95

第七章  比高斯更快的计算96
  7.1  从1加到100的故事96
  7.2  代码清单7-196
  7.3  显示字符串98
  7.4  计算1到100的累加和98
  7.5  累加和各个数位的分解和显示98
    7.5.1  堆栈和堆栈段的初始化98
    7.5.2  分解各个数位并压栈(or/push)100
    7.5.3  出栈并显示各个数位(pop)102
    7.5.4  进一步认识堆栈103
  7.6  程序的编译和运行103
  7.7  8086处理器的寻址方式104
    7.7.1  寄存器寻址104
    7.7.2  立即寻址105
    7.7.3  内存寻址105
  本章习题109

第八章  直接硬盘读和带光标跟随的字符显示110
  8.1  本章代码清单110
    8.1.1  本章意图110
    8.1.2  代码清单8-1(主引导程序/加载器)110
    8.1.3  代码清单8-2(用户程序)115
  8.2  用户程序的结构120
    8.2.1  分段、段的汇编地址和段内汇编地址120
    8.2.2  用户程序头部123
  8.3  加载程序(器)的工作流程126
    8.3.1  初始化和决定加载位置(伪指令equ)126
    8.3.2  准备加载用户程序127
    8.3.3  外围设备及其接口128
    8.3.4  I/O端口和端口访问(in/out)130
    8.3.5  通过硬盘控制器端口读扇区数据131
    8.3.6  过程调用(call/call far/ret/retf)134
    8.3.7  加载用户程序138
    8.3.8  用户程序重定位(adc/shr/shl/ror/rol)140
    8.3.9  将控制权交给用户程序(jmp far)144
    8.3.10  8086处理器的无条件转移指令145
  8.4  用户程序的工作流程147
    8.4.1  初始化段寄存器和堆栈切换147
    8.4.2  调用字符串显示例程147
    8.4.3  过程的嵌套148
    8.4.4  屏幕光标控制148
    8.4.5  取当前光标位置149
    8.4.6  处理回车和换行字符(mul)151  
    8.4.7  显示可打印字符152
    8.4.8  滚动屏幕内容152
    8.4.9  重置光标152
    8.4.10  切换到另一个代码段中执行153
    8.4.11  访问另一个数据段153
  8.5  编译和运行程序并观察结果153
  本章习题154

第九章  中断和动态时钟显示155
  9.1  外部硬件中断155
    9.1.1  非屏蔽中断156
    9.1.2  可屏蔽中断(cli/sti)156
    9.1.3  实模式下的中断向量表(iret)158


    9.1.4  实时时钟、CMOS RAM和BCD编码159
    9.1.5  代码清单9-1(用户程序)163
    9.1.6  初始化8259、RTC和中断向量表171
    9.1.6  使处理器进入低功耗状态(hlt/not)172
    9.1.7  实时时钟中断的处理过程(test)173
    9.1.8  代码清单9-1的编译和运行175
  9.2  内部中断175
  9.3  软中断(int3/int/into)176
    9.3.1  常用的BIOS中断176
    9.3.2  代码清单9-2(BIOS中断演示程序)180
    9.3.3  从键盘读字符并显示182
    9.3.4  代码清单9-2的编译和运行182
  本章习题183

第3部分   32位保护模式185
第十章  32位INTEL微处理器编程架构186
  10.1  IA-32架构的基本执行环境186
    10.1.1  寄存器的扩展186
    10.1.2  基本的工作模式189
    10.1.3  线性地址189
  10.2  现代处理器的结构和特点190
    10.2.1  流水线190
    10.2.2  高速缓存191
    10.2.3  乱序执行192
    10.2.4  寄存器重命名193
    10.2.5  分支目标预测193
  10.3  32位模式的指令系统194
    10.3.1  32位处理器的寻址方式194
    10.3.2  操作数大小的指令前缀196
    10.3.3  一般指令的扩展197 

第十一章  进入保护模式201
  11.1  代码清单11-1201
  11.2  全局描述符表GDT204
  11.3  存储器的段描述符205
  11.4  安装存储器的段描述符并加载GDTR(lgdt)209
  11.5  关于第21条地址线A20的问题211
  11.6  保护模式下的内存访问213
  11.7  清空流水线并串行化处理器217
  11.8  保护模式下的堆栈218
    11.8.1  关于堆栈段描述符中的界限值218
    11.8.2  检验32位下的堆栈操作219
  11.9  程序的编译和运行220
  本章习题220

第十二章  存储器的保护221
  12.1  代码清单12-1221
  12.2  进入32位保护模式224
    12.2.1  话说mov ds,ax和mov ds,eax224
    12.2.2  创建GDT并安装段描述符225
  12.3  修改段寄存器时的保护227
  12.4  地址变换时的保护229
    12.4.1  代码段执行时的保护229
    12.4.2  堆栈操作时的保护230
    12.4.3  数据访问时的保护232
  12.5  使用别名访问代码段对字符排序(xchg)233
  12.6  程序的编译和运行235
  本章习题236

第十三章  程序的动态加载和执行237
  13.1  本章代码清单237
    13.1.1  代码清单13-1(主引导程序)237
    13.1.2  代码清单13-2(微型内核)243
    13.1.3  代码清单13-3(用户程序)257
  13.2  内核的结构、功能和加载259
    13.2.1  内核的结构259
    13.2.2  内核的加载260
    13.2.3  安装内核的段描述符(bswap)263
  13.3  在内核中执行(cpuid)267
  13.4  用户程序的加载和重定位268
    13.4.1  用户程序的结构269
    13.4.2  计算用户程序占用的扇区数(cmovcc)270
    13.4.3  简单的动态内存分配271
    13.4.4  段的重定位和描述符的创建(sgdt/movzx/movsx)272
    13.4.5  重定位用户程序内的符号地址(cmpsb/cmpsw/cmpsd)275
  13.5  执行用户程序279
  13.6  代码的编译、运行和调试(xlat)280


  本章习题282

第十四章  任务和特权级保护283
  14.1  任务的隔离和特权级保护283
    14.1.1  任务、任务的LDT和TSS283
    14.1.2  全局空间和局部空间286
    14.1.3  特权级保护概述287
  15.2  代码清单14-1294
  14.3  内核程序的初始化308
    14.3.1  调用门(CALL-GATE)308
    14.3.2  调用门的安装和测试311
  14.4  加载用户程序并创建任务314
    14.4.1  任务控制块TCB和TCB链314
    14.4.2  使用堆栈传递过程参数317
    14.4.3  加载用户程序318
    14.4.4  创建局部描述符表LDT319
    14.4.5  重定位U-SALT表320
    14.4.6  创建0、1和2特权级的堆栈320
    14.4.7  安装LDT描述符到GDT中321
    14.4.8  任务状态段TSS的格式(pushf/pushfd/popf/popfd)322
    14.4.9  创建任务状态段TSS325
    14.4.10  安装TSS描述符到GDT中326
    14.4.11  带参数的过程返回指令(ret n/retf n)326
  14.5  用户程序的执行328
    14.5.1  通过调用门转移控制的完整过程328
    14.5.2  进入3特权级的用户程序执行(ltr/lldt)331
    14.5.3  检查调用者的请求特权级RPL(arpl)333
  本章习题334

第十五章  任务切换335
  15.1  本章代码清单335
    15.1.1  代码清单15-1(系统内核)335
    15.1.2  代码清单15-2(用户程序)349
  15.2  任务切换前的设置351
  15.3  任务切换的方法352
  15.4  用CALL/JMP/IRET指令发起任务切换的实例355
  15.5  处理器在实施任务切换时的操作358
  15.6  程序的编译和运行360
  本章习题360

第十六章  分页机制和动态页面分配362
  16.1  分页机制概述362
    16.1.1  简单的分页模型362
    16.1.2  页目录、页表和页366
    16.1.3  地址变换的具体过程368
  16.2  本章代码清单369
    16.2.1  代码清单16-1(系统内核)369
    16.2.2  代码清单16-2(用户程序)387
  16.3  使内核在分页机制下工作389
    16.3.1  创建内核的页目录和页表389
    16.3.2  任务全局空间和局部空间的页面映射394
  16.4  创建内核任务400
    16.4.1  内核的虚拟内存分配400
    16.4.2  页面位映射串和空闲页的查找(bts/btr/btc/bt)401
    16.4.3  创建页表并登记分配的页404
    16.4.4  创建内核任务的TSS405
  16.5  用户任务的创建和切换405
    16.5.1  多段模型和段页式内存管理405
    16.5.2  平坦模型和用户程序的结构407
    16.5.3  用户任务的虚拟地址空间分配407
    16.5.4  用户程序的加载408
    16.5.5  段描述符的创建(平坦模型)411
    16.5.6  重定位U-SALT并复制页目录表412
    16.5.7  转换到用户任务执行414
  16.6  程序的编译和执行416
  本章习题416

第十七章  中断和异常的处理417
  17.1  中断和异常417
    17.1.1  中断和异常概述417
    17.1.2  中断描述符表、中断门和陷阱门419
    17.1.3  中断和异常处理程序的保护421
    17.1.4  中断任务423
    17.1.5  错误代码425
  17.2  本章代码清单425
    17.2.1  代码清单17-1(主引导程序)425


    17.2.2  代码清单17-2(系统内核)431
    17.2.3  代码清单17-3(用户任务一)455
    17.2.4  代码清单17-4(用户任务二)457
  17.3  内核的加载和初始化458
    17.3.1  彻底终结多段模型458
    17.3.2  创建中断描述符表IDT461
    17.3.3  用定时中断实施任务切换462
    17.3.4  8259A芯片的初始化(lidt)468
    17.3.5  平坦模型下的字符串显示例程470
  17.4  内核任务的创建471
    17.4.1  创建内核任务的TCB471
    17.4.2  宏汇编技术472
  17.5  用户任务的创建474
    17.5.1  准备加载用户程序474
    17.5.2  转换后援缓冲器TLB的刷新475
    17.5.3  用户任务的创建和初始化(invlpg)476
  17.6  程序的编译和执行480
  本章习题480

=======================================================================================
出版日期:2012年9月
出版社:电子工业出版社
作者:李忠

[解决办法]
不错呀,感谢楼主介绍
[解决办法]
以后看看
[解决办法]
果然是好书
[解决办法]
哪里能下到后半本书?
[解决办法]
在哪里可以下到整本书呢

[解决办法]
我也想看,这本书,哈哈
[解决办法]
  可以上传吗 楼主 我想看看
[解决办法]
老师请问这本书哪里有卖?
[解决办法]
有没有14-17章电子版有发给我邮箱下1002351966@qq.com  
谢谢
[解决办法]
正需要NASM以及保护模式相关汇编语言设计的资料  谢谢LZ

热点排行