什么是80X86宏汇编语言程序设计

什么是80X86宏汇编语言程序设计,第1张

《80X86宏汇编语言程序设计教程》以目前广泛使用的Pc机为平台,详细介绍了宏汇编语言的基本概念、程序设计的基本方法与技巧。全书共10章,主要内容包括:宏汇编语言、程序设计的基本技巧、输入/输出程序设计、32位CPU扩展功能、汇编语言上机内容与要求。《80X86宏汇编语言程序设计教程》内容详实,叙述细腻易懂,在章节安排上由浅入深,指令介绍与指令应用紧密结合,使得知识易于理解和掌握。《80X86宏汇编语言程序设计教程》可作为高等院校计算机及相关专业“汇编语言程序设计”课程教材,也可作为独立学院、高职高专计算机及相关专业、有关工程技术人员的教学参考书。 编辑推荐《80X86宏汇编语言程序设计教程》:计算机科学与技术系列教材 目录

第1章 基础知识

11 计算机语言概述

111 机器语言

112 汇编语言

113 高级语言

114 非过程性语言

115 汇编语言的特点

12 计算机中数据的表示方法

121 进位计数制

122 数制转换

123 计算机中数据的表示

习题1

第2章 8086/8088计算机系统组织

21 8086/8088CPU的内部结构

211 8086CPU的功能结构

212 8086CPU的寄存器结构

22 存储器组织

221 存储器的地址和内容

222 存储器的分段

23 堆栈

231 堆栈的特点

232 堆栈的作用

233 堆栈的 *** 作

习题2

第3章 汇编语言语法与寻址方式

31 汇编语言语句类型及格式

311 语句类型

312 指令语句格式

32 伪指令

321 段定义伪指令

322 数据定义

323 符号定义伪指令

324 与地址有关的伪指令

325 常用伪指令

33 表达式

331 常量

332 数值表达式

333 地址表达式

34 寻址方式

341 立即数寻址方式

342 寄存器寻址方式

343 存储器型寻址方式

344 外设型寻址方式

35 汇编语言源程序结构

36 常用DOS功能调用

习题3

第4章 汇编语言指令系统

41 数据传送指令

42 算术运算指令

43 位 *** 作指令

44 处理器控制指令

习题4

第5章 汇编语言基本程序设计

51 汇编语言程序设计步骤

52 顺序结构程序设计

53 分支结构程序设计

531 转移地址的寻址方式

532 无条件转移指令

533 条件转移指令

534 分支结构程序设计

54 循环结构程序设计

541 循环控制结构

542 循环控制指令

543 循环程序设计方法

544 多重循环程序设计举例

55 串 *** 作程序设计

551 串 *** 作概述

552 串 *** 作指令及程序设计

习题5

第6章 汇编语言模块化程序设计

61 子程序设计

611 子程序概述

612 子程序的调用与返回指令

613 子程序的定义

614 主程序与子程序的参数传递

615 子程序的嵌套

62 模块化程序设计

621 模块的装配连接

622 模块问的通信

623 模块化程序设计举例

习题6

第7章 高级汇编语言程序设计

71 宏汇编

711 宏指令的使用

712 宏与子程序的区别

713 与宏有关的伪指令

714 宏库的建立与使用

72 重复汇编

73 条件汇编

74 数据结构

75 数据记录

76 汇编语言与高级语言的连接

761 嵌入汇编语言

762 多模块混合编程

习题7

第8章 输入/输出程序设计

81 输入/输出概述

811 I/O端口的编址方式

812 数据传送方式

82 数据的输入腧出

821 I/O指令

822 程序查询I/O方式

823 中断I/O方式

83 键盘输入控制

84 屏幕输出控制

85 打印机输出控制

86 磁盘文件 *** 作

861 文件概述

862 文件 *** 作的系统功能调用

863 文件管理程序设计

习题8

第9章 32位机新增指令及功能

91 80386的工作机制

911 80386CPU的内部结构

912 80386寄存器

913 80386存储器管理

914 存储模型与段的简化定义

915 80386的寻址方式

916 80386新增指令

92 80486系统

921 80486CPU结构

922 80486的内存管理和高速缓存

923 80486扩充指令

93 Pentium系统

931 PendumCPU结构

932 Penfium扩充指令

94 程序举例

习题9

第10章 实验指导

101 汇编语言上机过程及调试工具

102 分支程序设计

103 循环程序设计

104 子程序设计(一)

105 子程序设计(二)

106 字符处理程序设计

107 中断程序设计

108 磁盘文件管理程序设计

109 模块化程序设计

1010 综合程序设计

附录A ASCII码表

附录B 调试工具DEBUG

参考文献

…… [看更多目录] 序言《80X86宏汇编语言程序设计教程》是高等院校计算机硬、软件及应用专业学生都必须学习的核心课程之一,它是计算机组成原理、 *** 作系统及其他核心课程的基础课,也是微机原理、单片机应用等课程的学习基础。同时,该课程对于训练学生掌握程序设计技术、熟悉上机 *** 作和程序调试技术都有重要作用。

