




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日最新计算机 汇编语言程序设计 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日第第4章章 汇编语言程序设计汇编语言程序设计 l本章要点 4.1 汇编语言与汇编程序汇编语言与汇编程序 4.2 伪指令及其应用伪指令及其应用 4.3 汇编语言属性操作符汇编语言属性操作符 4.4基本结构的程序设计基本结构的程序设计 4.5宏指令宏指令 4.6 32 位汇编语言与位汇编语言与C+语言混合编程语言混合编程 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4
2、月24日4.1 汇编语言与汇编程序l程序员用各种编程语言编写指令以指挥计算机工作。计算机程序由一系列指程序员用各种编程语言编写指令以指挥计算机工作。计算机程序由一系列指令序列组成。计算机通过对每条指令的译码和执行来完成相应的操作。指令令序列组成。计算机通过对每条指令的译码和执行来完成相应的操作。指令必须以二进制代码的形式存放在内存中,才能够被计算机所识别和理解,并必须以二进制代码的形式存放在内存中,才能够被计算机所识别和理解,并加以执行。由二进制代码表示的指令称为机器指令,相应的程序称为机器语加以执行。由二进制代码表示的指令称为机器指令,相应的程序称为机器语言程序。言程序。l任何计算机所能直接
3、理解的语言只有其本身的机器语言任何计算机所能直接理解的语言只有其本身的机器语言(Machine Language)。机器语言是特定计算机的自然语言,由计算机的硬件设计定义。机器语言是特定计算机的自然语言,由计算机的硬件设计定义。机器语言通常由一系列数字组成机器语言通常由一系列数字组成(最终简化最终简化0和和1),让计算机一次一个地执行,让计算机一次一个地执行最基本的操作。机器语言程序由最基本的操作。机器语言程序由0、1二进制代码组成,非常繁琐、难于编程二进制代码组成,非常繁琐、难于编程和记忆。随着计算机越来越普及,机器语言编程对大多数程序员显然太慢、和记忆。随着计算机越来越普及,机器语言编程对
4、大多数程序员显然太慢、太繁琐。程序员不用计算机直接理解的一系列数字,而是用类似英文缩写的太繁琐。程序员不用计算机直接理解的一系列数字,而是用类似英文缩写的助记符助记符(Memoni)来表示计算机的基本操作,这些助记符构成了汇编语言来表示计算机的基本操作,这些助记符构成了汇编语言(Assembly Language)。使用汇编语言编写的程序,机器不能直接识别,称。使用汇编语言编写的程序,机器不能直接识别,称为汇编器为汇编器/汇编程序汇编程序(assembler)的翻译程序将汇编语言程序转换为机器语言。的翻译程序将汇编语言程序转换为机器语言。由此产生了用指令助记符表示的汇编语言指令,对应的程序称为
5、汇编语言程由此产生了用指令助记符表示的汇编语言指令,对应的程序称为汇编语言程序。汇编程序把汇编语言翻译成机器语言的过程称为汇编。序。汇编程序把汇编语言翻译成机器语言的过程称为汇编。 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1 汇编语言与汇编程序l【例【例4-1】【例】【例4-28】均在】均在MASM6.11的环境中编译。的环境中编译。l【例【例4-1】将】将4位二进制数对应的位二进制数对应的16进制数转换为进制数转换为ASCII码字符并在屏幕上显示出来。当数在码字符并在屏幕上显示出来。当数在0000B-1001B时,对应的时,对应的ASCII码
6、为码为0-9(30H-39H);当数在);当数在1010B-1111B时,对应的时,对应的ASCII码为码为A-F(41H-46H)。l步骤如下:步骤如下:l(1)在)在Windows系统中的【记事本】(系统中的【记事本】(%SystemRoot%system32notepad.exe)中输入如下的汇编语言程序并另存为)中输入如下的汇编语言程序并另存为C:MASM611BINE4-1.ASM:lDATAS SEGMENT ;此处输入数据段代码此处输入数据段代码l x DB 10lDATAS ENDSlCODES SEGMENT;此处输入代码段代码此处输入代码段代码l ASSUME CS:COD
7、ES,DS:DATASlSTART:l MOV AX,DATASl MOV DS,AXl MOV AL,xl AND AL,0FHl CMP AL,0AHl JB NUM; JB:jump when belowl ADD AL,07HlNUM: ADD AL,30Hl MOV DL,AL ;DOS2号功能调用,显示号功能调用,显示DL中中ASCII码对应的字符码对应的字符l MOV AH,2l INT 21Hl MOV AH,4CH ;带返回码结束带返回码结束l INT 21HlCODES ENDSl END START微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013
8、年4月24日4.1 汇编语言与汇编程序l(2)单击)单击【开始开始】【】【程序程序】【】【运行运行】,在,在【打开打开】框框中输入中输入cmd,再单击,再单击【确定确定】。l在弹出的在弹出的DOS命令提示符窗口中输入如下带下划线的命令:命令提示符窗口中输入如下带下划线的命令:lC:Documents and SettingsCD C:masm611binl此命令将当前目录切换到此命令将当前目录切换到C:MASM611BIN。lC:MASM611BINMASM E4-1.asml上述命令将汇编语言源程序上述命令将汇编语言源程序E4-1.asm翻译成二进制代码翻译成二进制代码的机器语言程序(即目标
9、代码),在的机器语言程序(即目标代码),在C:masm611bin目目录里会看到新生成的目标代码文件录里会看到新生成的目标代码文件E4-1.obj。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1 汇编语言与汇编程序l(3)C:MASM611BINLink E4-1.obj ( 不用附加名不用附加名OBJ也可),如图也可),如图4-1所示。所示。lMicrosoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992lCopyright (C) Microsoft Corp 198
10、4-1992. All rights reserved.lRun File e4-1.exe: 是否改动输出是否改动输出EXE文件名,如不改就文件名,如不改就ENTERlList File nul.map: 是否需要列表文件(是否需要列表文件(MAP),不需要则),不需要则ENTERlLibraries .lib: 是否需要库文件,要就键入文件名,不要则是否需要库文件,要就键入文件名,不要则ENTERlDefinitions File nul.def:lLINK : warning L4021: no stack segment由于由于COM文件不使用堆栈段,所文件不使用堆栈段,所以错误信息,
11、以错误信息,no stack segment并不影响程序正常执行至此已经生成并不影响程序正常执行至此已经生成EXE文件。文件。l连接程序连接程序Link.exe将目标文件将目标文件E4-1.obj与其他目标文件及系统提供的一些库与其他目标文件及系统提供的一些库文件连接在一起,生成以文件连接在一起,生成以EXE或或COM为扩展名的可执行文件。为扩展名的可执行文件。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1 汇编语言与汇编程序(4)运行如图所示,键入E4-1.exe,可看到输出的结果A,A是10的十六进制表示。 微机原理与接口技术微机原理与接口技术
12、 清华大学出版社清华大学出版社2013年4月24日4.1 汇编语言与汇编程序l(5)调试和查看汇编代码的机器码)调试和查看汇编代码的机器码l在在CodeView(安装安装MASM6.11后,是默认安装路径的后,是默认安装路径的C:MASM611BINCV.EXE文件文件)中打开中打开E4-1.exe文件,即可看到如下图图文件,即可看到如下图图4-2所示的窗口。所示的窗口。 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1 汇编语言与汇编程序l画面的左上窗口是调试器的主窗口,其显示被调画面的左上窗口是调试器的主窗口,其显示被调试的源程序或执行代码,左下
13、窗口是命令窗口,试的源程序或执行代码,左下窗口是命令窗口,用户可输入各种用户可输入各种DEBUG命令,右窗口是显示寄命令,右窗口是显示寄存器窗口,它可显示存器窗口,它可显示16位寄存器的内容。在主窗位寄存器的内容。在主窗口口3中,分为中,分为3列显示,第列显示,第1列显示的是代码所在列显示的是代码所在内存单元的段地址和段内偏移地址,请注意右侧内存单元的段地址和段内偏移地址,请注意右侧寄存器寄存器reg窗口的窗口的CS寄存器和寄存器和IP寄存器的值,它寄存器的值,它们和当前要执行的指令的段地址和偏移地址是一们和当前要执行的指令的段地址和偏移地址是一致的。第致的。第2列显示的是第列显示的是第3列汇
14、编指令的相应的列汇编指令的相应的16进制表示的机器指令。按快捷键进制表示的机器指令。按快捷键F10可以进行单可以进行单步运行代码,以逐语句观察运行结果。步运行代码,以逐语句观察运行结果。 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.2 汇编与连接汇编与连接l1汇编程序汇编程序l汇编是把汇编语言程序翻译成机器语言描述的目标程序的过程。汇编是把汇编语言程序翻译成机器语言描述的目标程序的过程。l汇编程序是完成汇编任务的程序。汇编程序是完成汇编任务的程序。l2连接程序连接程序l连接程序的主要功能是实现多个目标文件及库文件的连接,并完成浮连接程序的主要功
15、能是实现多个目标文件及库文件的连接,并完成浮动地址的重定位。动地址的重定位。l从汇编语言源程序到可执行程序的生成过程如图所示。从汇编语言源程序到可执行程序的生成过程如图所示。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.3 汇编语言与高级语言汇编语言与高级语言l汇编语言程序的基本单位仍然是机器指令,只是采用助记符表示,便汇编语言程序的基本单位仍然是机器指令,只是采用助记符表示,便于人们记忆。汇编语言是一种依赖于计算机微处理器的语言,每种机于人们记忆。汇编语言是一种依赖于计算机微处理器的语言,每种机器都有它专用的汇编语言器都有它专用的汇编语言(如如
16、8086CPU与与8031单片机的汇编语言即不单片机的汇编语言即不相同相同),汇编语言一般不具有通用性和可移植性。由于进行汇编语言,汇编语言一般不具有通用性和可移植性。由于进行汇编语言程序设计必须熟悉机器的硬件资源和软件资源,因此具有较大的难度程序设计必须熟悉机器的硬件资源和软件资源,因此具有较大的难度和复杂性。为了加速编程过程,人们开发了高级语言和复杂性。为了加速编程过程,人们开发了高级语言(high-level language),用一条语句完成大量任务。称为编译器,用一条语句完成大量任务。称为编译器(compiler)的翻的翻译程序将高级语言程序变为相应的机器语言。高级语言使程序员能够译
17、程序将高级语言程序变为相应的机器语言。高级语言使程序员能够编写更像英语的指令,可以包含常用的数学符号。从程序员角度看,编写更像英语的指令,可以包含常用的数学符号。从程序员角度看,高级语言比机器语言和汇编语言都要强得多。高级语言比机器语言和汇编语言都要强得多。C、C+、C#、VB和和Java等等是目前最强大最广泛使用的高级语言。将高级语言程序编等等是目前最强大最广泛使用的高级语言。将高级语言程序编译为相应的机器语言的过程可能需要大量时间。解释器译为相应的机器语言的过程可能需要大量时间。解释器(interpreter)程序可以直接执行高级语言程序,而不必先将这些程序编译成相应的程序可以直接执行高级
18、语言程序,而不必先将这些程序编译成相应的机器语言。尽管编译程序的执行速度比解释程序更快,但解释器在程机器语言。尽管编译程序的执行速度比解释程序更快,但解释器在程序开发环境中更常用,因为增加新特性和纠正错误时经常需要重新编序开发环境中更常用,因为增加新特性和纠正错误时经常需要重新编译程序。一旦程序开发完成,编译版本的运行最有效。译程序。一旦程序开发完成,编译版本的运行最有效。 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.3 汇编语言与高级语言汇编语言与高级语言l高级语言高级语言(Computer-independent Language),如,如
19、BASIC,FORTRAN,C语言语言等是面向过程的语言,不依赖于机器,因等是面向过程的语言,不依赖于机器,因而具有很好的通用性和可移植性,并且具而具有很好的通用性和可移植性,并且具有很高的程序设计效率,便于开发复杂庞有很高的程序设计效率,便于开发复杂庞大的软件系统。大的软件系统。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.3 汇编语言与高级语言汇编语言与高级语言l既然高级语言有很多优点,为什么还要学习汇编语言呢?理既然高级语言有很多优点,为什么还要学习汇编语言呢?理由如下:由如下:l 汇编语言仍然是各种系统软件(如操作系统)设计的基汇编语言仍
20、然是各种系统软件(如操作系统)设计的基本语言。利用汇编语言可以设计出效率极高的核心底层程序,本语言。利用汇编语言可以设计出效率极高的核心底层程序,如设备驱动程序。迄今在许多高级应用编程中,如设备驱动程序。迄今在许多高级应用编程中,32位汇编语位汇编语言编程仍然占有较大的市场。言编程仍然占有较大的市场。l 用汇编语言编写的程序一般比用高级语言编写的程序执用汇编语言编写的程序一般比用高级语言编写的程序执行速度快,且占内存较少。行速度快,且占内存较少。l 汇编语言程序能够直接有效地利用机器硬件资源,在一汇编语言程序能够直接有效地利用机器硬件资源,在一些实时控制系统中更是不可代替。些实时控制系统中更是
21、不可代替。l 学习汇编语言对于理解和掌握计算机硬件组成及工作原学习汇编语言对于理解和掌握计算机硬件组成及工作原理十分重要,也是进行计算机应用系统设计的基础。理十分重要,也是进行计算机应用系统设计的基础。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.4 汇编语言源程序的结构汇编语言源程序的结构(Program Structure)l一个汇编语言源程序由若干个代码段、数一个汇编语言源程序由若干个代码段、数据段、附加段或堆栈段组成,先看下面的据段、附加段或堆栈段组成,先看下面的例子。例子。l【例【例4-2】将一个】将一个8位二进制数分成高位二进制数分成
22、高4位和位和低低4位分别转换为两个位分别转换为两个ASCII字符。设待转字符。设待转换的数据及转换好的换的数据及转换好的ASCII字符均存放在数字符均存放在数据段中。完整的汇编语言源程序如下:据段中。完整的汇编语言源程序如下:微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l1 NAME BIN2ASCIIl2 l3 DATA SEGMENT ; 数据段定义开始数据段定义开始l4 BIN DB 10101011Bl5 ASC DB 2 DUP(?)l6 DATA ENDS ; 数据段定义结束数据段定义结束l7l8 STACK SEGMENT ; 堆栈段定义
23、开始堆栈段定义开始l9 DB 256 DUP(S)l10 TOP EQU $-STACKl11 STACK ENDS ; 堆栈段定义结束堆栈段定义结束l12l13 EXTRA SEGMENT ; 定义附加段定义附加段l14 data1 DW ? l15 data2 DW ?l16 data3 DW ?l17 EXTRA ENDS ; 附加段定义结束附加段定义结束l18微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l19 CODE SEGMENT ; 代码段定义开始代码段定义开始l20 ASSUME CS:CODE, DS:DATA, SS:STACKl2
24、1 ;.l22 START: MOV AX, DATA ; 主程序开始主程序开始l23 MOV DS, AXl24 MOV AX, STACKl25 MOV SS, AXl26 MOV SP, TOPl27 MOV BX, OFFSET ASCl28 MOV AL, BINl29 MOV AH, ALl30 MOV CL, 4l31 SHR AL, CLl32 CALL NEAR PTR CONVERTl33 MOV BX,ALl34 l35 INC BXl36 MOV AL, AH微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l37 CALL NEAR
25、 PTR CONVERTl38 MOV BX,ALl39 INC BXl40 MOV BX, $;加字符串结束标记加字符串结束标记l41 l42LEA DX,ASCl43MOV AH,9l44INT 21Hl45 l46MOV AH,4CHl47INT 21Hl48HLT ; 主程序结束主程序结束 l49;.l50CONVERT PROC ; 过程过程(子程序子程序)定义开始定义开始l51 AND AL,0FHl52 CMP AL,10l53 JB NUMl54 ADD AL,7l55NUM: ADD AL, 0l56 RETl57CONVERT ENDP ; 过程过程(子程序子程序)定义结束
26、定义结束l58;.l59CODE ENDS ; 代码段定义结束代码段定义结束l60l61 END START ; 程序结束程序结束微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日 从例从例4-2中可以看出,一个汇编语言源程序由若干个代码段、中可以看出,一个汇编语言源程序由若干个代码段、数据段、附加段和堆栈段组成,即程序由段结构组成。它们数据段、附加段和堆栈段组成,即程序由段结构组成。它们由段定义开始语句由段定义开始语句“SEGMENT”和段定义结束语句和段定义结束语句“ENDS”来定义一个段。每个段都有一个段名,段名可自来定义一个段。每个段都有一个段名,段
27、名可自行命名,如数据段的段名为行命名,如数据段的段名为“DATA”,堆栈段的段名为堆栈段的段名为“STACK”,代码段的段名为代码段的段名为“CODE”。 数据段和附加段用于存放变量、数据和结果,堆栈段用于数据段和附加段用于存放变量、数据和结果,堆栈段用于执行压栈和出栈操作,以及子程序调用和参数传递,代码段执行压栈和出栈操作,以及子程序调用和参数传递,代码段则是所编制的执行程序或常数表格。各个段都由一系列语句则是所编制的执行程序或常数表格。各个段都由一系列语句组成。语句包括指令语句和伪指令语句。指令语句组成。语句包括指令语句和伪指令语句。指令语句(Instruction Statements)
28、产生对应的机器代码,指定产生对应的机器代码,指定CPU做什么操作,而伪指令语句做什么操作,而伪指令语句(Directive Statements)并不产并不产生机器代码,仅仅起控制汇编过程的作用,它指定汇编器生机器代码,仅仅起控制汇编过程的作用,它指定汇编器(Assembler)作何种操作。)作何种操作。 汇编器是专门把汇编语言源程序汇编成机器语言的工具软汇编器是专门把汇编语言源程序汇编成机器语言的工具软件。它通过伪指令来了解诸如件。它通过伪指令来了解诸如“变量名列表变量名列表”、“变量所在变量所在位置位置”、“过程名过程名”等信息。在例等信息。在例4-2中,中,NAME,SEGMENT/EN
29、DS,DB,EQU,ORG,ASSUME,PTR,PROC/ENDP,END等都是伪指令,它们是汇编语言源程序的等都是伪指令,它们是汇编语言源程序的重要组成部分。重要组成部分。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l汇编语言程序的每行语句由汇编语言程序的每行语句由14个部分组成。指令语句和个部分组成。指令语句和伪指令语句的格式稍有区别,指令语句的标号后有冒号伪指令语句的格式稍有区别,指令语句的标号后有冒号“:”,伪指令语句的标号后没有冒号。,伪指令语句的标号后没
30、有冒号。l指令语句的格式为指令语句的格式为lLABEL: OPERATION OPERAND ;COMMENTl标号域标号域 指令助记符域指令助记符域 操作数域操作数域 注释域注释域l伪指令语句的格式为伪指令语句的格式为lLABEL OPERATION OPERAND ;COMMENTl标号域标号域 伪指令助记符域伪指令助记符域 操作数域操作数域 注释域注释域微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l语句格式中用方括号括起来的部分,是可选项,可以有也可以没有。每语句格式中用方括号括起来的部分,是可选项,可以有也可以没有。每部分之间用空格部分之间用空
31、格(至少一个至少一个)分开,一行最多可有分开,一行最多可有132个字符。个字符。lLABEL:标号域,表示段名、变量名、过程名或指令符号地址等。:标号域,表示段名、变量名、过程名或指令符号地址等。lOPERATION:助记符域,为指令或伪指令的助记符。:助记符域,为指令或伪指令的助记符。lOPERAND:操作数域,表示操作的对象,由一个或多个表达式组成,:操作数域,表示操作的对象,由一个或多个表达式组成,表达式与表达式之间必须用逗号表达式与表达式之间必须用逗号“,”分开。分开。lCOMMENT:注释域,用来说明语句的功能,以:注释域,用来说明语句的功能,以“;”开始。汇编程序开始。汇编程序对对
32、“;”以后的部分不予汇编。以后的部分不予汇编。l指令助记符前面还可以有指令助记符前面还可以有前缀前缀。汇编程序语句中的四个域,均可以用。汇编程序语句中的四个域,均可以用大写、小写或大小写混合编写。大写、小写或大小写混合编写。l标号标号(Label)是一个自行设计的标识符或名称,最多可由是一个自行设计的标识符或名称,最多可由31个字母、数字个字母、数字和特别字符和特别字符(?、?、_、$)等组成。但不能用数字开头等组成。但不能用数字开头,中间不能有空格,中间不能有空格,也不能为汇编语言的保留字。也不能为汇编语言的保留字。l注:保留字指有专门用途的字符或字符串,如注:保留字指有专门用途的字符或字符
33、串,如CPU的寄存器名、指令助的寄存器名、指令助记符、伪指令助记符等。记符、伪指令助记符等。l标号一般表示变量名、段名、过程名或指令符号地址。变量名、段名和标号一般表示变量名、段名、过程名或指令符号地址。变量名、段名和过程名由专门的伪指令语句定义,而指令符号地址则根据需要在标号域过程名由专门的伪指令语句定义,而指令符号地址则根据需要在标号域中写上,后面跟一个中写上,后面跟一个“:”。l在同一个汇编单位(以在同一个汇编单位(以END结束的程序模块)中,标号域中的标号不能结束的程序模块)中,标号域中的标号不能相同。相同。l操作数操作数(Operand)可以是常数、常量、变量、标号、寄存器名或表达式
34、。可以是常数、常量、变量、标号、寄存器名或表达式。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l1. 常数、常量常数、常量l编程时已经确定其值,程序运行期间不会改变其值的数据对象称为常数。编程时已经确定其值,程序运行期间不会改变其值的数据对象称为常数。l8086/8088CPU允许定义四种形式的常数:允许定义四种形式的常数: 整数、字符串、整数、字符串、“组合组合BCD码数码数”和实数和实数(浮点数浮点数),但只能处理整数、字符串、,但只能处理整数、字符串、“组合组合BCD码数码数”,不能处理实数不能处理实数(浮点数浮点数)。l常数表达式的名字称为常量
35、。常数表达式的名字称为常量。 (程序员给出的一个名或助记名作为一(程序员给出的一个名或助记名作为一个确定值的标识,个确定值的标识, 其值在程序执行过程中保持不变。)常量可用伪指其值在程序执行过程中保持不变。)常量可用伪指令说明符令说明符“EQU”或或“=”定义。定义。l例如,例如,A EQU 7或或 A = 7都可将常量都可将常量A的值定义为常数的值定义为常数7。l注意:伪指令说明符注意:伪指令说明符EQU左边的符号名不允许重复定义,而左边的符号名不允许重复定义,而“=”左边的左边的符号名可以重复定义。即:符号名可以重复定义。即:A EQU 7可以:A=7A EQU 8 (不允许)可以:A=8
36、微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l汇编语言语句中出现的常数一般有汇编语言语句中出现的常数一般有5种:种:l(1) 二进制数(二进制数(binary) 后跟字母后跟字母B,如,如10101011B。l(2) 八进制数(八进制数(octal) 后跟字母后跟字母Q,如,如367Q。l(3) 十进制数(十进制数(decimal) 后跟字母后跟字母D或不跟字母,如或不跟字母,如9D或或9。l(4) 十六进制数(十六进制数(hexadecimal) 后跟字母后跟字母H
37、,如,如0FH,3AH。注意,。注意,当数字的第一个字符是当数字的第一个字符是AF时,在字符前应添加一个数字时,在字符前应添加一个数字0,以示和,以示和变量或保留字的区别。如变量或保留字的区别。如0AH表示十六进制数,而表示十六进制数,而AH则表示则表示8086CPU中的中的8位寄存器。位寄存器。l(5) 字符和字符串字符和字符串 字符或字符串的值是取其对应的字符或字符串的值是取其对应的ASCII码码,并用一对并用一对单引号单引号 括起来。如字符括起来。如字符0,其对应的其对应的ASCII码为码为30H。字符。字符串串MASM以以ASCII码码4DH 、41H、53H和和4DH存放。存放。微机
38、原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l2. 变量、标号和寄存器名变量、标号和寄存器名l例如,指令例如,指令MOV AL, BIN中,中,AL为寄存器名,表示目的操为寄存器名,表示目的操作数,作数,BIN为变量名,表示源操作数。为变量名,表示源操作数。l标号就是指令地址的名字,也称为指令的符号地址。标号定标号就是指令地址的名字,也称为指令的符号地址。标号定义在指令的前面义在指令的前面(通常是左边通常是左边),用冒号作为分隔符。标号只,用冒号作为分隔符。标号只能定义在代码段能定义在代码段(CS)中,它代表其后第一条指令的第一个字中,它代表其后第一条指令
39、的第一个字节的存储单元地址,用于说明指令在存储器中的存储位置。节的存储单元地址,用于说明指令在存储器中的存储位置。例如例如, 在例在例4-2的指令序列中,的指令序列中,lSTART: MOV AX, DATA ; 主程序开始主程序开始l这里,这里,START就是标号就是标号.l标号有如下的属性:标号有如下的属性:l(1) 段基值属性:段基值属性: 指标号后面第一条指令所在的代码段的段指标号后面第一条指令所在的代码段的段基值;基值;l(2) 偏移地址属性:偏移地址属性: 指标号后面第一条指令首字节的段内偏指标号后面第一条指令首字节的段内偏移地址;移地址;l(3) 类型属性:类型属性: 也称距离属
40、性,是指标号与引用该标号的指也称距离属性,是指标号与引用该标号的指令之间允许距离的远、近。令之间允许距离的远、近。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l3. 表达式表达式l由运算符连接起来的式子叫表达式,汇编由运算符连接起来的式子叫表达式,汇编程序在对其汇编时,按一定的规则对表达程序在对其汇编时,按一定的规则对表达式进行运算后得到一个数值或一个地址。式进行运算后得到一个数值或一个地址。l表达式可分算术表达式、逻辑表达式、关表达式可分算术表达式、逻辑表达式、关系
41、运算表达式、分析运算表达式和合成运系运算表达式、分析运算表达式和合成运算表达式。算表达式。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l(1) 算术表达式算术表达式l算术运算符有算术运算符有l加(加(+)、减()、减(-)、乘()、乘(*)、除()、除(/)、求余)、求余(MOD)l算术运算表达式的最后结果仍为一个数。例如算术运算表达式的最后结果仍为一个数。例如l5*8+20, 127/100,5 MOD 3l等算术表达式,其结果分别为等算术表达式,其结果分别为60,
42、1和和2。 微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l(2) 逻辑表达式逻辑表达式l逻辑运算符有逻辑运算符有AND(逻辑与逻辑与)、OR(逻辑或)、(逻辑或)、XOR(逻(逻辑异或)和辑异或)和NOT(逻辑非)。(逻辑非)。l逻辑表达式的结果视情况不同而可能为逻辑表达式的结果视情况不同而可能为8位或位或16位二进制位二进制数。数。l逻辑运算符与逻辑运算指令的区别在于,前者在汇编时完逻辑运算符与逻辑运算指令的区别在于,前者在汇编时完成逻辑运算,而后者在指令执行时完成
43、逻辑运算。例如成逻辑运算,而后者在指令执行时完成逻辑运算。例如lAND AL, 10101011B AND 0FHl10101011B AND 0FH 为逻辑表达式,其结果在汇编时即为逻辑表达式,其结果在汇编时即已确定,为已确定,为00001011B,故上述指令等价于故上述指令等价于lAND AL, 00001011B微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l(3) 关系表达式关系表达式l关系运算符有关系运算符有EQ(Equal,等于)、,等于)、NE(Not E
44、qual,不等于)、,不等于)、LT(Less Than,小于)、,小于)、LE(Less Than or Equal,小于或等,小于或等于)、于)、GT(Greater Than,大于,大于)和和GE(Greater Than or Equal,大于或等于)共六种。大于或等于)共六种。l关系运算符的两个操作数必须都是数字或同一段内的两个存储单元的关系运算符的两个操作数必须都是数字或同一段内的两个存储单元的地址。计算的结果为逻辑值,结果为真,表示为地址。计算的结果为逻辑值,结果为真,表示为0FFFFH;结果为假,;结果为假,表示为表示为0000H。例如指令。例如指令lMOV BX, 5 GT
45、3l其中其中, 5 GT 3为关系表达式为关系表达式,该关系成立该关系成立,结果为结果为0FFFFH。故指令等价。故指令等价于于lMOV BX, 0FFFFH微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.1.5 汇编语言的语句格式汇编语言的语句格式(Statement Formats)l (4) 分析运算表达式和合成运算表达式分析运算表达式和合成运算表达式l分析运算表达式和合成运算表达式的操作对象都为存储器操作数。存分析运算表达式和合成运算表达式的操作对象都为存储器操作数。存储器操作数表示变量、符号地址、存储单元等。分析运算表达式把存储器操作数表示变
46、量、符号地址、存储单元等。分析运算表达式把存储器操作数分解为几个部分,如分解出段值、偏移量、类型等;而合储器操作数分解为几个部分,如分解出段值、偏移量、类型等;而合成运算表达式则把这些组成部分综合为存储器操作数。成运算表达式则把这些组成部分综合为存储器操作数。l例如,例例如,例4-2中的指令中的指令lMOV BX, OFFSET ASClOFFSET ASC即为分析运算表达式,它的作用为取存储器操作数即为分析运算表达式,它的作用为取存储器操作数(变量)(变量)ASC的地址偏移量,由于在例的地址偏移量,由于在例4-2中,中,ASC的偏移地址为的偏移地址为0001H,即,即OFFSET ASC=0
47、001H。故该指令等价于。故该指令等价于lMOV BX, 0001H微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2 伪指令及其应用l伪指令语句只是用来指示、引导汇编程序在汇编时做一些伪指令语句只是用来指示、引导汇编程序在汇编时做一些操作,它不产生机器代码,本身也不占用存储单元。操作,它不产生机器代码,本身也不占用存储单元。l伪指令主要分为下列几类:伪指令主要分为下列几类: 程序分段及存储器分配程序分段及存储器分配 变量定义及存储器申请变量定义及存储器申请 过程定义过程定义 符号定义符号定义 程序模块定义与通信程序模块定义与通信 宏定义及宏调用宏定义
48、及宏调用 条件汇编条件汇编 格式控制,列表及其他功能格式控制,列表及其他功能微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2.1 段定义伪指令段定义伪指令SEGMENT/ENDSlSEGMENT和和ENDS为程序分段的定义,其为程序分段的定义,其格式如下:格式如下:l段名段名 SEGMENT 定位方式定位方式 组合方式组合方式 类别名类别名l 指令语句或伪指令语句指令语句或伪指令语句l段名段名 ENDS微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2.1 段定义伪指令段定义伪指令SEGMENT/ENDSl1
49、段名段名 段名是赋予该段的一个名称,它位于段名是赋予该段的一个名称,它位于SEGMENT与与ENDS伪指令之前,成对出现,且前后必须一致。段名伪指令之前,成对出现,且前后必须一致。段名的取法与标号、变量名等相同。在同一个模块中,不的取法与标号、变量名等相同。在同一个模块中,不同段的段名不能相同。同段的段名不能相同。 段名代表该段的段地址。例如,例段名代表该段的段地址。例如,例4-2中的指令:中的指令: MOV AX, DATA MOV DS, AX 表示取数据段的段地址表示取数据段的段地址(用段名表示用段名表示)送送AX,然后再将然后再将AX(段地址段地址)送数据段寄存器送数据段寄存器DS。微
50、机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2.1 段定义伪指令段定义伪指令SEGMENT/ENDSl2定位方式定位方式 程序的段必须连续放置在内存单元的某个区域,并占据一定的存程序的段必须连续放置在内存单元的某个区域,并占据一定的存储空间。为了对程序的段进行合理的管理,需要对段放置的起始储空间。为了对程序的段进行合理的管理,需要对段放置的起始地址进行规定,这就是定位方式的作用。有地址进行规定,这就是定位方式的作用。有4种定位类型:种定位类型:BYTE、WORD、PARA、PAGE。起始地址分别为(。起始地址分别为(X表示可为表示可为0或或1):):
51、 BYTE XXXX XXXX XXXX XXXX XXXX B WORD XXXX XXXX XXXX XXXX XXX0 B PARA XXXX XXXX XXXX XXXX 0000 B PAGE XXXX XXXX XXXX 0000 0000 B 分别表示以字节、字、节、页的边界为起始地址。如果缺省定位分别表示以字节、字、节、页的边界为起始地址。如果缺省定位方式,则以节(方式,则以节(PARA)的边界为起始地址。一节包含)的边界为起始地址。一节包含16个连续个连续的字节单元,一页包含的字节单元,一页包含256个连续的字节单元。个连续的字节单元。微机原理与接口技术微机原理与接口技术 清
52、华大学出版社清华大学出版社2013年4月24日4.2.1 段定义伪指令段定义伪指令SEGMENT/ENDSl3组合方式组合方式 对于规模较大的程序,常将程序分割为多个模块。在不同的模块中,段名可对于规模较大的程序,常将程序分割为多个模块。在不同的模块中,段名可以相同,组合方式的作用是指示连接程序,把同名的段按照指定的方式组合以相同,组合方式的作用是指示连接程序,把同名的段按照指定的方式组合起来形成一个新的段。组合方式共有起来形成一个新的段。组合方式共有6种。种。 (1) NONE:表示该段与其他模块的段没有任何关系,每段都有自己的基:表示该段与其他模块的段没有任何关系,每段都有自己的基址。这是
53、缺省方式。址。这是缺省方式。 (2) PUBLIC:表示该段与其它模块中说明为:表示该段与其它模块中说明为PUBLIC方式的同名段互相方式的同名段互相组合成一个逻辑段,逻辑段的长度为各段长度之和。组合成一个逻辑段,逻辑段的长度为各段长度之和。 (3) STACK:表示此段为堆栈段,连接时把所有:表示此段为堆栈段,连接时把所有STACK方式的同名段连方式的同名段连接成一个段,由接成一个段,由SS指向该段的起始地址。指向该段的起始地址。 (4) COMMON:表示该段与其它模块中所有已说明为:表示该段与其它模块中所有已说明为COMMON的同名段的同名段共享相同的存储区域,共享的长度为模块同名段中最
54、大长度,各共享段具有共享相同的存储区域,共享的长度为模块同名段中最大长度,各共享段具有相同的段起始地址。相同的段起始地址。 (5) MEMORY方式:表示该段应定位在所有其他段的上面。若有多个段方式:表示该段应定位在所有其他段的上面。若有多个段选用选用MEMORY,则除第一个之外,其余段均作为,则除第一个之外,其余段均作为COMMON处理。处理。 (6) AT:表示该段按绝对地址定位,其段地址即为其后表达式的值,位移:表示该段按绝对地址定位,其段地址即为其后表达式的值,位移量为量为0。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2.1 段定义伪指令
55、段定义伪指令SEGMENT/ENDSl4类别名类别名 类别名必须用单引号括起来。连接程序把类别类别名必须用单引号括起来。连接程序把类别名相同的所有段放在连续的存储区域内,先出名相同的所有段放在连续的存储区域内,先出现的段放前现的段放前,后出现的在后,但对各段不进行重后出现的在后,但对各段不进行重新组合。一般总是定义堆栈段的类别名为新组合。一般总是定义堆栈段的类别名为STACK,例如,例,例如,例4-2中中,堆栈段可定义如下堆栈段可定义如下: STACK SEGMENT PARA STACK STACK 表示堆栈段从节的起始地址开始存放表示堆栈段从节的起始地址开始存放,组合方式组合方式为为STA
56、CK, 类别名为类别名为STACK。微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日l5指定段内的偏移地址指定段内的偏移地址 常用的有常用的有ORG和和EVEN两种说明符,是指定下一个要用的存储单元的偏移地两种说明符,是指定下一个要用的存储单元的偏移地址。址。 (1) 格式:格式: ORG 常数表达式常数表达式 指定当前可用的存储单元的偏移地址为常数表达式的值,就是将常数表达式指定当前可用的存储单元的偏移地址为常数表达式的值,就是将常数表达式的值送入的值送入$。 (2) 格式:格式: EVEN 将当前可用的存储单元的偏移地址调整为最近的偶数值,就是将当前可
57、用的将当前可用的存储单元的偏移地址调整为最近的偶数值,就是将当前可用的最小偶数偏移地址值送入最小偶数偏移地址值送入$。例如,在下述伪指令语句序列中,例如,在下述伪指令语句序列中,l ORG 1000Hl A DB 47H, 12H, 45Hl EVENl B DB 47Hl这里,指令这里,指令 ORG 1000H 将将A的偏移地址部分指定为的偏移地址部分指定为1000H,从,从A开始存放开始存放3个个字节变量,占用地址字节变量,占用地址1000H、1001H和和1002H,B的偏移地址部分本应是的偏移地址部分本应是1003H,但但EVEN指令会将指令会将B的偏移地址部分调整为偶数地址的偏移地址
58、部分调整为偶数地址1004H。l对于字数组,为保证其从偶地址开始,可在它前面用对于字数组,为保证其从偶地址开始,可在它前面用EVEN 伪操作来达到这一伪操作来达到这一目的,形如:目的,形如:lDATA-SEG SEGMENTl EVENl WORD-ARRAY DW 100 DUP(?)lDATA-SEG ENDS微机原理与接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2.1 段定义伪指令段定义伪指令SEGMENT/ENDSl6GROUP伪指令伪指令l前述的组合方式是把同名的段按照指定的方式组合起来形前述的组合方式是把同名的段按照指定的方式组合起来形成一个新的
59、段,而成一个新的段,而GROUP伪指令则用来把模块中若干不伪指令则用来把模块中若干不同名的段集合成一个组,使其装入同一个物理段中,组内同名的段集合成一个组,使其装入同一个物理段中,组内各段之间的跳转可视为段内跳转。格式如下:各段之间的跳转可视为段内跳转。格式如下:l组名组名 GROUP 段名段名 ,l注:组名与段名是一样的取名规则,是代表该组的段地址,注:组名与段名是一样的取名规则,是代表该组的段地址,格式中的段名也可用表达式格式中的段名也可用表达式SEG 变量变量或或 SEG 标号标号来来代替,其中代替,其中“SEG”运算符表示取变量或标号的段地址运算符表示取变量或标号的段地址 。微机原理与
60、接口技术微机原理与接口技术 清华大学出版社清华大学出版社2013年4月24日4.2.2 偏移地址计数器偏移地址计数器$和定位伪指令和定位伪指令ORGl1偏移地址计数器偏移地址计数器$l汇编程序在对源程序进行汇编的过程中,用偏移地址计数器汇编程序在对源程序进行汇编的过程中,用偏移地址计数器$来保存当前正在汇来保存当前正在汇编的指令的偏移地址或伪指令语句中变量的偏移地址。编的指令的偏移地址或伪指令语句中变量的偏移地址。l用户可将用户可将$用于自己编写的源程序中。用于自己编写的源程序中。l在每个段开始汇编时,汇编程序在每个段开始汇编时,汇编程序( 汇编器)都将汇编器)都将$清为清为0,以后,每处理一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 来访者接待协议
- 2025年学历类自考幼儿园组织与管理-心理学参考题库含答案解析(5套试卷)
- 2025年学历类自考幼儿园教育活动设计与组织-学前儿童音乐教育参考题库含答案解析(5套试卷)
- 2025年学历类自考幼儿园教育基础-中级财务会计参考题库含答案解析(5套试卷)
- 2025年学历类自考小学科学教育-美学参考题库含答案解析(5套试卷)
- 2025年学历类自考小学班主任-教育学(一)参考题库含答案解析(5套试卷)
- 2025年学历类自考小学教育科学研究-企业管理概论参考题库含答案解析(5套试卷)
- 2025年学历类自考小学教育心理学-公文写作与处理参考题库含答案解析(5套试卷)
- 2025年高频疲劳试验机项目立项申请报告
- 2025年学历类自考学前教育行政与管理-企业管理概论参考题库含答案解析(5套试卷)
- 高三数学教学经验交流发言稿
- 沪科版八年级物理上册教学计划(含进度表)
- 矿山三级安全教育培训文档
- 包装行业产品物料报废处理流程
- 算力中心建设的技术要求
- 一般工业固废处理合同范本
- 2025年春季学期1530学生安全教育记录表
- 《椅旁CADCAM全瓷修复技术指南》
- 空调维修保养合同范本
- 钣金安全生产培训
- 老年人口腔护理宣教
评论
0/150
提交评论