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

看完王爽的《编译语言》之后,还需要继续提升汇编语言水平啊看什么书

2013-01-02 
看完王爽的《汇编语言》之后,还需要继续提升汇编语言水平啊,看什么书本帖最后由 xiaoyuanyuan2009 于 2012-0

看完王爽的《汇编语言》之后,还需要继续提升汇编语言水平啊,看什么书
本帖最后由 xiaoyuanyuan2009 于 2012-08-02 16:29:17 编辑 当年看王爽的《汇编语言》的时候也是粗略的看的,因为知道他是讲16位程序,总担心有些东西与目前的操作系统不兼容而影响以后的学习思路。
他上面讲的指令肯定也比当前32位、64位系统少。

最近刚开始看谭文的天书夜读,里面提到了一些新指令和寄存器。也许你又要让我百度、谷歌,但我不喜欢这种方法,这不能系统的、详细的学到新知识,而只能是碰到一个学一个。
希望各位给推荐一个32位或64位的汇编语言的书,而不是讲系统的书。比如《windows环境下32位汇编语言程序设计》就不好了,他讲了系统,我目前只需要语言。
其实王爽的书最符合要求,即抛开了系统,也提到了硬件。唯独的缺点就是围绕16位。眼下需要的是32位和64位指令和硬件。
希望你不要推荐指令手册才好。
[解决办法]
楼主找到后吱一声,我也要哈
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
[解决办法]
<80x86汇编语言程序设计>
<Intel汇编语言程序设计>
[解决办法]
指令手册
[解决办法]
你要滴是介么一本书么?看看下面的目录。
---------------------------------------------
目录
前  言3
目  录4
第1部分   预备知识5
第一章  十六进制计数法6
1.1  二进制计数法回顾6
1.1.1  关于二进制计数法6
1.1.2  二进制到十进制的转换6
1.1.3  十进制到二进制的转换7
1.2  十六进制计数法7
1.2.1  十六进制计数法的原理7
1.2.2  十六进制到十进制的转换8
1.2.3  十进制到十六进制的转换8
1.3  为什么需要十六进制9
本章习题10
第二章  处理器、内存和指令11
2.1  最早的处理器11
2.2  寄存器和算术逻辑部件11
2.3  内存储器12
2.4  指令和指令集13
2.5  古老的INTEL 8086处理器14
2.5.1  8086的通用寄存器15
2.5.2  程序的重定位难题15
2.5.3  内存分段机制17
2.5.4  8086的内存分段机制17
本章习题19
第三章  汇编语言和汇编软件20
3.1  汇编语言简介20
3.2  NASM编译器21
3.2.1  从网上下载NASM安装程序21
3.2.2  安装NASM编译器22
3.2.3  下载配书源码和工具23
3.2.4  用nasmide体验代码的书写和编译过程24
3.2.5  用HexView观察编译后的机器代码25
本章习题26
第四章  虚拟机的安装和使用27
4.1  计算机的启动过程27
4.1.1  如何将编译好的程序提交给处理器27
4.1.2  计算机的加电和复位27
4.1.3  基本输入输出系统BIOS28
4.1.4  硬盘及其工作原理29
4.1.5  一切从主引导扇区开始30
4.2  创建和使用虚拟机30
4.2.1  别害怕,虚拟机是软件30
4.2.2  下载Oracle VM VirtualBox31
4.2.3  安装Oracle VM VirtualBox31
4.2.4  创建一台虚拟PC(个人计算机)32
4.2.5  虚拟硬盘(VHD)简介34
4.2.6  练习使用FixVhdWr工具向虚拟硬盘写数据35
第2部分   16位处理器下的实模式38
第五章  编写主引导扇区代码39
5.1  欢迎来到主引导扇区39
5.1.1  本章意图39
5.1.2  本章代码清单39
5.2  注释42
5.3  在屏幕上显示文字42
5.3.1  显卡和显存42
5.3.2  初始化段寄存器44
5.3.3  显存的访问和ASCII代码44
5.3.4  在屏幕上显示字符46