《80X86宏汇编语言程序设计教程》的内容十分丰富,知识量大,是一门教师普遍感到难教、学生普遍感到难学的课程。为了满足教师和学生的教学需要,作者根据本课程的特点及知识结构,在多年教授这门课程的教学经验的基础上编写了此书,以期能帮助学生快速熟练地掌握相关知识,同时为教师的教学提供指导。

本书共10章,分为两大部分和两个附录,各部分内容如下:

第一部分:第1~9章。详细介绍了16位80X86 CPU的宏汇编程序设计。第1章基础知识,介绍了学习汇编语言程序设计所需的数据编码与运算等若干预备知识。第2章8086/8088计算机内部体系结构,介绍8086/8088 CPU内部结构和存储器管理。第3章汇编语言语法及七种寻址方式,主要介绍了宏汇编语言中的各种符号、表达式、伪指令语句、寻址方式及常用的系统功能调用。第4章汇编语言指令系统,全面介绍了8086指令系统中数据传送指令、算术运算指令、逻辑运算指令、处理器控制指令。第5章汇编语言基本程序设计,系统介绍了程序的三种基本结构(顺序结构、分支结构及循环结构)及串 *** 作指令的设计方法与技巧,同时对实现这些结构的转移指令、循环指令和串指令也作了详细介绍。第6章汇编语言模块化程序设计,介绍了子程序及模块化程序设计。第7章高级汇编语言程序设计,介绍了宏的定义与调用方法、重复汇编、条件汇编等技术,特别介绍了汇编语言与高级语言的混合编程。第8章输入/输出程序设计,介绍了输入/输出数据传送方式、中断技术、软中断程序设计及DOS与BIOS中断调用。第9章32位机新增指令及功能,以典型的32位80386 CPU为例,介绍了32位CPU的工作模式、内部寄存器、内存管理、寻址方式、新增指今等扩展功能。 文摘插图:

1.1.3高级语言

尽管汇编语言比机器语言方便,但汇编语言仍然具有许多不便之处,程序编写的效率远远不能满足需要。1954年,第一个高级语言FORTRAN问世了。高级语言是一种与具体的计算机硬件无关、独立于机器的通用语言,它比较接近人类自然语言的语法及数学表达式,人们用高级语言编程不必了解和熟悉机器的指令系统,更容易被人们掌握和使用。高级语言采用接近自然语言的词汇,其程序的通用性强,易学易用,这些语言面向计算机求解问题的过程,不依赖具体机器,与特定机器相分离。计算机不能直接执行高级语言程序,高级语言程序必须先翻译转换成“目标程序”(即机器语言程序)才能被执行。这种翻译转换工作由被称为“编译程序”的专门软件来完成,其过程如图1.2所示。

高级语言翻译成机器语言有两种方式,一种是先把高级语言程序翻译成机器语言程序,然后在机器上执行,这种翻译称为编译方式,大多数高级语言如PASCAL语言、c语言等都是采用这种方式;另一种方式是直接把高级语言程序在机器上运行,一边解释一边执行,这种翻译方式称为解释,如BASIC语言就采用这种方式。每一种高级语言都有自己的编译程序,在一台计算机上运行某一种高级语言源程序的前提是该计算机系统配置了该语言的编译程序。

高级语言源程序在不对硬件编程时,是在未考虑机器结构的特点下编写的,经过翻译后的目标程序往往不够精练,过于冗长,加大了目标程序的长度,导致存储空间占用较大和执行时间较长。

1.1.4非过程性语言

面向过程的高级语言称为过程性语言,用它编程序必须写出每一步如何进行的全过程。程序设计者必须具体指出执行的每一个细节(例如,输入一个数给某一变量、进行某一公式的运算、进行什么条件判断、执行多少次循环等)。这要求程序设计人员考虑得十分周到,稍有不慎(例如写错一个字母),就会导致程序运行失败。

§微机原理及应用 参考书目:《80X86/Pentium微x型计算机原理及应用》吴宁主编,电子工业出版社;或者《单片机原理及应用》张毅刚主编,彭喜元、董继成副主编,高等教育出版社出版(普通高等教育“十五” 国家级规划教材)。

微机原理和应用是一门应用性课程。本课程较全面、系统地介绍计算机微处理器的硬件系统、指令系统、汇编程序设计方法、输入/输出和中断技术。考生可以选择MCS-51系列单片机或者80X86/Pentium作为复习考试内容,考题的形式有填空题、判断题、简述基本概念题、程序阅读题、程序编写题、系统硬件扩展题等,各自的复习参考书和考试内容范围如下:选择MCS-51系列单片机考生,复习参考书为:张毅刚主编,彭喜元、董继成副主编,高等教育出版社出版的《单片机原理及应用》。(普通高等教育“十五” 国家级规划教材),主要范围为: 1、MCS-51单片机的基本概念; 2、MCS-51单片机的硬件结构; 3、MCS-51单片机的指令系统; 4、MCS-51单片机的程序设计方法; 5、MCS-51单片机的定时器/计数器和中断系统; 6、MCS-51单片机的存储器和I/O接口的扩展设计。

