




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章2微机系统与接口技术微机系统与接口技术汇编语言的特点汇编语言的特点汇编语言是一种以处理器指令系统为基础的低级汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数采用标识符号表示指令操作数利用汇编语言编写程序的主要优点是可以直接、利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而容易创建代码序列有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序短小、运行快速的可执行程序在有些应用领域,汇编语言的作用是不容置疑和在有些应用领域,汇编语言的作用是不容置
2、疑和无可替代的无可替代的汇编程序设计的过程是与其他高级语言程序设计汇编程序设计的过程是与其他高级语言程序设计大致相同大致相同3微机系统与接口技术微机系统与接口技术第第3章:汇编语言程序设计章:汇编语言程序设计本章要点汇编语言源程序格式与开发汇编语言源程序格式与开发常量、变量和标号常量、变量和标号汇编语言程序设计方法汇编语言程序设计方法顺序程序设计顺序程序设计分支程序设计分支程序设计循环程序设计循环程序设计子程序设计子程序设计4微机系统与接口技术微机系统与接口技术3.1 汇编语言源程序格式汇编语言源程序格式完整的汇编语言源程序由段组成完整的汇编语言源程序由段组成一个汇编语言源程序可以包含若干个代
3、码段、数一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随据段、附加段或堆栈段,段与段之间的顺序可随意排列意排列需独立运行的程序必须包含一个需独立运行的程序必须包含一个代码段代码段,并指示,并指示程序执行的程序执行的起始点起始点,一个程序只有一个起始点,一个程序只有一个起始点所有的可执行性语句必须位于某一个代码段内,所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内说明性语句可根据需要位于任一段内通常,程序还需要一个堆栈段通常,程序还需要一个堆栈段 源程序由语句序列构成5微机系统与接口技术微机系统与接口技术汇编语言的语句格式汇编语言的语
4、句格式执行性语句执行性语句执行性语句用于表达处理执行性语句用于表达处理器指令器指令(也称为硬指令也称为硬指令),汇编后对应一条指,汇编后对应一条指令代码。由处理器指令组成的代码序列是令代码。由处理器指令组成的代码序列是程序设计的主体程序设计的主体标号标号: 硬指令助记符硬指令助记符 操作数操作数,操作数操作数 ;注释注释说明性语句说明性语句说明性语句用于表达伪指说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、令,指示源程序如何汇编、变量怎样定义、过程怎么设置等过程怎么设置等名字名字 伪指令助记符伪指令助记符 参数参数,参数参数, ;注释注释6微机系统与接口技术微机系统与接口技术指令
5、与伪指令指令与伪指令指令(指令(Instruction)使使CPU产生动作、并在产生动作、并在程序执行时才处理的指令程序执行时才处理的指令指令就是第指令就是第2章学习的处理器指令,与具体的处章学习的处理器指令,与具体的处理器有关、与汇编程序无关理器有关、与汇编程序无关伪指令(伪指令(Directive)不产生不产生CPU动作、在程动作、在程序执行前由汇编程序处理的说明性指令序执行前由汇编程序处理的说明性指令伪指令与具体的处理器类型无关,但与汇编程序伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令有关。不同版本的汇编程序支持不同的伪指令 硬指令和伪指令采用易于记
6、忆的符合表达,这就是助记符7微机系统与接口技术微机系统与接口技术标号、名字与标识符标号、名字与标识符标号标号是反映硬指令位置(逻辑地址)和属性的标是反映硬指令位置(逻辑地址)和属性的标识符,后跟一个冒号分隔识符,后跟一个冒号分隔名字名字是反映伪指令位置(逻辑地址)和属性的标是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有冒号识符,后跟空格或制表符分隔,没有冒号标识符标识符(Identifier)一般最多由)一般最多由31个字母、数字个字母、数字及规定的特殊符号(如及规定的特殊符号(如 _、$、?、)组成,不)组成,不能以数字开头。默认情况下,汇编程序不区别标能以数字开头。
7、默认情况下,汇编程序不区别标识符中的字母大小写识符中的字母大小写一个源程序中,每个标识符的定义是唯一的,还一个源程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的不能是汇编语言采用的保留字保留字8微机系统与接口技术微机系统与接口技术保留字保留字保留字(保留字(Reserved Word)是汇编程序已经)是汇编程序已经利用的标识符(也称为关键字),主要有:利用的标识符(也称为关键字),主要有:指令助记符指令助记符例如:例如:MOV、ADD伪指令助记符伪指令助记符例如:例如:DB、DW操作符操作符例如:例如:OFFSET、PTR寄存器名寄存器名例如:例如:AX、CS预定义符号预定义符号例如:
8、例如:data 汇编语言大小写不敏感9微机系统与接口技术微机系统与接口技术操作数和参数操作数和参数处理器指令的处理器指令的操作数操作数可以是立即数、寄存器可以是立即数、寄存器和存储单元和存储单元伪指令的伪指令的参数参数可以是常数、变量名、表达式可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔等,可以有多个,参数之间用逗号分隔10微机系统与接口技术微机系统与接口技术注释注释语句中由分号语句中由分号“;”开始的部分为注释内容,开始的部分为注释内容,用以增加源程序的可读性用以增加源程序的可读性必要时,一个语句行也可以由分号开始作为必要时,一个语句行也可以由分号开始作为阶段性注释阶段性注释
9、汇编程序在翻译源程序时将跳过该部分,不汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理对它们做任何处理11微机系统与接口技术微机系统与接口技术分隔符分隔符语句的语句的4个组成部分要用分隔符分开个组成部分要用分隔符分开标号后用冒号,注释前用分号标号后用冒号,注释前用分号操作数之间和参数之间使用逗号分隔操作数之间和参数之间使用逗号分隔其他部分通常采用空格或制表符其他部分通常采用空格或制表符多个空格和制表符的作用与一个相同多个空格和制表符的作用与一个相同MASM支持续行符支持续行符 “”12微机系统与接口技术微机系统与接口技术汇编语言程序的基本框架汇编语言程序的基本框架 一般一个完整的汇编语言
10、程序由程序段、数据段一般一个完整的汇编语言程序由程序段、数据段和堆栈段组成。每个段通过伪指令和堆栈段组成。每个段通过伪指令SEGMENT 和和ENDS来定义。如代码段定义为:来定义。如代码段定义为: CODE SEGMENT 程序程序 CODE ENDS13微机系统与接口技术微机系统与接口技术定义堆栈段定义堆栈段STACKS STACKS SEGMENTSEGMENT PARA STACK PARA STACK 定义堆栈的内存空间定义堆栈的内存空间STACKSSTACKS ENDSENDS定义数据段定义数据段DATA DATA SEGMENTSEGMENT 存放数据项的数据段存放数据项的数据段
11、DATADATA ENDSENDS汇编语言程序的基本框架汇编语言程序的基本框架14微机系统与接口技术微机系统与接口技术定义代码段定义代码段CODE SEGMENTASSUME CS:CODE,DS:DATA SS:STACKS,MAIN PROC MOV AX,DATA MOV DS,AX 程序指令序列程序指令序列MAIN ENDPCODE ENDS END MAIN汇编语言程序的基本框架汇编语言程序的基本框架15微机系统与接口技术微机系统与接口技术计算计算 X3=X2+X1STACKS SEGMENT DW 64 DUP (?)STACKS ENDSDATA SEGMENTX1 DB 5X2
12、 DB 78X3 DB ?DATA ENDS 一个完整汇编语言程序实例一个完整汇编语言程序实例16微机系统与接口技术微机系统与接口技术计算计算 X3=X2+X1CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSMAIN PROC MOV AX,DATA MOV DS,AX MOV AL,X1 ADD AL,X2 MOV X3, AL MOV AH,4CH INT 21H MAIN ENDPCODE ENDS END MAIN 一个完整汇编语言程序实例一个完整汇编语言程序实例汇编语言程序的开发过程(附录汇编语言程序的开发过程(附录B)编辑编辑文本编辑器,如
13、文本编辑器,如 EDIT.COM源程序:文件名源程序:文件名.asm汇编汇编汇编程序,如汇编程序,如 TASM.EXE目标模块:文件名目标模块:文件名.obj连接连接连接程序,如连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调试调试调试程序,如调试程序,如 DEBUG.EXE应用程序应用程序错误错误错误错误错误错误错误错误18微机系统与接口技术微机系统与接口技术开发过程开发过程1:源程序的编辑:源程序的编辑源程序文件要以源程序文件要以ASMASM为扩展名为扩展名源程序文件的形成(编辑)可以通过任何源程序文件的形成(编辑)可以通过任何一个文本编辑器实现一个文本编辑器实
14、现: :u DOSDOS中的全屏幕文本编辑器中的全屏幕文本编辑器EDITEDITu 其他程序开发工具中的编辑环境其他程序开发工具中的编辑环境WindowsWindows中的记事本中的记事本NotepadNotepad19微机系统与接口技术微机系统与接口技术开发过程开发过程2:源程序的汇编(:源程序的汇编(MASM )汇编是将源程序翻译成由机器代码组成的汇编是将源程序翻译成由机器代码组成的目标模块文件的过程目标模块文件的过程MASM 6.x提供的汇编程序是提供的汇编程序是ML.EXE:ML filename.asm源程序中没有语法错误,源程序中没有语法错误,MASM将自动生将自动生成一个目标模块
15、文件(成一个目标模块文件(filename.obj););否则否则MASM将给出相应的错误信息。这时将给出相应的错误信息。这时应根据错误信息,重新编辑修改,再次汇应根据错误信息,重新编辑修改,再次汇编编20微机系统与接口技术微机系统与接口技术开发过程开发过程2:源程序的汇编(生成列表文件):源程序的汇编(生成列表文件)汇编过程中,可以通过参数选择生成列表文汇编过程中,可以通过参数选择生成列表文件(件(.LST.LST)。列表文件是一种文本文件,含)。列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用程序设计和发现错误很
16、有用汇编程序汇编程序ML.EXE可带其他参数,为了生成可带其他参数,为了生成列表文件,命令是:列表文件,命令是:ML /c /Fl flilename.asm该命令产生:模块文件该命令产生:模块文件file.obj 列表文件列表文件file.lst21微机系统与接口技术微机系统与接口技术开发过程开发过程3:目标模块的连接:目标模块的连接连接程序能把一个或多个目标文件和库文件合成连接程序能把一个或多个目标文件和库文件合成一个可执行程序(一个可执行程序(.EXE.EXE、.COM.COM文件):文件):LINK filename.obj;如果没有严重错误,如果没有严重错误,LINK将生成一个可执行
17、文件将生成一个可执行文件(file.exe);否则将提示相应的错误信息。这时);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再汇编、需要根据错误信息重新修改源程序文件后再汇编、链接,直到生成可执行文件链接,直到生成可执行文件ML.EXE汇编程序(汇编程序(MASM 6.xMASM 6.x)可自动调用)可自动调用LINK连接程序,实现汇编和连接的依次进行连接程序,实现汇编和连接的依次进行ML filename.asm22微机系统与接口技术微机系统与接口技术开发过程开发过程4:可执行程序的调试:可执行程序的调试经汇编、连接生成的可执行程序在操作系统经汇编、连接生成的可执行程序
18、在操作系统下只要输入文件名就可以运行:下只要输入文件名就可以运行:filename操作系统装载该文件进入主存,并开始运行操作系统装载该文件进入主存,并开始运行如果出现运行错误,可以从源程序开始排错,如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误也可以利用调试程序帮助发现错误采用采用DEBUG.EXEDEBUG.EXE调试程序:调试程序:DEBUG filename.exe23微机系统与接口技术微机系统与接口技术开发过程开发过程5:程序终止退出:程序终止退出应用程序执行结束,应该将控制权交还操应用程序执行结束,应该将控制权交还操作系统作系统汇编语言程序设计中,有多种返回汇
19、编语言程序设计中,有多种返回DOS的的方法,但一般利用方法,但一般利用DOS功能调用的功能调用的4CH子子功能实现,它需要的入口参数是功能实现,它需要的入口参数是AL返回返回数码(通常用数码(通常用0表示程序没有错误)表示程序没有错误)于是,应用程序的终止代码就是:于是,应用程序的终止代码就是:MOV AH,4CHINT 21H ;放在每个程序的结尾放在每个程序的结尾24微机系统与接口技术微机系统与接口技术5. 汇编结束汇编结束汇编结束表示汇编程序到此结束将源程序汇编结束表示汇编程序到此结束将源程序翻译成目标模块代码的过程翻译成目标模块代码的过程源程序的最后必须有一条源程序的最后必须有一条EN
20、D伪指令伪指令END 标号标号可选的可选的“标号标号”参数指定程序开始执行点,参数指定程序开始执行点,连接程序据此设置连接程序据此设置CS和和IP值(例题中采用值(例题中采用了了MAIN标识符)标识符) 不要糊涂程序终止和汇编结束是两码事25微机系统与接口技术微机系统与接口技术第一个源程序文件第一个源程序文件 Myfile.asmSTACKS SEGMENTDW 64 DUP(?)STACKS ENDSDATA SEGMENTSTRINGDB Hello, this my first program !, 0DH,0AH, $DATA ENDSCODESEGMENT ASSUME CS:COD
21、E,DS:DATA,SS:STACKSSTART:MOV AX, DATAMOV DS,AXMOV DX,OFFSET STRINGMOV AH,9INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START26微机系统与接口技术微机系统与接口技术3.2 常量、变量和属性常量、变量和属性 汇编语言的数据可以简单分为常量和变量汇编语言的数据可以简单分为常量和变量常量常量可以作为硬指令的立即数或伪指令的参可以作为硬指令的立即数或伪指令的参数,数,变量变量主要作为存储器操作数主要作为存储器操作数汇编语言语句中的汇编语言语句中的名字和标号名字和标号具有逻辑地址具有逻辑地址和
22、类型属性,主要用做地址操作数,也可以和类型属性,主要用做地址操作数,也可以作为立即数和存储器操作数作为立即数和存储器操作数本节将详细讨论语句中的参数和操作数、名本节将详细讨论语句中的参数和操作数、名字和标号,并引出相关的伪指令和操作符字和标号,并引出相关的伪指令和操作符27微机系统与接口技术微机系统与接口技术3.2.1 常量常量常量表示一个固定的数值,它又分成多种形式常量表示一个固定的数值,它又分成多种形式常数字符串符合常量1. 数值表达式28微机系统与接口技术微机系统与接口技术1. 常数常数指由指由10、16、2和和8进制形式表达的数值,各种进进制形式表达的数值,各种进制的数据以后缀字母区分
23、,默认不加后缀字母的制的数据以后缀字母区分,默认不加后缀字母的是十进制数是十进制数十进制十进制由由0 9数字组成,以字母数字组成,以字母D(d)结)结尾(缺省情况可以省略)尾(缺省情况可以省略)100,255D十六进制十六进制由由0 9、A F数字组成,以字母数字组成,以字母H(h)结尾,以字母开头的常数需要)结尾,以字母开头的常数需要加一个前导加一个前导064H,0FFH0B800H二进制二进制由由0和和1两个数字组成,以字母两个数字组成,以字母B(b)结尾结尾01100100B29微机系统与接口技术微机系统与接口技术2. 字符串字符串字符串常量是用单引号或双引号括起来的字符串常量是用单引号
24、或双引号括起来的单个字符或多个字符单个字符或多个字符其其数值是每个字符对应的数值是每个字符对应的ASCII码值码值例如:例如:d(等于(等于64H)AB(等于(等于4142H)Hello, Assembly !30微机系统与接口技术微机系统与接口技术3. 符号常量符号常量符号常量使用标识符表达一个数值符号常量使用标识符表达一个数值MASM提供等价机制,用来为常量定义符号名提供等价机制,用来为常量定义符号名符号定义伪指令有符号定义伪指令有“等价等价EQU”和和“等号等号”:符号名符号名 EQU 数值表达式数值表达式符号名符号名 EQU 符号名符号名 数值表达式数值表达式EQU用于数值等价时不能重
25、复定义符号名,用于数值等价时不能重复定义符号名,但但“”允许有重复赋值。例如:允许有重复赋值。例如:X= 7;等效于:;等效于:X qeu 7X= X+5;“X EQU X+5”是错误的是错误的31微机系统与接口技术微机系统与接口技术4. 数值表达式数值表达式数值表达式一般是指由数值表达式一般是指由运算符运算符连接的各种常量所连接的各种常量所构成的表达式构成的表达式汇编程序在汇编过程中计算表达式,最终得到一汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量个确定的数值,所以也是常量表达式的数值在程序运行前的汇编阶段计算,所表达式的数值在程序运行前的汇编阶段计算,所以组成表达式
26、的各部分必须在汇编时就能确定以组成表达式的各部分必须在汇编时就能确定汇编语言支持多种运算符(汇编语言支持多种运算符(表表3.43.4)我们经常使用的是加减乘除(我们经常使用的是加减乘除( * * / / )例如:例如:MOV AX,3*4+5 ;等价于:;等价于:MOV AX,1732微机系统与接口技术微机系统与接口技术3.2.2 变量变量 变量实质上是指主存单元的数据,虽然内存单元变量实质上是指主存单元的数据,虽然内存单元地址不变,但其中存放的数据可以改变地址不变,但其中存放的数据可以改变变量需要事先定义才能使用变量需要事先定义才能使用变量定义(变量定义(Define)伪指令为变量申请固定长
27、度)伪指令为变量申请固定长度为单位的存储空间,并可以同时将相应的存储单为单位的存储空间,并可以同时将相应的存储单元初始化元初始化定义后的变量可以利用变量名等方法引用其中的定义后的变量可以利用变量名等方法引用其中的数据,即变量的数值数据,即变量的数值33微机系统与接口技术微机系统与接口技术1. 变量的定义变量的定义 变量定义的汇编语言格式为:变量定义的汇编语言格式为:变量名变量名 伪指令伪指令 初值表初值表变量名变量名为用户自定义标识符,表示初值表首元素为用户自定义标识符,表示初值表首元素的逻辑地址,常称为符号地址。变量名也可以没的逻辑地址,常称为符号地址。变量名也可以没有有初值表初值表是用逗号
28、分隔的参数是用逗号分隔的参数,主要由常量、数值表主要由常量、数值表达式或达式或“?”组成。其中组成。其中“?”表示未赋初值表示未赋初值多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符DUP进行定义:进行定义:重复次数重复次数 DUP(重复参数重复参数)变量定义伪指令有变量定义伪指令有DB、DW、DD等(表等(表3.5)34微机系统与接口技术微机系统与接口技术字节变量的定义字节变量的定义DB(Define Byte)DB伪指令用于分配一个或多个字节单元,伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值并可以将它们初始化为指定值初值表中每个数据一定是
29、字节量,存放一初值表中每个数据一定是字节量,存放一个个8位数据:位数据:u可以是可以是0255的无符号数的无符号数u或是或是128127带符号数带符号数也可以是字符串常数也可以是字符串常数字节变量定义实例字节变量定义实例;数据段;数据段XDB a,-5DB 2 DUP(100),?YDB ABC36微机系统与接口技术微机系统与接口技术字节变量的应用字节变量的应用MOV AL,X;此处;此处X表示它的第表示它的第1个数据,故个数据,故ALaDEC X+1;对;对X为始的第为始的第2个数据减个数据减1,故成为,故成为6MOV Y,AL;现在;现在Y这个字符串成为这个字符串成为 aBC37微机系统与
30、接口技术微机系统与接口技术字变量的定义字变量的定义DW(Define Word)DW伪指令用于分配一个或多个字单元,并伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值可以将它们初始化为指定值初值表中每个数据是字量,一个字单元可初值表中每个数据是字量,一个字单元可用于存放任何用于存放任何16位数据:位数据:u 一个段地址一个段地址u 一个偏移地址一个偏移地址u 两个字符两个字符u 065535之间的无符号数之间的无符号数3276832767之间的带符号数之间的带符号数字变量定义实例字变量定义实例;数据段;数据段COUNTDW 8000H, ?, ABMAXINTEQU 64HNUMBE
31、RDW MAXINTARRAY DW MAXINT DUP(0)39微机系统与接口技术微机系统与接口技术双字变量的定义双字变量的定义DD(Define Double word)DD伪指令伪指令用于分配一个或多个双字单元,用于分配一个或多个双字单元,并可以将它们初始化为指定值并可以将它们初始化为指定值初值表中每个数据是一个初值表中每个数据是一个3232位的双字量:位的双字量:u 可以是有符号或无符号的可以是有符号或无符号的3232位整数位整数u 也可以用来表达也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616位位的偏移地址(低位字)的远指针的偏移地址(低位字)的远指针VARD
32、D DD 0, ?, 12345678HFARPOINTDD 00400078H40微机系统与接口技术微机系统与接口技术2. 变量的应用变量的应用变量变量具有存储单元的逻辑地址具有存储单元的逻辑地址程序代码中程序代码中通过变量名引用其指向的首个数据通过变量名引用其指向的首个数据通过变量名加减位移量存取以首个数据为基地通过变量名加减位移量存取以首个数据为基地址的前后数据址的前后数据 例题例题3.2 变量的定义变量的定义 ;数据段数据段BVAR1 DB 100,01100100b,64H,d;字节变量:不同进制表达同一个数值,内存中有字节变量:不同进制表达同一个数值,内存中有4个个64HMININ
33、T= 5;符号常量:;符号常量:minint数值为数值为5,不占内存空间,不占内存空间BVAR2 DB -1, MININT, MININT+5;内存中数值依次为;内存中数值依次为FFH,5,0AH DB ?, 2 DUP(20H);预留一个字节空间,重复定义了;预留一个字节空间,重复定义了2个数值个数值20HWVAR1 DW 2010H, 4*4;字变量:两个数据是;字变量:两个数据是2010H、0010H,共占,共占4个字节个字节WVAR2 DW ?;WVAR2 是没有初值的字变量是没有初值的字变量例题例题3.2 变量的定义(续)变量的定义(续)DVAR DD 12347777H, 876
34、51111H,?;双字变量:;双字变量:2个双字数据,一个双字空间个双字数据,一个双字空间ABC DB A,B,C,? ;定义字符,实际是字节变量定义字符,实际是字节变量MAXINT EQU 0AH;符号常量:符号常量:maxint10STRING DB ABCDEFGHIJ;定义字符串:使用字节定义;定义字符串:使用字节定义DB伪指令伪指令CRLFS DB 13,10,$;回车符;回车符0DH、换行符、换行符0AH和字符和字符$24HARRAY1 DW MAXINT DUP(0);10个初值为个初值为0的字量,可以认为是数组的字量,可以认为是数组ARRAY DB 2 DUP (2, 3, 2
35、 DUP(4);6个字节内容依次为:个字节内容依次为:02 03 04 04 02 03 04 04例题例题3.2 变量的应用变量的应用;代码段;代码段MOV DL,BVAR1;DL100DEC BVAR2+1;BVAR2+14MOV ABC3,DL;ABCABCDMOV AX,WORD PTR DVAR0;取双字到;取双字到DX.AXMOV DX,WORD PTR DVAR2ADD AX,WORD PTR DVAR4;加双字到;加双字到DX.AXADC DX,WORD PTR DVAR6MOV WORD PTR DVAR8,AX;保存双字的求和;保存双字的求和结果结果MOV WORD PTR
36、 DVAR10,DX例题例题3.2 变量的应用(续)变量的应用(续)MOV CX,MAXINT;CX10MOV BX,0;BX0AGAIN: ADD STRINGBX,3 ; STRING每个数值加每个数值加3INC BXLOOP AGAIN;循环;循环LEA DX,ABC;从;从ABC开始开始MOV AH,9;09H号号DOS功能调用功能调用INT 21H;显示结果:;显示结果:ABCDDEFGHIJKLM45微机系统与接口技术微机系统与接口技术3. 变量的定位变量的定位汇编程序按照指令的先后顺序一个接着一个分配汇编程序按照指令的先后顺序一个接着一个分配存储空间,按照段定义伪指令规定的边界定
37、位属存储空间,按照段定义伪指令规定的边界定位属性确定每个逻辑段的起始位置(包括偏移地址)性确定每个逻辑段的起始位置(包括偏移地址)定位伪指令定位伪指令ORG控制数据或代码所在的偏移地址控制数据或代码所在的偏移地址ORG 参数参数ORG伪指令是将当前偏移地址指针指向参数表达伪指令是将当前偏移地址指针指向参数表达的偏移地址。的偏移地址。例如:例如:ORG 100h;从;从100H处安排数据或程序处安排数据或程序ORG $+10;偏移地址加;偏移地址加10,即跳过,即跳过10个字节空间个字节空间汇编语言程序中,符号汇编语言程序中,符号“$”表示当前偏移地址值表示当前偏移地址值46微机系统与接口技术微
38、机系统与接口技术3.2.3 名字和标号的属性名字和标号的属性名字和标号是用户自定义的标识符。名字和标号是用户自定义的标识符。名字名字指向一条指向一条伪指令,伪指令,标号标号指向一条硬指令。名字和标号一经使指向一条硬指令。名字和标号一经使用便具有两类属性:用便具有两类属性: 逻辑地址逻辑地址名字和标号对应存储单元的逻辑名字和标号对应存储单元的逻辑地址,含有段地址和偏移地址;地址,含有段地址和偏移地址; 类型类型变量名的类型可以是变量名的类型可以是BYTE(字节)、(字节)、WORD(字)和(字)和DWORD(双字)等;标号、段(双字)等;标号、段名、子程序名的类型可以是名、子程序名的类型可以是N
39、EAR(近)和(近)和FAR(远远),分别表示段内或段间调用,分别表示段内或段间调用汇编程序提供有关的操作符,以便获取这些属性值汇编程序提供有关的操作符,以便获取这些属性值47微机系统与接口技术微机系统与接口技术2. 类型操作符类型操作符类型操作符类型操作符对名字或标号的类型属性进行设置对名字或标号的类型属性进行设置类型名类型名 PTR 名字名字/标号标号其中可以是其中可以是BYTE、WORD、DWORD(依次表示字(依次表示字节、字、双字)等节、字、双字)等,或者是或者是NEAR、FAR(分别表示(分别表示近、远),还可以是由结构、记录等定义的类型近、远),还可以是由结构、记录等定义的类型对
40、变量:对变量:lLENGTHOF操作符获知某变量名指向多少个数据项操作符获知某变量名指向多少个数据项lSIZEOF操作符获知它共占用多少字节空间操作符获知它共占用多少字节空间48微机系统与接口技术微机系统与接口技术3.3 顺序程序设计顺序程序设计没有分支、循环等转移指令的程序,会按没有分支、循环等转移指令的程序,会按指令书写的前后顺利依次执行,这就是顺指令书写的前后顺利依次执行,这就是顺序程序序程序顺序结构是最基本的程序结构顺序结构是最基本的程序结构完全采用顺序结构编写的程序并不多见完全采用顺序结构编写的程序并不多见例题例题3.4 顺序程序设计实例顺序程序设计实例采用查表法,实现一位采用查表法
41、,实现一位16进制数进制数转换为转换为ASCII码显示码显示49微机系统与接口技术微机系统与接口技术例例3.4 数据段数据段;数据段数据段ASC DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;对应;对应0 9的的ASCII码码 DB 41H,42H,43H,44H,45H,46H ;对应;对应A F的的ASCII码码HEX DB 04H,0BH;假设两个数据;假设两个数据50微机系统与接口技术微机系统与接口技术例例3.4 代码段代码段 ;代码段代码段MOV BX,OFFSET ASC ;BX指向指向ASCII码表码表MOV AL,HEX;AL取得一位取
42、得一位16进制数进制数 ;恰好就是;恰好就是ASCII码表中的位移码表中的位移AND AL,0FH ;只有低;只有低4位是有效的,高位是有效的,高4位清位清0XLAT ;换码:;换码:ALDS:BXAL51微机系统与接口技术微机系统与接口技术例例3.4 代码段(续)代码段(续)MOV DL,AL;入口参数:;入口参数:DLALMOV AH,2;02号号DOS功能调用功能调用INT 21H;显示一个;显示一个ASCII码字符码字符MOV AL,HEX+1 ;转换并显示下一个数据;转换并显示下一个数据AND AL,0FHXLATMOV DL,ALMOV AH,2INT 21H52微机系统与接口技术
43、微机系统与接口技术3.4 分支程序设计分支程序设计分支程序根据条件是真或假决定执行与否分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如判断的条件是各种指令,如CMP、TEST等等执行后形成的状态标志执行后形成的状态标志转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制分支结构有分支结构有单分支结构单分支结构双分支结构双分支结构多分支结构多分支结构53微机系统与接口技术微机系统与接口技术单分支结构单分支结构 条件成立跳转,否条件成立跳转,否则顺序执行分支语则顺序执行分支语句体句体注意选择正确的条注意选择正确的条件转移指令和转移件转移指令和转移目标地址目标地址计算计算AX
44、中有符号数的绝对值中有符号数的绝对值 CMP AX,0 JGE NONEG;条件满足(;条件满足(AX0),转移),转移 NEG AX ;条件不满足,求补;条件不满足,求补 NONEG:MOV RESULT,AX;保存结果;保存结果;不恰当的分支;不恰当的分支 CMP AX,0 JL YESNEG;条件满足(;条件满足(AX0),转移),转移 JMP NONNEGYESNEG:NEG AX;条件满足,求补;条件满足,求补NONNEG:MOV RESULT,AX;保存结果;保存结果55微机系统与接口技术微机系统与接口技术双分支结构双分支结构条件成立跳转执行第条件成立跳转执行第2个个分支语句体,否
45、则顺序执分支语句体,否则顺序执行第行第1个分支语句体个分支语句体注意第注意第1个分支体后一定个分支体后一定要有一个要有一个JMP指令跳到第指令跳到第2个分支体后个分支体后56微机系统与接口技术微机系统与接口技术显示显示BX的最高位是的最高位是1或是或是0SHL BX,1;BX最高位移入最高位移入CF标志标志JC ONE;CF1,即最高位为,即最高位为1,转移,转移MOV DL,30H ;CF0,即最高位为,即最高位为0:DL30H0JMP TWO;一定要跳过另一个分支体;一定要跳过另一个分支体ONE: MOV DL,31H;DL 31H1TWO: MOV AH,2INT 21H;显示数;显示数
46、“0”或或“1”57微机系统与接口技术微机系统与接口技术显示显示BX的最高位(续)的最高位(续)SHL BX,1;BX最高位移入最高位移入CF标志标志JNC ONE;CF0,即最高位为,即最高位为0,转移,转移MOV DL,31H ;CF1,即最高位为,即最高位为1:DL31H1JMP TWO;一定要跳过另一个分支体;一定要跳过另一个分支体ONE: MOV DL,30H;DL 30H0TWO: MOV AH,2INT 21H;显示;显示58微机系统与接口技术微机系统与接口技术显示显示BX的最高位(另解)的最高位(另解)MOV DL,0 ;DL30H0SHL BX,1;BX最高位移入最高位移入C
47、F标志标志JNC TWO;CF0,即最高位为,即最高位为0,转移,转移MOV DL,1 ;CF1,即最高位为,即最高位为1:DL31H1TWO: MOV AH,2INT 21H;显示;显示 编写分支程序,需留心分支的开始和结束编写分支程序,需留心分支的开始和结束59微机系统与接口技术微机系统与接口技术显示显示BX的最高位(无分支)的最高位(无分支)MOV DL,0SHL BX,1;BX最高位移入最高位移入CF标志标志ADC DL,30H;CF0,DL030H030H0;CF1,DL030H131H1TWO:MOV AH,2INT 21H;显示;显示+ 301 0 1 0 0 0 1 1 0 0
48、 0 1 1 1 0 00 1 0 0 0 1 1 0 0 0 1 1 1 0 0 060微机系统与接口技术微机系统与接口技术显示显示BX全部二进制位如何处理(进一步)全部二进制位如何处理(进一步)MOV BX,0C8H MOV CX, 16LAB:MOV DL, 0SHL BX, 1 ;BX最高位移入最高位移入CF标志标志ADC DL, 30HMOV AH, 2INT 21H LOOP LAB61微机系统与接口技术微机系统与接口技术例题例题3.5 显示压缩显示压缩BCD码,无前导码,无前导0;数据段数据段BCDDB 04H ;代码段代码段MOV DL,BCDTEST DL,0FFH ;如果;
49、如果BCD码为码为0,显示,显示0JZ ZERO;双分支结构;双分支结构TEST DL,0F0H ;如果;如果BCD码高位为码高位为0,不显示,不显示0JZ ONE;单分支结构;单分支结构62微机系统与接口技术微机系统与接口技术例题例题3.5 显示压缩显示压缩BCD码,无前导码,无前导0(续)(续)MOV CL,4;处理高位;处理高位SHR DL,CLOR DL,30H ;转换为;转换为ASCII码码MOV AH,2;显示高位;显示高位INT 21HMOV DL,BCDAND DL,0FHONE: OR DL,30H ;处理低位;处理低位JMP TWOZERO:MOV DL,0TWO: MOV
50、 AH,2INT 21H63微机系统与接口技术微机系统与接口技术例题例题3.6 从键盘输入一个字符串从键盘输入一个字符串;数据段数据段KEYNUM = 255KEYBUFDB KEYNUM; 键盘输入缓冲区键盘输入缓冲区DB 0DB KEYNUM DUP(0);代码段代码段MOV DX,OFFSET KEYBUF ;输入字符串输入字符串MOV AH,0AHINT 21HMOV DL,0AH;再进行换行再进行换行MOV AH,2INT 21H64微机系统与接口技术微机系统与接口技术例题例题3.6 大小写字母转换大小写字母转换 MOV BX,OFFSET KEYBUF+1 ;取出字符个数取出字符个
51、数MOV CL,BXMOV CH,0;作为循环的次数作为循环的次数AGAIN:INC BXCMP DL,a;小于小写字母小于小写字母a,不需要处理,不需要处理JB DISPCMP DL,z;大于小写字母大于小写字母z,不需要处理,不需要处理JA DISPSUB DL,20H ;是小写字母,则转换为大写是小写字母,则转换为大写DISP:MOV AH,2;显示一个字符显示一个字符INT 21HLOOP AGAIN ;循环,处理完整个字符串循环,处理完整个字符串65微机系统与接口技术微机系统与接口技术多分支结构多分支结构多分支结构是多个条件多分支结构是多个条件对应各自的分支语句体,对应各自的分支语句
52、体,哪个条件成立就转入相哪个条件成立就转入相应分支体执行应分支体执行AH=0fuction0YNAH=1fuction1YNAH=2fuction2YNCMP AH,0JZ FUNCTION0CMP AH,1JZ FUNCTION0CMP AH,2JZ FUNCTION066微机系统与接口技术微机系统与接口技术例题例题3.7 地址表实现多分支结构地址表实现多分支结构;数据段数据段NUMBER DB 78H;假设一个数值:假设一个数值:D3位为位为1ADDRS DW OFFSET FUN0, ,OFFSET FUN7;取得各处理程序开始的偏移地址取得各处理程序开始的偏移地址;代码段代码段MOV
53、AL,NUMBERMOV DL,?;数值为数值为0,显示一个问号,显示一个问号“?”CMP AL,0;排除排除AL0的特殊情况的特殊情况JZ DISP67微机系统与接口技术微机系统与接口技术例题例题3.7 地址表实现多分支结构(续)地址表实现多分支结构(续)MOV BX,0;BX记录为记录为1的位数的位数AGAIN:SHR AL,1;最低位右移进入最低位右移进入CFJC NEXT;为为1,转移,转移INC BX;不为不为1,继续,继续JMP AGAINNEXT:SHL BX,1;偏移地址是偏移地址是2个字节个字节JMP ADDRSBX;IPADDRSBXFUN0:MOV DL,0JMP DIS
54、PDISP:MOV AH,2;显示一个字符显示一个字符INT 21H68微机系统与接口技术微机系统与接口技术3.5 循环程序设计循环程序设计循环程序结构循环程序结构是满足一定条件的情况下,是满足一定条件的情况下,重复执行某段程序重复执行某段程序循环结构的程序通常有循环结构的程序通常有3个部分:个部分: 循环初始部分循环初始部分为开始循环准备必要的条件,为开始循环准备必要的条件,如循环次数、循环体需要的数值等如循环次数、循环体需要的数值等 循环体部分循环体部分指重复执行的程序部分,其中指重复执行的程序部分,其中包括对循环条件等的修改程序段包括对循环条件等的修改程序段循环控制部分循环控制部分判断循
55、环条件是否成立,决判断循环条件是否成立,决定是否继续循环定是否继续循环69微机系统与接口技术微机系统与接口技术循环控制循环控制循环结构程序循环结构程序的设计关键是循环控制部分的设计关键是循环控制部分循环控制可以在进入循环之前进行,也可循环控制可以在进入循环之前进行,也可以在循环体后进行,于是形成两种结构:以在循环体后进行,于是形成两种结构:“先判断、后循环先判断、后循环”结构结构“先循环、后判断先循环、后判断”结构结构循环结束的控制可以用循环次数,还可以循环结束的控制可以用循环次数,还可以用特定条件等,于是又有:用特定条件等,于是又有:计数控制循环计数控制循环条件控制循环条件控制循环先循环后判
56、断的循环结构先循环后判断的循环结构 结束结束 初始化初始化 循环的初始状态循环的初始状态 循环体循环体 循环的工作部分循环的工作部分及修改部分及修改部分 计数控制循环计数控制循环条件控制循环条件控制循环修改部分修改部分控制条件控制条件Y YN N71微机系统与接口技术微机系统与接口技术求内存求内存6个数之和个数之和堆栈段定义堆栈段定义STACKS SEGMENT DW 64 DUP(?)STACKS ENDS数据段定义数据段定义DATA SEGMENTNUM DB 29H,05H,11H,18H,22H,0AHSUM DW ?DATA ENDSCODE SEGMENT ASSUME CS:CO
57、DE,DS:DATA,SS:STACKSMAIN PROC MOV AX,DATA MOV DS,AX MOV SI, OFFSET NUM ;指向数据首地址;指向数据首地址 XOR AX, AX ;和清零;和清零 MOV CX, 6 ;置求和计数;置求和计数LAB: ADD AL, SI ;取数并加;取数并加 ADC AH, 00H ;加可能的进位;加可能的进位 INC SI ;调整指针指向下一个数;调整指针指向下一个数 LOOP LAB ;CX-10继续继续 MOV SUM, AX ; 保存和到保存和到SUM单元单元MAIN ENDPCODE ENDS END MAIN 73微机系统与接口
58、技术微机系统与接口技术3.5.1 计数控制循环计数控制循环 计数控制循环计数控制循环利用利用循环次数循环次数作作为控制条件为控制条件易于采用循环指令易于采用循环指令LOOP和和JCXZ实现实现初始化:将循环次数或最大循环初始化:将循环次数或最大循环次数置入次数置入CX循环体循环体循环控制:用循环控制:用LOOP指令对指令对CX减减1、并判断是否为、并判断是否为074微机系统与接口技术微机系统与接口技术例例3.8 显示显示BL的二进制内容的二进制内容MOV CX,8 ;CX8(循环次数)(循环次数)AGAIN:SHL BL,1 ;左移进;左移进CF,从高位开始显示从高位开始显示MOV DL,0;
59、MOV指令不改变指令不改变CFADC DL,30H;DL030HCF;CF若是若是0,则,则DL 0 ;CF若是若是1,则,则DL 1 MOV AH,2INT 21H;显示;显示LOOP AGAIN;CX减减1,如果,如果CX未减至未减至0,则循环,则循环计数控制循环计数控制循环先循环后判断先循环后判断75微机系统与接口技术微机系统与接口技术例例3.9 求数组元素的最大值和最小值求数组元素的最大值和最小值 ;数据段数据段ARRAY DW 10 ;假设一个数组,其中头个数据;假设一个数组,其中头个数据10表示元素个数表示元素个数DW -3,0,20,900,587,-632,777,234,-3
60、4,-56 ;这是一个有符号字量元素组成的数组;这是一个有符号字量元素组成的数组MAX DW ?;存放最大值;存放最大值MINDW ?;存放最小值;存放最小值初始化:循环次数元素个数初始化:循环次数元素个数1循环体:逐个比较求最大、小值循环体:逐个比较求最大、小值循环控制:比较完所有数据循环控制:比较完所有数据76微机系统与接口技术微机系统与接口技术例例3.9 代码段代码段;代码段;代码段MOV SI, OFFSET ARRAYMOV CX,SI;取得元素个数;取得元素个数DEC CX;减;减1后是循环次数后是循环次数ADD SI,2MOV AX,SI;取出第一个元素给;取出第一个元素给AX,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软考设计师学习方法解析试题及答案
- 技术员计算机考试全真试题及答案
- 高考数学知识技能对比研究试题及答案
- 企业战略实施的关键技能试题及答案
- 软件技术员考试成败关键解读试题及答案
- 行政法学多元化视野试题及答案
- 企业财务战略与其风险管理架构试题及答案
- 多元化经营的实施方案计划
- VB考试必背知识点的试题及答案
- 湖南省2025年第一次集中招聘考试笔试历年典型考题及考点剖析附带答案详解
- 2025年建筑模板制品行业深度研究报告
- 湖北省荆门市2025年七年级下学期语文期末考试试卷及答案
- 2025-2030年中国叶黄素行业市场发展现状及竞争格局与投资发展研究报告
- 2024第41届全国中学生物理竞赛预赛试题(含答案)
- 内镜洗消相关试题及答案
- 高效节能泵结构优化-全面剖析
- 2024-2025湘科版小学科学四年级下册期末考试卷及答案(三套)
- 中国企业科创力研究报告2024
- 细胞培养技术的基础试题及答案
- (广东二模)2025年广东省高三高考模拟测试(二)历史试卷(含答案)
- GB/T 14601-2025电子特气氨
评论
0/150
提交评论