5.4  显示标号的汇编地址47
5.4.1  标号47
5.4.2  如何显示十进制数字50
5.4.3  在程序中声明并初始化数据(伪指令db/dw/dd/dq)51
5.4.4  分解数的各个数位(div/and/xor)51
5.4.5  显示分解出来的各个数位(add)55
5.5  使程序进入无限循环状态56
5.6  完成并编译主引导扇区代码56
5.6.1  主引导扇区有效标志(伪指令times)56
5.6.2  代码的保存和编译57
5.7  加载和运行主引导扇区代码57
5.7.1 把编译后的指令写入主引导扇区57
5.7.2  启动虚拟机观察运行结果58
本章习题59
第六章  相同的功能,不同的代码60
6.1  本章代码清单60
6.2  跳过非指令的数据区62
6.3  在数据声明中使用字面值62
6.4  段地址的初始化62
6.5  段之间的批量数据传送(cld/std/movsb/movsw)63
6.6  使用循环分解数位(inc /loop)64
6.7  计算机中的负数65
6.7.1  无符号数和有符号数(neg/cbw/cwd)65
6.7.2  处理器视角中的数据类型(sub/ idiv)68
6.8  数位的显示(dec/jns)70
6.9  其它标志位和条件转移指令71
6.9.1  奇偶标志位PF(Parity Flag)71
6.9.2  进位标志CF(Carry Flag)。71
6.9.3  溢出标志OF(overflow flag)71
6.9.4  现有指令对标志位的影响72
6.9.5  条件转移指令(cmp/jcc)72
6.10  NASM编译器的$和$$标记74
6.11  观察运行结果75
本章习题75
第七章  比高斯更快的计算76
7.1  从1加到100的故事76
7.2  本章代码清单76
7.3  显示字符串79
7.4  计算1到100的累加和79
7.5  累加和各个数位的分解和显示79
7.5.1  堆栈和堆栈段的初始化79
7.5.2  分解各个数位并压栈(or/push)80
7.5.3  出栈并显示各个数位(pop)82
7.5.4  进一步认识堆栈82
7.6  程序的编译和运行83
7.7  8086处理器的寻址方式83
7.7.1  寄存器寻址84
7.7.2  立即寻址84
7.7.3  内存寻址84
本章习题88
第八章  直接硬盘读和带光标跟随的字符显示89
8.1  本章代码清单89
8.1.1  本章意图89
8.1.2  主引导扇区(加载器)代码清单89
8.1.3  用户程序代码清单94
8.2  用户程序的结构99
8.2.1  分段、段的汇编地址和段内汇编地址99
8.2.2  用户程序头部101
8.3  加载程序(器)的工作流程102
8.3.1  初始化和决定加载位置(伪指令equ)102
8.3.2  准备加载用户程序103
8.3.3  外围设备及其接口104
8.3.4  I/O端口和端口访问(in/out)105
8.3.5  通过硬盘控制器端口读扇区数据107
8.3.6  过程调用(call/call far/ret/retf)109
8.3.7  加载用户程序113
8.3.8  用户程序重定位(adc/shr/shl/ror/rol)114
8.3.9  将控制权交给用户程序(jmp far)116
8.3.10  8086处理器的无条件转移指令116
8.4  用户程序的工作流程118
8.4.1  初始化段寄存器和堆栈切换118
8.4.2  调用字符串显示例程119
8.4.3  过程的嵌套119
8.4.4  屏幕光标控制120
8.4.5  取当前光标位置120
8.4.6  处理回车和换行字符(mul)121
8.4.7  显示可打印字符122
8.4.8  滚动屏幕内容122
8.4.9  重置光标122
8.4.10  切换到另一个代码段中执行123
8.4.11  访问另一个数据段123
8.5  编译和运行程序并观察结果123
本章习题124
第九章  中断和动态时钟显示125
9.1  外部硬件中断125
9.1.1  非屏蔽中断125
9.1.2  可屏蔽中断(cli/sti)126
9.1.3  实模式下的中断向量表(iret)127
9.1.4  实时时钟、CMOS RAM和BCD编码128
9.1.5  本章代码清单①132
9.1.6  初始化8259、RTC和中断向量表139
9.1.6  使处理器进入低功耗状态(hlt/not)140
9.1.7  实时时钟中断的处理过程(test)141
9.1.8  代码清单①的编译和运行143
9.2  内部中断143
9.3  软中断(int3/int/into)143
9.3.1  常用的BIOS中断144
9.3.2  代码清单②146
9.3.3  从键盘读字符并显示148
9.3.4  代码清单②的编译和运行148
本章习题148
第十章  聆听数字的声音149
10.1  本章意图149
10.1.1  过气的直接存储器访问149
10.1.2  绝迹的Sound Blaster 16声卡150
10.1.3  代码清单10-1151
10.2  声卡和声卡的初始化158
10.2.1  Sound Blaster 16声卡简介158