选择80X86/Pentium考生,复习参考书为:吴宁主编,电子工业出版社出版的《80X86/Pentium微型计算机原理及应用》。(高等学校工科教材),主要范围为: 1、微型计算机的基本概念; 2、80X86/Pentium微处理器的硬件结构; 3、80X86/Pentium的指令系统; 4、80X86/Pentium汇编语言程序设计方法; 5、80X86/Pentium的中断系统; 6、80X86/Pentium定时器/计数器的扩展设计; 7、80X86/Pentium I/O接口的扩展设计。

1. (如果对参考书目和考试大纲有疑问,请咨询航空宇航学院,联系电话:025-84891274)

2. 南京航空航天大学研究生招生办公室 地址:南京市御道街29号 邮编:210016 联系电话:025-84892487

考试时8086和51单片机分别出一套题,但是在一套试卷内,所以学那一本无所谓,不过南航这边本科教学用的是8086,而主编吴宁就是南航教授。但我们本科教的是51,所以我考试用的是51单片机,其实没啥区别。

考研,南航重在初试,复试相对简单,先不急。

王爽<汇编语言程序设计>

罗云斌<Windows环境下32位汇编语言程序设计>

《会编的高手》

电子工业出版社出版的一套国外计算机专业教程中的一本名为《80X86汇编语言》(名字我可能记得不太准确)的书,这一套书还包括《 *** 作系统原理及实现(上、下册)》、《数据结构及算法分析》等数本我觉得都还不错,不妨去读一读。

DOS下深入汇编和 *** 作系统的书有:

< MS-DOS 50内核剖析> 最全面的DOS内核源码剖析书

<DOS 6x 高级编程> 肖力

<DOS 622 内核分析与内存管理技术>

在DOS时代,有很多掌握DOS内核的高手,而在WINDOWS时代,大部分只会可视编程,真正董

WINDOWS内核的人很少,一方面,WINDOWS较复杂,另一方面,这方面的资料很少,我从未见

国内出版社出版过WINDOWS环境用汇编编程的书(VXD领域除外),而可视编程的书却泛滥成灾,真可悲!

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

; -----------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -----------------------------------------

; 功能:输出一个字符

; 入口:dl=要显示的字符

Enter_Chr proc Near

push ax

mov ah,02h

int 21h

pop ax

ret

Enter_Chr endp

; -----------------------------------------

; 功能:输出回车换行

Enter_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Enter_CTLF endp

; -----------------------------------------

; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AL=转换后的ASCII码

AL_ASCII Proc Near

cmp al,10 ;AL<10

jb @@To_ASCII ;AL<10,按数字处理

add al,7 ;AL>=10,按大写字母处理

@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母

ret

AL_ASCII EndP

; -----------------------------------------

; 功能:将AL中的字节数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AX=转换后的ASCII码

Byte_ASCII Proc Near

push cx

mov cx,4

xor ah,ah ;将AH置0

shl ax,cl ;将AX左移4位

shr al,cl ;将AL右移4位

xchg ah,al

call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码

xchg ah,al

call AL_ASCII

xchg ah,al

pop cx

ret

Byte_ASCII EndP

; -----------------------------------------

; 功能:将AL中的字节数转换成十六进制显示的ASCII码,并在当前光标位置显示

; 入口:AL

; 出口:AX=转换后的ASCII码

ByteD_ASCII Proc Near

push dx

push ax

call Byte_ASCII ;将AL中的字节数转换成十六进制显示的ASCII码

mov dl,al

call Enter_Chr ;显示一个字符

mov dl,ah

call Enter_Chr ;显示一个字符

mov dl,'H'

call Enter_Chr ;显示一个字符

pop ax

pop dx

ret

ByteD_ASCII EndP

; -----------------------------------------

Prompt_Str1 db 'Please input a charactor: $'

Prompt_Str2 db 13,10,'The ASCII code of ('

Charactor db ,') is $'

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

Input_Chr: Output Prompt_Str1 ;提示输入一个字符

mov ah,1

int 21h

cmp al,13 ;回车

jz Exit_Proc ;结束程序

mov Charactor,al

Output Prompt_Str2 ;提示显示字符的ASCII码

mov al,Charactor

call ByteD_ASCII ;将AL中的字节数转换成十六进制显示的ASCII码,并在当前光标位置显示

call Enter_CTLF ;输出一个回车、换行

call Enter_CTLF ;输出一个回车、换行

jmp Input_Chr

Exit_Proc: mov ah,4ch ;结束程序

int 21h

String db

Code ENDS

END Start ;编译到此结束

学习编程依然是一个高频话题主要是程序员薪资高,大家都想计入这个行业,但是由于自己没有编程基础,所以发起了这个讨论,学习编程需要什么基础吗我觉得学习编程最重要的是入门,如果你入门的时候有一个好的方法和思路,打下比较扎实的基础,对今后的编程工作是很有益处的。北京电脑培训认为即使在学习新的编程语言也无所谓,因为它们有很多相通之处,可以相互借鉴。

