汇编语言编程艺术

  中文名称:汇编语言编程艺术
英文名称:The Art of Assembly Language
版本:清晰版PDF
发行时间:2005年01月
语言:普通话
简介
00000001.jpg

【书 名】 汇编语言编程艺术
【原 书 名】 The Art of Assembly Language
【原出版社】 No Starch
【作 者】Randall Hyde [同作者作品] [作译者介绍]
【译 者】 陈曙晖[同译者作品]
【出 版 社】 清华大学出版社 【书 号】 7302090572
【出版日期】 2005 年1月 【开 本】 185×260 【页 码】 796 【版 次】1-1

【内容简介】
译者简介:
陈曙晖,国防科技大学计算机专业博士,老师。1998年参加工作,在国防科技大学网络与信息安全研究所从事银河超级计算机网络系统和核心路由器的开发工作,担任核心路由器配置管理分系统的开发负责人,曾获得军队科技进步奖一等奖一项(银河超级计算机网络系统)、二等奖一项(核心路由器系统)。
审校者简介:
毛希平,博士,清华大学计算机系老师,主讲“汇编语言程序设计”课程,并在清华大学计算机系高性能计算研究所从事研究工作,主要研究方向:并行计算和网格计算。
查看本书序言(作者:清华大学教授 温冬婵)

相信很多人都看过该书的网络版,它浓缩了网络版的精华,特别是对HLA的讲解,可谓入木三分。——Cherry Lam(高级程序员,印度)
我一直认为,只有经过多年的学习和实际演练,才能掌握汇编语言程序设计,这本书改变了我的看法。——James Brodin (软件公司技术总监,美国)
对于想快速成为汇编语言开发人员的学习者来说,本书是多年难遇的好书。——Conny Meilin(大学教授,瑞典)
作者将多年来的开发和教学经验融合在大量的编程实例中,读者通过本书能快速地学会汇编语言程序设计,掌握其中的编程技巧 ——温冬婵(清华大学教授,中国)

本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的各种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、文件、宏指令、位处理指令、字符串指令、MMX指令、类和对象,以及混合语言编程等,尤其是在高级汇编语言(HLA)方面,该书给予了细致深入的讲解。对于有意学习X86汇编语言编程的程序员来说,这是一本难得的好书。 本书的作者Randall Hyde在大学中教授汇编语言十多年,并且开发了好几个商用软件,具有丰富的汇编语言开发经验。该书的英文电子版受到了成千上万的网站和高级程序员的高度评价,已经成为了高级汇编语言编程方面的一本经典之作。虽然该书的出版时间不长,但在Amazon上为该书作出评价的人很多,而且几乎所有的人都给予5星的评价,可见其内容之好。笔者相信,随着时间的推移,它在程序员中的影响回越来越大。


【作译者介绍】
本书提供作译者介绍
译者简介:陈曙晖,国防科技大学计算机专业博士,老师。1998年参加工作,在国防科技大学网络与信息安全研究所从事银河超级计算机网络系统和核心路由器的开发工作,担任核心路由器配置管理分系统的开发负责人,曾获得军队科技进步奖一等奖一项(银河超级计算机网络系统)、二等奖一项(核心路由器系统)。 审校者简介:毛希平,博士,清华大学计算机系老师,主讲“汇编语言程序设计”课程,并在清华大学计算机系高性能计算研究所从事研究工作,主要研究方向:并行计算和网格计算。