10.2.2  初始化声卡的DSP芯片158
10.3  声卡中断159
10.3.1  中断和声音播放的关系159
10.3.2  在声音播放中使用中断160
10.4  DMA控制器的结构、功能和初始化161
10.4.1  个人计算机中的DMA控制器161
10.4.2  初始化DMA控制器(伪指令incbin)161
10.5  启动音频播放(xchg)165
10.6  音频回放中断处理166
10.7  程序的编译和运行166
本章习题167
第3部分   32位保护模式168
第十一章  32位INTEL微处理器编程架构169
11.1  INTEL处理器简史169
11.2  32位处理器的基本结构169
12.8.2  对push和pop指令的再探讨169
第十二章  进入保护模式171
12.1  代码清单12-1171
12.2  全局描述符表GDT174
12.3  存储器的段描述符174
12.4  安装存储器的段描述符并加载GDTR(lgdt)177
12.5  关于第21条地址线A20的问题179
12.6  保护模式下的内存访问180
12.7  清空流水线并串行化处理器183
12.8  保护模式下的堆栈184
12.8.1  关于堆栈段描述符中的界限值184
12.8.2  检验32位下的堆栈操作184
12.9  程序的编译和运行185
本章习题185
第十三章  存储器的保护186
13.1  代码清单13-1186
13.2  进入32位保护模式189
13.2.1  话说mov ds,ax和mov ds,eax189
13.2.2  创建GDT并安装段描述符190
13.3  修改段寄存器时的保护191
13.4  地址变换时的保护193
13.4.1  代码段执行时的保护193
13.4.2  堆栈操作时的保护194
13.4.3  数据访问时的保护195
13.5  使用别名访问代码段对字符排序196
13.6  程序的编译和运行197
本章习题198
第十四章  程序的动态加载和执行199
14.1  本章代码清单199
14.1.1  代码清单14-1(主引导程序)199
14.1.2  代码清单14-2(微型内核)205
14.1.3  代码清单14-3(用户程序)219
14.2  内核的结构、功能和加载221
14.2.1  内核的结构221
14.2.2  内核的加载221
14.2.3  安装内核的段描述符(bswap)223
14.3  在内核中执行(cpuid)226
14.4  用户程序的加载和重定位227
14.4.1  用户程序的结构227
14.4.2  计算用户程序占用的扇区数(cmovcc)228
14.4.3  简单的动态内存分配230
14.4.4  段的重定位和描述符的创建(sgdt/movzx/movsx)230
14.4.5  重定位用户程序内的符号地址(cmpsb/cmpsw/cmpsd)233
14.5  执行用户程序237
14.6  代码的编译、运行和调试(xlat)238
本章习题239
第十五章  任务和特权级保护241
15.1  任务的隔离和特权级保护241
15.1.1  任务、任务的LDT和TSS241
15.1.2  全局空间和局部空间243
15.1.3  特权级保护概述244
15.2  代码清单15-1249
15.3  内核程序的初始化270
15.3.1  调用门(CALL-GATE)270
15.3.2  调用门的安装和测试272
15.4  加载用户程序并创建任务274
15.4.1  任务控制块TCB和TCB链274
15.4.2  使用堆栈传递过程参数276
15.4.3  加载用户程序277
15.4.4  创建局部描述符表LDT277
15.4.5  重定位U-SALT表278
15.4.6  创建0、1和2特权级的堆栈279
15.4.7  安装LDT描述符到GDT中279
15.4.8  任务状态段TSS的格式(PUSHF/PUSHFD/POPF/POPFD)280
15.4.9  创建任务状态段TSS283
15.4.10  安装TSS描述符到GDT中283
15.4.11  带参数的过程返回指令(RET n/RETF n)284
15.5  用户程序的执行285
15.5.1  通过调用门转移控制的完整过程285
15.5.2  进入3特权级的用户程序执行(ltr/lldt)288
15.5.3  检查调用者的请求特权级RPL(arpl)290
本章习题291
第十六章  任务转换292
16.1  本章代码清单292
16.1.1  代码清单16-1(系统内核)292
16.1.2  代码清单16-2(用户程序)314
16.2  任务转换前的设置316
16.3  任务转换的方法317
16.4  用CALL/JMP/IRET指令发起任务转换的实例319
16.5  处理器在实施任务转换时的操作323
16.6  程序的编译和运行324
本章习题325
第十七章  分页机制和动态页面分配326
17.1  分页机制概述326
17.1.1  简单的分页模型326
17.1.2  页目录、页表和页329
17.1.3  地址变换的具体过程330
17.2  本章代码清单331
17.2.1  代码清单17-1(系统内核)331
17.2.2  代码清单17-2(用户程序)355
17.3  使内核在分页机制下工作357
17.3.1  创建内核的页目录和页表357