1、英语基础

虽然对于初级程序员来说,英语只需要写简单的词汇就可以,但是如果想要走的更远,还是要去学习和掌握。

我极力推荐英语是因为在学习IT技术上,没有专业文档的阅读能力是不可想象的,中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把英文印刷上去,学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练,吃得苦下得狠心绝对是任何行业都需要的品质。

2、计算机体系结构和汇编语言

关于体系结构的书遍地都是,而且也大同小异,倒是汇编有一本非常好的书《80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著),你需要着重学习386后保护模式的程序设计。否则你在学习现代 *** 作系统底层的一些东西的时候会觉得是在看天书。

3、计算机 *** 作系统原理

我们的开发总是在特定的 *** 作系统上进行,如果不是,只有一种可能:你在自己实现一个 *** 作系统,无论如何, *** 作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。

4、数据结构和算法

这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的。很多人喜欢买C++版的,但我觉得没有必要,C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂,倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。

5、软件工程

这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。

希望楼主认真思考我说的每一句话,毕竟它费了我不少功夫。

一点开高分问题就看到了楼主的提问,对这个200分真的是垂涎三尺。导师给我说过,任何事情都要回答3个问题:what,why,how。做一件事情,要明白做什么,为什么去做,怎么做。楼主想要学习汇编,我不知道具体为什么要去学,1为了软件解密2大牛们说过想要在软件行业走的更远,汇编是一个很重要的基础,很多大牛都在搞底层的东西。所以觉得学了对以后的帮助很大。3听别人说汇编很难学,想尝试。4觉得高级语言不能很好的反映计算机的二进制世界。以上是我分析楼主的目的不知道有没有以上目的,或者是其他我没想到的。其实我刚进大学(我专业是机械设计)的时候也是看很多书上啊,网上啊都说汇编对编程的提高有很大的帮主,个人对编程又比较感兴趣,所以一开始什么基础都没有就在看些汇编的书,结果当时是看不太懂了,后来学习编程的知识多了,上机实验的次数多了,就明白以前看的了。当然我也是经常到汇编语言这个板块也大家共同的学习,编过简单的程序,有网友还说我的程序写的不错。我不知道楼主打算走多远,如果只是为了个HELLO WORLD的话,完全没有必要学习汇编,现在的高级语言实现这个功能实在是太简单了,做出来的还是标准的windows程序。随着软件业的发展,用汇编来实现某个工程已经不可能了。如果不是搞计算机专业的,我个人认为完全没必要去研究那个东西,其他专业像我们机械设计专业,CAPP这些软件也都是高级语言能够搞定,软件也许没做的很好,但是核心算法在的话,这个事情还是做的很好的。当然与单片机这些东西接触的话,懂点汇编还是比较有用。看完这段我相信楼主已经都比较深的了解了。

汇编比较好的书有:王爽老师《汇编语言》,杨季文老师的《80X86汇编语言程序设计》。看汇编不看保护模式的程序设计的话,汇编也就白学了,所以保护模式非常重要。当然这也是汇编一些应用的基础,比如软件解密,驱动的编写。有了好书,肯定会事半功倍的。这些书上也会肯定会有HELLO WORLD的实现。学习汇编首先从数制学起,各种数制的转换肯定也是非常重要的基础。然后学习基本的8086指令,程序设计的3种语句形式(顺序,循环,选择)接着是学习调用DOS的一些系统功能实现简单的程序,最后进入了最重要的一部分保护模式的程序设计,开始学习80386指令等等,我就不详说了,路漫漫其修远兮。以上还只是停留在DOS时代或者说是超级底层,还没有进入复杂的windows世界。现在的windows都是VISTA了。

好了,就说这么多了。楼主好自为之吧。HELLO WORLD代码到处都有,我就不详说了。

汇编其实也不是这么神秘,不过是很多人习惯了高级语言的东西,再看汇编就很不习惯了,因为很多事情都得自己做。包括栈的平衡等。楼主既然一定想做,那么就回答了2个问题,what,why。接下来就死haw了,编程的学习当时是要靠多上机练习。轻松汇编,这是一个大学生开发的汇编集成环境,初学的时候可以在上面用。学习编程,最重要的是调试,汇编代码级的调试也是软件解密的关键。所以学了汇编,比较高的境界就是看懂别人的程序,当然不是从源代码,而是反汇编代码。保护模式很重要,因为在windows下,自己肯定是弄不了保护模了。可以装个虚拟机VMwareWorkstation,里面安装DOS,在windows里面完成好程序后,用软件把它做成ISO文件,再进入DOS,执行保护模式程序,我是这么做的,不知道还有其他更简便的方法没有,你可以自己摸索下。以上是个人意见哈,供参考。

1、MASM。

微软公司为x86微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。

2、NASM。

全称TheNetwideAssembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

3、TASM。