【《汇编语言编程艺术 - 》图书目录】 第1章 进入汇编语言的世界
1.1 本章概述
1.2 HLA程序的结构
1.3 运行第一个HLA程序
1.4 基本的HLA数据声明
1.5 布尔值
1.6 字符值
1.7 Intel80x86处理器简介
1.8 基本的机器指令
1.9 基本的HLA控制结构
1.10 HLA标准库入门
1.11 关于TRY..ENDTRY的其他细节
1.12 高级汇编语言与底级汇编语言比较
1.13 更多信息
第2章 数据表示
2.1 本章概述
2.2 数字系统
2.3 十六进制数字系统
2.4 数据结构
2.5 二进制数与十六进制数的算术运算
2.6 关于数字及其表示法
2.7 位逻辑运算
2.8 二进制数和位串的逻辑运算
2.9 有符号数和无符号数
2.10 符号扩展、零扩展、压缩和饱和
2.11 侈位和缩环移位
2.12 位域和压缩数据
2.13 浮点运算简介
2.14 BCD数据表示
2.15 字符
2.16 Unicode字符集
2.17 更多信息
第3章 存储器的访问与结构
3.1 本章概述
3.2 80x86的寻址方式
3.3 运行时存储器的结构
3.4 HLA如何为变量分配内存
3.5 HLA对数据对齐的支持
3.6 地址表达式
3.7 类型强制转换
3.8 寄存器类型强制转换
3.9 栈段与PUSH及POP指令
3.10 动态内存分配和堆段
3.11 INC和DEC指令
3.12 获取存储器对象的地址
3.13 更多信息
第4章 常量、变量与数据类型
4.1 本章概述
4.2 一些额外的指令:INTMUL、BOUND、INTO
4.3 TBYTE数据类型
4.4 HLA常量和数值声明
4.5 HLA和TYPE段
4.6 ENUM和HLA枚举数据类型
4.7 指针数据类型
4.8 HLA标准库CHARS.HHF模型
4.9 复合数据类型
4.10 字符串
4.11 HLA字符串
4.12 访问字符中的某个字符
4.13 HLA字符串模块和其他与字符串机关的例程
4.14 存储器内转换
4.15 字符集
4.16 在HLA中实现字符集
4.17 HLA字符集常量和字符集表达工
4.18 HLA HLL布尔表达式中的IN操作符
4.19 HLA标准库对字符集的支持
4.20 在HLA程序中使用字符集
4.21 数组
4.22 在HLA程序中声明数组
4.23 HLA数组常量
4.24 访问一维数组的元素
4.25 多维数组
4.26 多维数组的存储空间分配
4.27 汇编语言中多维数组元素的访问
4.28 大数组和MASM(只适用于Windows程序员)
4.29 记录
4.30 记录常量
4.31 记录数组
4.32 数组/记录作为记录字段
4.33 控制记录中的字面偏移量
4.34 对齐记录中的字段
4.35 记录指针
4.36 联合
4.37 匿名联合
4.38 变量类型
4.39 联合常量
4.40 命名空间
4.41 汇编语言中的动态数组
4.42 HLA标准库数组支持
4.43 更多信息
第5章 过程与单元
5.1 本章概述
5.2 过程
5.3 机器状态的保存
5.4 过程的提前返回
5.5 局部变量
5.6 其他局部和全局符号类型
5.7 参数
5.8 函数和函数的结果
5.9 递归
5.10 过程的向前引用
5.11 过程的底层实现与CALL指令
5.12 过程与堆栈
5.13 活动记录
5.14 标准入口序列
5.15 标准出口序列
5.16 自动(局部)变量的底层实现
5.17 参数的度层实现
5.18 过程指针
5.19 过程参数
5.20 无类型的引用参数
5.21 管理大型程序
5.22 #INCLUDE伪指令
5.23 忽略重复的#INCLUDE操作
5.24 单元与EXTERNAL伪指令
5.25 命名空间的污染
5.26 更多信息
第6章 算术运算
6.1 本章概述
6.2 80x86的整数运算指令
6.3 算术表达式
6.4 逻辑(布尔)表达式
6.5 机器特征与运算技巧
6.6 浮点运算
6.7 浮点表达式到汇编语言的转换
6.8 HLA标准库对浮点算术运算的支持
6.9 算术运算小结
第7章 低级控制结构
7.1 本章概述
7.2 低级控制结构
7.3 语句标号
7.4 无条件控制转移(JMP)
7.5 条件跳转指令
7.6 “中级”控制结构:JT和JF
7.7 使用汇编语言实现通用控制结构
7.8 选择
7.9 状态机和间接跳转
7.10 “面条式”代码
7.11 循环
7.12 性能提高
7.13 HLA中的混合控制结构
7.14 更多信息
第8章 文件
8.1 本章概述
8.2 文件组织
8.3 顺序文件
8.4 随机访问文件
8.5 ISAM文件
8.6 截断文件
8.7 更多信息
第9章 高级算术运算
9.1 本章概述
9.2 多精度操作
9.3 对不同长度的操作数进行操作
9.4 十进制算术运算
9.5 表
9.6 更多信息
第10章 宏与HLA编译时语言
10.1 本章概述
10.2 编译时语言
10.3 #PRINT和#ERROR语句
10.4 编译时常量和变量
10.5 编译时表达式和操作符
10.6 编译时函数
10.7 条件编译(编译时决定)
10.8 重复编译(编译时循环)
10.9 宏(编译时过程)
10.10 编写编译时“程序”
10.11 在不同的源文件中使用宏
10.12 更多信息
第11章 位操作
11.1 本章概述
11.2 位数据
11.3 位操作指令
11.4 作为位累加器的进位标志位
11.5 位串的压缩与解压缩
11.6 接合位组与分布位串
11.7 压缩的位串数组
11.8 搜索位
11.9 位的计数
11.10 倒置位串
11.11 合并位串
11.12 提取位串
11.13 搜索位模式
11.14 HLA标准库的位模块
11.15 更多信息
第12章 字符串指令
12.1 本章概述
12.2 80x86字符串指令
12.3 80x86字符串指令的性能
12.4 更多信息
第13章 MMX指令集
13.1 本章概述
13.2 判断CPU是否支持MMX指令集
13.3 MMX编程环境
13.4 设计MMX指令集的目的
13.5 饱和算未能和回转模式
13.6 MMX指令操作数
13.7 MMX技术指令
第14章 类与对象
14.1 本章概述
14.2 通用原则
14.3 HLA中的类
14.4 对象
14.5 继承
14.6 重载
14.7 虚拟方法与静态过程
14.8 编写类方法和过程
14.9 对象实现
14.10 构造函数和对象初始化
14.11 析构函数
14.12 HLA的“_initialize_”和“_finalize_”字符串
14.13 抽像方法
14.14 运行时类型信息(RTTI)
14.15 调用基类的方法
14.16 更多信息
第15章 混合语言编程
15.1 本章概述
15.2 在同一程序中混合使用HLA和MASM/Gas代码
15.3 使用Delphi/Kylix和HLA编程
15.4 使用C/C++和HLA编程
15.5 更多信息
附录A ASCII字符集
附录B 80x86指令集
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、问题描述 课题1:排序。要求从键盘上输入若干个人名,当输入完毕后,能显示正确的顺序。 课题2:编写一个类似于TT的英文打字测试程序。要求输入的字符能在屏幕上显示并报告所用时间。 二、设计思想 课题1:排序。程序分3个部分 (1) 等待用户输入数个人名,即输入字符串。本程序设定输入人名数为5到15个,运用了2个函数(input1,input2)实现。 定义 data1 db 21,0,22 dup('$') ;用于存放第一个字符串 data2 db 21,0,22 dup('$') ;用于存放第二个字符串 data3 db 21,0,22 dup('$') ;用于存放第三个字符串 data4 db 21,0,22 dup('$') ;用于存放第四个字符串 data5 db 21,0,22 dup('$') ;用于存放第五个字符串 data6 db 21,0,22 dup('$') ;用于存放第六个字符串 data7 db 21,0,22 dup('$') ;用于存放第七个字符串 data8 db 21,0,22 dup('$') ;用于存放第八个字符串 data9 db 21,0,22 dup('$') ;用于存放第九个字符串 dataa db 21,0,22 dup('$') ;用于存放第十个字符串 datab db 21,0,22 dup('$') ;用于存放第十一个字符串 datac db 21,0,22 dup('$') ;用于存放第十二个字符串 datad db 21,0,22 dup('$') ;用于存放第十三个字符串 datae db 21,0,22 dup('$') ;用于存放第十四个字符串 dataf db 21,0,22 dup('$') ;用于存放第十五个字符串 input1实现前五个字符串的输入,调用0A号功能实现输入,当用户没有输入字符而直接回车时,程序会判断为输入错误,直到输入字符为止,此时按下回车,会转到下个字符串的输入。 input2实现后10个字符串的输入,调用0a号功能实现输入,当用户没有输入字符而直接回车时,程序会判断用户选择结束输入,跳转出input2函数。实现了用户连续按两下回车(注意:第一个回车为前一个字符串的结束回车,此后再按一次回车就表示退出),直接退出输入的功能。 (2)人名排序,即字符串排序。 采用冒泡排序的方法,进行双重循环,内循环实现字符串的比较交换,若前一 个字符串大则跳转去交换,小或者相等则跳转去比较下两个字符串。 外循环是在内部循环结束后继续从第一个字符串开始跳转到内部循环,保证顺序排好。 另外字符串本身的比较也是一重循环,以字符串结尾符号'$'控制比较次数。 交换部分则是两个存储单元的完全交换(从第一个字符到最后一个字符)。 (3)输出排序好的人名 最后将排序好的字符串依次输出在屏幕上。 三、课程设计体会 在此次课程设计中,我与吕鑫等人一组,我们综合利用了80X86汇编语言程序设计这门课中所学的所有知识,实践操作了多种指令的功能,丰富了用汇编语言编程的经验。也从中体会到了用汇编编程的难处。 在以小组为单位的课程设计制作过程中,我与其他组员相互讨论、配合,最后共同完成了2个课题要求的程序编写,极大提升了我团队共同合作的编程经验,受益匪浅。也提高了我分析问题、解决问题的能力。 课题2:TT英文打字测试程序要求程序有3功能 (1)在屏幕上输出一条字符串; 在程序中定义几段字符串 STR1 DB 'ABCD EFGH IJKL MNOP QRST UVWX YZ.' STR2 DB 'THERE ARE SOME NEWSPAPERS ON THE TABLE.' STR3 DB 'THERE ARE SOME CLOUDS IN THE SKY.' STR4 DB 'SHE ALWAYS EATS HER LUNCH AT NOON.' STR5 DB 'I DO NOT LIKE AUTUMN AND WINTER.' 运行时,在屏幕上依次输出这几段字符串,每输出一段字符串,便开始等待用户从键盘输入字符。 (2)从键盘上读入字符,并显示在屏幕上,以回车键结束输入; 首先用 INT 21H 从键盘读入一个字符,将读入的字符放入AL中,判断该字符是否是回车,若不是回车则马上用INT 10H 在当前光标位置上显示AL中的字符,若是回车则结束从键盘上读入字符。 (3)对从键盘上读入字符的过程计时,并在输入结束后,将输入用时显示在屏幕上。 定义 SEC DW 0 ;sec表示秒钟 MIN DW 0 ;min表示分钟 HOURS DW 0 ;hours表示小时 将它们初始化为0。 输入字符结束后,依次将hours、min、mours赋值给ax,并输出在屏幕上,以分号隔开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值