17.3.2  任务全局空间和局部空间的页面映射361
17.4  创建内核任务364
17.4.1  内核的虚拟内存分配364
17.4.2  页面位映射串和空闲页的查找(bts/btr/btc/bt)365
17.4.3  创建页表并登记分配的页367
17.4.4  创建内核任务的TSS368
17.5  用户任务的创建和切换368
17.5.1  多段模型和段页式内存管理368
17.5.2  平坦模型和用户程序的结构369
17.5.3  用户任务的虚拟地址空间分配370
15.5.4  用户程序的加载371
15.5.5  段描述符的创建(平坦模型)373
15.5.6  重定位U-SALT并复制页目录表374
15.5.7  转换到用户任务执行376
15.6  程序的编译和执行376
本章习题377
第十八章  中断和异常的处理378
18.1  中断和异常378
18.1.1  中断和异常概述378
18.1.2  中断描述符表、中断门和陷阱门380
18.1.3  中断和异常处理程序的保护382
18.1.4  中断任务383
18.1.5  错误代码384
18.2  本章代码清单384
18.2.1  代码清单18-1(主引导程序)384
18.2.2  代码清单18-2(系统内核)390
18.2.3  代码清单18-3(用户任务一)414
18.2.4  代码清单18-4(用户任务二)416
18.3  内核的加载和初始化418
18.3.1  彻底终结多段模型418
18.3.2  创建中断描述符表IDT420
18.3.3  用定时中断实施任务切换421
18.3.4  8259A芯片的初始化(lidt)425
18.3.5  平坦模型下的字符串显示例程427
18.4  内核任务的创建428
18.4.1  创建内核任务的TCB428
18.4.2  宏汇编技术429
18.5  用户任务的创建431
18.5.1  准备加载用户程序431
18.5.2  转换后援缓冲器TLB的刷新432
18.5.3  用户任务的创建和初始化(invlpg)433
18.6  程序的编译和执行434
本章习题435


[解决办法]
这是本没出版的书。2012年9月份出版。还有一个来月吧。电子工业出版社的。有兴趣的话加群92033881

作者的话:
首先,不能走老路,一上来就讲指令、寻址方式啥的;采用任务驱动方式来写,在解决问题的过程中,引入一个个的指令,并进行讲解。
其次,汇编和硬件并举,完全抛弃BIOS和DOS,以及BIOS中断和DOS中断,完全直接访问硬件,发挥汇编语言的长处。这样,读者才会深刻体会到汇编的妙处,以及汇编的真正意义和精髓。
[解决办法]
对了,忘了告诉你,这是上册。下册侧重于介绍64位工作模式、多处理器管理、高速缓存控制、温度和电源管理、高级可编程中断控制器、多媒体支持等。也许还包括了PCI(E)总线控制和HD声卡的访问。
[解决办法]
对了,忘了告诉你,这是上册。下册侧重于介绍64位工作模式、多处理器管理、高速缓存控制、温度和电源管理、高级可编程中断控制器、多媒体支持等。也许还包括了PCI(E)总线控制和HD声卡的访问。
[解决办法]


[解决办法]
加一个
[解决办法]
引用:
你要滴是介么一本书么?看看下面的目录。
---------------------------------------------
目录
前 言 3
目 录 4
第1部分 预备知识 5
第一章 十六进制计数法 6
1.1 二进制计数法回顾 6
1.1.1 关于二进制计数法 6
1.1.2 二进制到十进制的转换 6
1.1.3 十进制到二进制的转换 7
1.2 十六进制计数法 ……

等待买书中……
[解决办法]
  都一样的吧  主要是你懂的变通
[解决办法]
要看自己了
[解决办法]
看罗云彬的那本win32的汇编,书名忘了
[解决办法]
intel汇编语言程序设计

汇编语言程序设计艺术
[解决办法]
和楼主同样处境。。。 
------解决方案--------------------


引用:
这是本没出版的书。2012年9月份出版。还有一个来月吧。电子工业出版社的。有兴趣的话加群92033881

作者的话:
首先,不能走老路,一上来就讲指令、寻址方式啥的;采用任务驱动方式来写,在解决问题的过程中,引入一个个的指令,并进行讲解。
其次,汇编和硬件并举,完全抛弃BIOS和DOS,以及BIOS中断和DOS中断,完全直接访问硬件,发挥汇编语言的长处。这样,读者才会深刻体会到汇编的妙……



L没有说书名,囧..
[解决办法]
建议继续进阶 《自己动手写操作系统>

要用,不用永远不会透彻。
[解决办法]
看什么看,再看成书呆子了,半本看完就可以动手干了,手头一本指令手册就行了。
这种书又不是文化名著,也不是宗教典籍,你研究它干什么。
[解决办法]
intel彙編語言程序設計(32位的)
IBM-PC彙編語言程序設計

热点排行