Borland公司开发的汇编编译器,被广泛用于TurboC,QuickBasic等编译器,用作中间过渡编译。它也能独立的编译纯汇编或是Win32Asm的代码。具有编译快速,高效的特点,至今依然是汇编开发的首选利器。

4、GAS。

GNU汇编器(GNUAssembler),简称为GAS,是由GNU计划所使用的汇编器,GNU的核心精神是自由与分享,所以GAS亦是自由软件。

5、RadASM。

一款著名的WIN32汇编编辑器,支持MASM、TASM等多种汇编编译器,Windows界面,支持语法高亮,自带一个资源编辑器和一个调试器。拥有较强的工程管理功能,加之众多插件的支持,使得它用汇编语言编写Windows软件变得得心应手。

汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可程式器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的 *** 作码,用地址符号(Symbol)或标号(Label)代替指令或运算元的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

许多汇编程式为程式开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。

汇编语言不像其他大多数的程式设计语言一样被广泛用于程式设计。在今天的实际套用中,它通常被套用在底层,硬体 *** 作和高要求的程式最佳化的场合。驱动程式、嵌入式作业系统和实时运行程式都需要汇编语言。

基本介绍 中文名 :汇编语言 外文名 :Assembly Language 学科 :软体工程 产生年代 :20世纪50年代 编译方式 :汇编 发展历程,语言特点,总体特点,优点,缺点,语言组成,数据传送指令,整数和逻辑运算指令,移位指令,位 *** 作指令,条件设定指令,控制转移指令,串 *** 作指令,输入输出指令,相关技术,汇编器,编译环境,发展前景,实际套用,经典教材,x86处理器,ARM及单片机, 发展历程 说到汇编语言的产生,首先要讲一下机器语言。机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。 上面所说的计算机指的是可以执行机器指令,进行运算的机器。这是早期计算机的概念。在我们常用的PC机中,有一个晶片来完成上面所说的计算机的功能。这个晶片就是我们常说的CPU(Central Processing Unit,中央处理单元)。每一种微处理器,由于硬体设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。 早期的程式设计均使用机器语言。程式设计师们将用0, 1数字编成的程式代码打在纸带或卡片上,1打孔,0不打孔,再将程式通过纸带机或卡片机输入计算机,进行运算。这样的机器语言由纯粹的0和1构成,十分复杂,不方便阅读和修改,也容易产生错误。程式设计师们很快就发现了使用机器语言带来的麻烦,它们难于辨别和记忆,给整个产业的发展带来了障碍,于是汇编语言产生了。 汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。 *** 作:暂存器BX的内容送到AX中1000100111011000              机器指令mov ax,bx                    汇编指令 此后,程式设计师们就用汇编指令编写源程式。可是,计算机能读懂的只有机器指令,那么如何让计算机执行程式设计师用汇编指令编写的程式呢?这时,就需要有一个能够将汇编指令转换成机器指令的翻译程式,这样的程式我们称其为编译器。程式设计师用汇编语言写出源程式,再用汇编编译器将其编译为机器码,由计算机最终执行。 工作过程 语言特点 汇编语言是直接面向处理器(Processor)的程式设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。 汇编语言的另一个特点就是它所 *** 作的对象不是具体的数据,而是暂存器或者存储器,也就是说它是直接和暂存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,因为既然数据是存放在暂存器或存储器中,那么必然就存在着定址方式,也就是用什么方法找到所需要的数据。例如上面的例子,我们就不能像高级语言一样直接使用数据,而是先要从相应的暂存器AX、BX 中把数据取出。这也就增加了编程的复杂性,因为在高级语言中定址这部分工作是由编译系统来完成的,而在汇编语言中是由程式设计师自己来完成的,这无异增加了编程的复杂程度,降低了程式的可读性。 再者,汇编语言指令是机器指令的一种符号表示,而不同类型的CPU 有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程式与机器有着密切的关系。所以,除了同系列、不同型号CPU 之间的汇编语言程式有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU 之间的汇编语言程式是无法移植的,也就是说,汇编语言程式的通用性和可移植性要比高级语言程式低。 正因为汇编语言有“与机器相关性”的特性,程式设计师用汇编语言编写程式时,可充分对机器内部的各种资源进行合理的安排,让它们始终处于最佳的使用状态。这样编写出来的程式执行代码短、执行速度快。汇编语言是各种程式语言中与硬体关系最密切、最直接的一种,在时间和空间的效率上也最高的一种,它是高等院校计算机套用技术必修的专业课程之一,对于训练学生掌握程式设计技术,熟悉上机 *** 作和程式调试技术有重要作用 总体特点 1.机器相关性 这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程式。 2.高速度和高效率 汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬体设备,如磁碟、存储器、CPU、I/O连线埠等,且占用记忆体少,执行速度快,是高效的程式设计语言。 3.编写和调试的复杂性 由于是直接控制硬体,且简单的任务也需要很多汇编语言语句,因此在进行程式设计时必须面面俱到,需要考虑到一切可能的问题,合理调配和使用各种软、硬体资源。这样,就不可避免地加重了程式设计师的负担。与此相同,在程式调试时,一旦程式的运行出了问题,就很难发现。 优点 1、因为用汇编语言设计的程式最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬体设备,如磁碟、存储器、CPU、I/O连线埠等。使用汇编语言,可以访问所有能够被访问的软、硬体资源。 2、目标代码简短,占用记忆体少,执行速度快,是高效的程式设计语言,经常与高级语言配合使用,以改善程式的执行速度和效率,弥补高级语言在硬体控制方面的不足,套用十分广泛。 缺点 1、汇编语言是面向机器的,处于整个计算机语言层次结构的底层,故被视为一种低级语言,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器,编译的程式无法在不同的处理器上执行,缺乏可移植性; 2、难于从汇编语言代码上理解程式设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试; 3、使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行最佳化,开发效率很低,周期长且单调。 语言组成 数据传送指令 这部分指令包括通用数据传送指令MOV、条件传送指令CMOV 、堆叠 *** 作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等。注意,CMOV不是一条具体的指令,而是一个指令簇,包括大量的指令,用于根据EFLAGS暂存器的某些位状态来决定是否执行指定的传送 *** 作。 整数和逻辑运算指令 这部分指令用于执行算术和逻辑运算,包括加法指令ADD/ADC、减法指令SUB/SBB、加一指令INC、减一指令DEC、比较 *** 作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符号扩展指令CBW/CWDE/CDQE、十进制调整指令DAA/DAS/AAA/AAS、逻辑运算指令NOT/AND/OR/XOR/TEST等。 移位指令 这部分指令用于将暂存器或记忆体运算元移动指定的次数。包括逻辑左移指令SHL、逻辑右移指令SHR、算术左移指令SAL、算术右移指令SAR、循环左移指令ROL、循环右移指令ROR等。 位 *** 作指令 这部分指令包括位测试指令BT、位测试并置位指令BTS、位测试并复位指令BTR、位测试并取反指令BTC、位向前扫描指令BSF、位向后扫描指令BSR等。 条件设定指令 这不是一条具体的指令,而是一个指令簇,包括大约30条指令,用于根据EFLAGS暂存器的某些位状态来设定一个8位的暂存器或者记忆体运算元。比如SETE/SETNE/SETGE等等。 控制转移指令 这部分包括无条件转移指令JMP、条件转移指令J /JCXZ、循环指令LOOP/LOOPE/LOOPNE、过程调用指令CALL、子过程返回指令RET、中断指令INTn、INT3、INTO、IRET等。注意,J 是一个指令簇,包含了很多指令,用于根据EFLAGS暂存器的某些位状态来决定是否转移;INT n是软中断指令,n可以是0到255之间的数,用于指示中断向量号。 串 *** 作指令 这部分指令用于对数据串进行 *** 作,包括串传送指令MOVS、串比较指令CMPS、串扫描指令SCANS、串载入指令LODS、串保存指令STOS,这些指令可以有选择地使用REP/REPE/REPZ/REPNE和REPNZ的前缀以连续 *** 作。 输入输出指令 这部分指令用于同外围设备交换数据,包括连线埠输入指令IN/INS、连线埠输出指令OUT/OUTS。 高级语言辅助指令 这部分指令为高级语言的编译器提供方便,包括创建栈帧的指令ENTER和释放栈帧的指令LEAVE。 控制和特权指令 这部分包括无 *** 作指令NOP、停机指令HLT、等待指令WAIT/MWAIT、换码指令ESC、汇流排封锁指令LOCK、记忆体范围检查指令BOUND、全局描述符表 *** 作指令LGDT/SGDT、中断描述符表 *** 作指令LIDT/SIDT、局部描述符表 *** 作指令LLDT/SLDT、描述符段界限值载入指令LSR、描述符访问权读取指令LAR、任务暂存器 *** 作指令LTR/STR、请求特权级调整指令ARPL、任务切换标志清零指令CLTS、控制暂存器和调试暂存器数据传送指令MOV、高速快取控制指令INVD/WBINVD/INVLPG、型号相关暂存器读取和写入指令RDMSR/WRMSR、处理器信息获取指令CPUID、时间戳读取指令RDTSC等。 浮点和多媒体指令 这部分指令用于加速浮点数据的运算,以及用于加速多媒体数据处理的单指令多数据(SIMD及其扩展SSEx)指令。这部分指令数据非常庞大,无法一一列举,请自行参考INTEL手册。 虚拟机扩展指令 这部分指令包括INVEPT/INVVPID/VMCALL/VMCLEAR/VMLAUNCH/VMRESUME/VMPTRLD/VMPTRST/VMREAD/VMWRITE/VMXOFF/VMON等。 相关技术 汇编器 典型的现代 汇编器 (assembler)建造目标代码,由解译组语指令集的易记码(mnemonics)到 *** 作码(OpCode),并解析符号名称(symbolic names)成为存储器地址以及其它的实体。使用符号参考是汇编器的一个重要特征,它可以节省修改程式后人工转址的乏味耗时计算。基本就是把机器码变成一些字母而已,编译的时候再把输入的指令字母替换成为晦涩难懂机器码。 编译环境 用汇编语言等非机器语言书写好的符号程式称为源程式,汇编语言编译器的作用是将源程式翻译成目标程式。目标程式是机器语言程式,当它被安置在记忆体的预定位置上后,就能被计算机的CPU处理和执行。 汇编的调试环境总的来说比较少,也很少有非常好的编译器。编译器的选择依赖于目标处理器的类型和具体的系统平台。一般来说,功能良好的编译器用起来应当非常方便,比如,应当可以自动整理格式、语法高亮显示,集编译、连结和调试为一体,方便实用。 对于广泛使用的个人计算机来说,可以自由选择的汇编语言编译器有MASM、NASM、TASM、GAS、FASM、RADASM等,但大都不具备调试功能。如果是为了学习汇编语言,轻松汇编因为拥有一个完善的集成环境,是一款非常适合初学者的汇编编译器。 发展前景 汇编语言是机器语言的助记符,相对于比枯燥的机器代码易于读写、易于调试和修改,同时优秀的汇编语言设计者经过巧妙的设计,使得汇编语言汇编后的代码比高级语言执行速度更快,占记忆体空间少等优点,但汇编语言的运行速度和空间占用是针对高级语言并且需要巧妙设计,而且部分高级语言在编译后代码执行效率同样很高,所以此优点慢慢弱化。而且在编写复杂程式时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。常说汇编语言是低级语言,并不是说汇编语言要被弃之,相反,汇编语言仍然是计算机(或微机)底层设计程式设计师必须了解的语言,在某些行业与领域,汇编是必不可少的,非它不可适用。只是,现在计算机最大的领域为IT软体,也是我们常说的计算机套用软体编程,在熟练的程式设计师手里,使用汇编语言编写的程式,运行效率与性能比其它语言写的程式相对提高,但是代价是需要更长的时间来最佳化,如果对计算机原理及编程基础不扎实,反而增加其开发难度,实在是得不偿失,对比2010年前后的软体开发,已经是市场化的软体行业,加上高级语言的优秀与跨平台,一个公司不可以让一个团队使用汇编语言来编写所有的东西,花上几倍甚至几十倍的时间,不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多,就能抢先一步完成,这是市场经济下的必然结果。 但是,迄今为止,还没有程式设计师敢断定汇编语言是不需要学的,同时,汇编语言(Assembly Language)是面向机器的程式设计语言,设计精湛的汇编程式设计师,部分已经脱离软体开发,挤身于工业电子编程中。对于功能相对小巧但硬体对语言设计要求苛刻的行业,如4位单片机,由于其容量及运算,此行业的电子工程师一般负责从开发设计电路及软体控制,主要开发语言就是汇编,c语言使用只占极少部分,而电子开发工程师是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高,对比起来,一般电子工程师待遇是程式设计师的十倍以上。这种情况是因为21世纪以来,学习汇编的人虽然也不少,但是真正能学到精通的却不多,它相对于高级语言难学,难用,适用范围小,虽然简单,但是过于灵活,学习过高级语言的人去学习汇编比一开始学汇编的人难得多,但是学过汇编的人学习高级语言却很容易,简从繁易,繁从简难。对于一个全面了解微机原理的程式设计师,汇编语言是必修语言。 实际套用 随着现代软体系统越来越庞大复杂,大量经过了封装的高级语言如C/C++,Pascal/Object Pascal也应运而生。这些新的语言使得程式设计师在开发过程中能够更简单,更有效率,使软体开发人员得以应付快速的软体开发的要求。而汇编语言由于其复杂性使得其适用领域逐步减小。但这并不意味着汇编已无用武之地。由于汇编更接近机器语言,能够直接对硬体进行 *** 作,生成的程式与其他的语言相比具有更高的运行速度,占用更小的记忆体,因此在一些对于时效性要求很高的程式、许多大型程式的核心模组以及工业控制方面大量套用。 此外,虽然有众多程式语言可供选择,但汇编依然是各大学计算机科学类专业学生的必修课,以让学生深入了解计算机的运行原理。 历史上,汇编语言曾经是非常流行的程式设计语言之一。随着软体规模的增长,以及随之而来的对软体开发进度和效率的要求,高级语言逐渐取代了汇编语言。但即便如此,高级语言也不可能完全替代汇编语言的作用。就拿Linux核心来讲,虽然绝大部分代码是用C语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码。由于这部分代码与硬体的关系非常密切,即使是C语言也会显得力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬体的性能。 首先,汇编语言的大部分语句直接对应着机器指令,执行速度快,效率高,代码体积小,在那些存储器容量有限,但需要快速和实时回响的场合比较有用,比如仪器仪表和工业控制设备中。 其次,在系统程式的核心部分,以及与系统硬体频繁打交道的部分,可以使用汇编语言。比如作业系统的核心程式段、I/O接口电路的初始化程式、外部设备的低层驱动程式,以及频繁调用的子程式、动态连线库、某些高级绘图程式、视频游戏程式等等。 再次,汇编语言可以用于软体的加密和解密、计算机病毒的分析和防治,以及程式的调试和错误分析等各个方面。 最后,通过学习汇编语言,能够加深对计算机原理和作业系统等课程的理解。通过学习和使用汇编语言,能够感知、体会和理解机器的逻辑功能,向上为理解各种软体系统的原理,打下技术理论基础;向下为掌握硬体系统的原理,打下实践套用基础。 经典教材 汇编语言教材很多,各种处理器都有涉及,粗略统计不下百种。在这么多的教材里,用得较多的可以分类列举如下: x86处理器 1《x86汇编语言:从实模式到保护模式》,李忠著,电子工业出版社,2013-1 。 基于INTEL x86处理器、NASM编译器和BOCHS虚拟机。汇编语言就是处理器的语言,从这个意义上来说,既然学习汇编语言,就必须直接面向硬体编程,而不是使用莫名其妙的DOS中断和API调用。这是一本有趣的书,它没有把篇幅花在计算一些枯燥的数学题上。相反,它教你如何直接控制硬体,在不借助于BIOS、DOS、Windows、Linux或者任何其他软体支持的情况下来显示字元、读取硬碟数据、控制其他硬体等。 我们知道,32位和64位是主流,实模式和DOS作业系统已经成为历史,Linux和Windows都工作在保护模式下。这本书从实模式讲到32位保护模式,尤其以32位保护模式为重点,阅读本书,对理解现代计算机和现代作业系统的工作原理有非常大的帮助作用。 2《汇编语言》(第2版),王爽 著,清华大学出版社,2013-4-1 基于INTEL 8086处理器、MASM编译器,以及DOS平台的汇编教材,完全以8086处理器的实模式为主,不涉及常用的32位和64位模式,但因为通俗易懂,读者反映很好。 3《80X86汇编语言程式设计教程》,杨季文等 编著,清华大学出版社,1999-3-1 基于INTEL x86处理器、MASM和TASM编译器,包含16位实模式和32位保护模式的内容,而且对后者讲述较为详细。 4《32位汇编语言程式设计》,钱晓捷 编著,机械工业出版社,2011-8-1 基于INTEL x86处理器、MASM编译器,以及WINDOWS平台的汇编教材。 5《16/32位微机原理汇编语言及接口技术》,钱晓捷,陈涛编著,机械工业出版社,2005-2-1 基于INTEL x86处理器,论述16位微型计算机的基本原理、汇编语言和接口技术,并引出32位微机系统相关技术。 6《Intel汇编语言程式设计》(第五版),(美)欧文 著,电子工业出版社,2012-7-1 基于INTEL x86处理器、MASM编译器,以及DOS/WINDOWS平台的汇编教材,既有16位实模式的内容,也有32位保护模式的内容。 7《汇编语言的编程艺术》(第2版),(美)海德 著,清华大学出版社,2011-12-1 基于INTEL x86处理器,使用了作者自制的高级语言汇编器(High Level Assembler,HLA)作为教学工具,以部分地获得高级语言的优势和功能。 8《x86 PC汇编语言、设计与接口》(第五版),(美)马兹迪,考西著,电子工业出版社,2011-1-1 基于INTEL x86处理器,既讲了16位实模式的内容,也讲了32位保护模式的内容,对64位也有所介绍。 ARM及单片机 1《汇编语言程式设计--基于ARM体系结构》(第2版),文全刚等主编,北京航空航天大学出版社,2010-8-1 基于ARM体系结构的处理器,是学习嵌入式技术的入门教材。 2《零基础学AVR单片机》,徐益民等编著,机械工业出版社,2011-1-1 单片机概述、avr单片机的开发工具、avr单片机c语言、atmega16单片机基本结构、avr的指令系统与汇编系统等。 3《基于Multisim10的51单片机仿真实战教程》,聂典,丁伟主编,电子工业出版社,2010-2-1 阐述了NI Multisim 10在单片机仿真中的各项主要功能。 4《PIC18微控制器:体系结构、编程与接口设计》,(美)贝里著,清华大学出版社,2009-4-1 微控制器广泛套用于汽车、家电、工业控制、医疗设备等众多领域。本书以Microchip公司的PIC18系列微控制器为例,全面讲解如何使用C语言和汇编语言对微控制器进行编程。 5《CASL汇编语言程式设计》,赵立辉编著,中国电力出版社,2002-10-1 CASL汇编语言是中国计算机软体专业技术资格和水平考试高级程式设计师级的必考内容。本书是讲述CASL汇编语言程式设计的专著。

以上就是关于什么是80X86宏汇编语言程序设计全部的内容,包括:什么是80X86宏汇编语言程序设计、2011年南京航空航天大学考研复试科目:552微机原理及应用 看的课本是什么、学汇编语言有什么好书(最好是国外的)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9315595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存