汇编语言程序设计补充学习教案_第1页
汇编语言程序设计补充学习教案_第2页
汇编语言程序设计补充学习教案_第3页
汇编语言程序设计补充学习教案_第4页
汇编语言程序设计补充学习教案_第5页
已阅读5页,还剩180页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1汇编语言汇编语言(hu bin y yn)程序设计补充程序设计补充第一页,共185页。 2高级语言(High Level Language) 如果说机器语言是面向机器的,那么高级语言(如BASIC,FORTRAN等)则是“面向过程”的语言。利用这些语言编程,程序员可以完全不考虑机器的结构特点,不必了解和熟记机器的指令系统,仅使用一些接近人们书写习惯的英语和数学表达式形式的语句去编制程序。这样编写的程序与问题本身的数学模型之间有着良好的对应关系,可在各种机器上通用(不同机器之间仅做少量修改)。但是,这种用高级语言编写的源程序并不能在机器上直接执行,需要被翻译(fny)成对应的目标程序(即

2、机器语言程序),机器才能运行。把具有这种翻译(fny)作用的程序称为解释程序或编译程序,见图5.1。 第1页/共184页第二页,共185页。用高级语言编写的源程序编译或解释程序目标程序图5.1 编译程序(bin y chn x)的功能示意图 由于高级语言程序是在未考虑机器的结构特点的条件下编写(binxi)的,因而它就不能充分利用某种具体CPU所具有的某些特性,而通过编译或解释程序生成的目标程序往往比较冗长, 占有较多的内存空间,执行时间也比较长,这就限制了它在某些场合下的运用。例如,实时的数据采集、检测和在线的实时控制等,往往要求程序的目标代码尽可能少占内存并有尽可能快的执行速度,在这些场合

3、下,使用高级语言编写(binxi)的程序常常不能满足要求。 第2页/共184页第三页,共185页。 3汇编语言(Assembly Language) 汇编语言是一种采用助记符表示的程序设计语言,即用助记符来表示指令的操作码和操作数,用标号或符号代表地址、常量或变量。助记符一般都是英文字的缩写,以方便人们书写、阅读和检查。实际上,用汇编语言编写的汇编语言源程序就是机器语言程序的符号表示,汇编语言源程序与其(yq)经过汇编所产生的目标代码程序之间有明显的一一对应关系,故也称汇编语言为符号语言。 第3页/共184页第四页,共185页。 用汇编语言编写程序能够直接利用硬件系统的特性(如寄存器、标志、中

4、断系统等)直接对位、字节、字寄存器或存储单元、I/O端口进行处理,同时也能直接使用(shyng)CPU 指令系统和指令系统提供的各种寻址方式,编制出高质量的程序,这样的程序不但占用内存空间少,而且执行速度快。当然,由于源程序和所要解决的问题的数学模型之间的关系不够直观,使得汇编语言程序设计需要较多的软件开发时间,也增加了程序设计过程中出错的可能性。 用汇编语言编写的源程序也需要翻译成目标程序才能被机器执行。这个翻译过程称为汇编,完成汇编任务的程序称为汇编程序,见图5.2。 第4页/共184页第五页,共185页。用汇编语言编写的源程序汇编程序目标程序图5.2 汇编程序(hu bin chn x)

5、的功能示意图 第5页/共184页第六页,共185页。 汇编程序是最早也是最成熟的一种系统软件。它除了能够将汇编语言源程序翻译成机器语言程序这一主要功能外,还能够根据用户的要求自动分配存储区域(包括程序区、数据区、暂存区等);自动地把各种进位制数转换成二进制数,把字符转换成ASCII码,计算表达式的值等;自动对源程序进行(jnxng)检查,给出错误信息(如非法格式,未定义的助记符、标号,漏掉操作数等)等。具有这些功能的汇编程序又称为基本汇编(或小汇编ASM)。 在基本汇编的基础上,进一步允许在源程序中把一个指令序列定义为一条宏指令的汇编程序,就叫做宏汇编(MASM)。它包含全部ASM功能,还增加

6、了宏指令、结构、记录等高级汇编语言功能。 第6页/共184页第七页,共185页。第7页/共184页第八页,共185页。第8页/共184页第九页,共185页。分段结构分段结构 由上面的例子可以看出,汇编语言源程序的结构是分段结由上面的例子可以看出,汇编语言源程序的结构是分段结构形式,一个汇编语言源程序由若干段构形式,一个汇编语言源程序由若干段(SEGMENT)组成,每个组成,每个段以段以SEGMENT语句开始,以语句开始,以ENDS语句结束。整个源程序的结语句结束。整个源程序的结尾是尾是END语句。语句。 这里所说的汇编语言源程序中的段与前面讨论的这里所说的汇编语言源程序中的段与前面讨论的CPU

7、管理管理的存储器的段,既有联系,又在概念上有所区别。我们已经知的存储器的段,既有联系,又在概念上有所区别。我们已经知道,微处理器对存储器的管理是分段的,因此,在汇编语言程道,微处理器对存储器的管理是分段的,因此,在汇编语言程序中也要求分段组织序中也要求分段组织(zzh)指令、数据和堆栈,以便将源程序指令、数据和堆栈,以便将源程序汇编成为目标程序后,可以分别装入存储器的相应段中。汇编成为目标程序后,可以分别装入存储器的相应段中。 第9页/共184页第十页,共185页。 但是(dnsh),以8086/8088 CPU为例,它有四个段寄存器(CS,ES,SS和DS),因此CPU对存储器按照四个物理段

8、进行管理,即数据段、附加段、堆栈段和代码段。任何时侯CPU只能访问四个物理段。而在汇编语言源程序中,设置段的自由度比较大。例如,一个源程序中可以有多个数据段或多个代码段等等。一般来说,汇编语言源程序中段的数目可以根据实际需要而设定。为了和CPU管理的存储器物理段相区别,我们将汇编语言程序中的段称为逻辑段。在不致发生混淆的地方,有时简称为段。第10页/共184页第十一页,共185页。 在上面的简单源程序中只有两个(lin )逻辑段,一个逻辑段的名字是DATA,其中存放着与程序有关的数据,称为逻辑数据段;另一个逻辑段的名字是CODE,其中包含着程序的指令,称为逻辑代码段。每个段内均有若干行语句(S

9、TATEMENT),因此,可以说一个汇编源程序是由一行一行的语句组成的。下面我们来讨论汇编语言语句的类型和组成。 第11页/共184页第十二页,共185页。第12页/共184页第十三页,共185页。第13页/共184页第十四页,共185页。第14页/共184页第十五页,共185页。汇编语言语句的类型和格式汇编语言语句的类型和格式 1语句的类型语句的类型 汇编语言源程序中的语句可以分为两种类型:指令语句和伪指令汇编语言源程序中的语句可以分为两种类型:指令语句和伪指令语句。语句。 (1) 指令语句:它是能产生目标代码,指令语句:它是能产生目标代码,CPU 可以执行的能完成特可以执行的能完成特定定(

10、tdng)功能的语句。功能的语句。 (2) 伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出的汇编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出的汇编语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变量分配存储单元,给数字或表达式命名等。显然,伪指令语句是汇编量分配存储单元,给数字或表达式命名等。显然,伪指令语句是汇编程序在汇编时使用的。程序在汇编时使用的。 第15页/共184页第十六页,共185页。第1

11、6页/共184页第十七页,共185页。第17页/共184页第十八页,共185页。第18页/共184页第十九页,共185页。第19页/共184页第二十页,共185页。第20页/共184页第二十一页,共185页。第21页/共184页第二十二页,共185页。第22页/共184页第二十三页,共185页。第23页/共184页第二十四页,共185页。第24页/共184页第二十五页,共185页。第25页/共184页第二十六页,共185页。第26页/共184页第二十七页,共185页。第27页/共184页第二十八页,共185页。第28页/共184页第二十九页,共185页。第29页/共184页第三十页,共185页

12、。第30页/共184页第三十一页,共185页。第31页/共184页第三十二页,共185页。第32页/共184页第三十三页,共185页。第33页/共184页第三十四页,共185页。第34页/共184页第三十五页,共185页。第35页/共184页第三十六页,共185页。第36页/共184页第三十七页,共185页。第37页/共184页第三十八页,共185页。第38页/共184页第三十九页,共185页。第39页/共184页第四十页,共185页。第40页/共184页第四十一页,共185页。第41页/共184页第四十二页,共185页。第42页/共184页第四十三页,共185页。第43页/共184页第四十四

13、页,共185页。第44页/共184页第四十五页,共185页。第45页/共184页第四十六页,共185页。第46页/共184页第四十七页,共185页。个双字第47页/共184页第四十八页,共185页。第48页/共184页第四十九页,共185页。第49页/共184页第五十页,共185页。第50页/共184页第五十一页,共185页。第51页/共184页第五十二页,共185页。第52页/共184页第五十三页,共185页。第53页/共184页第五十四页,共185页。第54页/共184页第五十五页,共185页。第55页/共184页第五十六页,共185页。第56页/共184页第五十七页,共185页。第57页

14、/共184页第五十八页,共185页。第58页/共184页第五十九页,共185页。第59页/共184页第六十页,共185页。第60页/共184页第六十一页,共185页。第61页/共184页第六十二页,共185页。第62页/共184页第六十三页,共185页。第63页/共184页第六十四页,共185页。第64页/共184页第六十五页,共185页。 THIS运算符。THIS运算符也可指定存储器操作数的类型。使用THIS运算符可以使标号或变量更具灵活性。例如,要求对同一个数据区既可以字节为单位,又可以字为单位进行存取,则可用以下语句:TAB1 EQU THIS WORDTAB2 DB 100 DUP(?

15、) 上面(shng min)TAB1和TAB2实际上代表同一个数据区,其中共有100个字节,但TAB1的类型为WORD(字类型),而TAB2的类型为BYTE(字节类型)。 第65页/共184页第六十六页,共185页。第66页/共184页第六十七页,共185页。第67页/共184页第六十八页,共185页。第68页/共184页第六十九页,共185页。5.3.3 段定义伪指令段定义伪指令 段定义伪指令的用途是在汇编语言源程序中定义逻辑段。常用的段定义伪指令有SEGMENT/ENDS和ASSUME等 。 1SEGMENT/ENDS 格式: 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS

16、 第69页/共184页第七十页,共185页。 SEGMENT 伪指令用于定义一个逻辑段,给逻辑段赋予一个段名,并以后面的任选项(定位类型、组合类型、类别)规定该逻辑段的其他特性。SEGMENT 伪指令位于一个逻辑段的开始部分,而ENDS伪指令则表示一个逻辑段的结束。在汇编语言源程序中,这两个伪指令定义符总是成对出现的,二者前面的段名必须(bx)一致。两个语句之间的部分即是该逻辑段的内容。例如,对于代码段,其中主要有指令及其他伪指令;对于数据段和附加段,主要有定义数据区的伪指令等等。一个源程序中不同逻辑段的段名可以各不相同。 第70页/共184页第七十一页,共185页。 1) 定位 (Align

17、) 类型 定位类型任选项告诉汇编程序如何确定逻辑段的边界在存储器中的位置。定位类型共有以下四种: BYTE(边界起始地址= B) 该类型表示逻辑段从一个字节(z ji)的边界开始,即可以从任何地址开始。此时本段的起始地址可紧接在前一个段的后面。 第71页/共184页第七十二页,共185页。 WORD(边界起始地址= 0B) 该类型表示逻辑段从字的边界开始。2字节为1个字,此时本段的起始地址必须是偶数(u sh)。 PARA(边界起始地址= 0 0 0 0B) 该类型表示逻辑段从一个节(Paragraph)的边界开始(一节等于16个字节),也即段的起始地址能被16整除。故本段的起始地址(十六进制

18、)应为0H。如果省略定位类型任选项,则默认其为PARA。 第72页/共184页第七十三页,共185页。 PAGE(边界(binji)起始地址= 0 0 0 0 0 0 0 0B) 该类型表示逻辑段从页边界(binji)开始(一页等于256个字节),也即段的起始地址能被256整除。故本段的起始地址(十六进制)应为00H。 第73页/共184页第七十四页,共185页。 2) 组合(Combine)类型 SEGMENT伪指令的第二个任选项是组合类型,它告诉汇编程序当装入存储器时各个(gg)逻辑段如何进行组合。组合类型共有以下六种。 (1) 不组合。如果SEGMENT伪指令的组合类型任选项缺省,则汇编

19、程序认为这个逻辑段是不组合的。也就是说,不同程序中的逻辑段,即使具有相同的段名,也分别作为不同的逻辑段装入内存,不进行组合。但是,对于组合类型任选项缺省的同名逻辑段,如果属于同一个程序模块,则被集中成为一个逻辑段。 第74页/共184页第七十五页,共185页。 (2) PUBLIC。连接时,对于不同程序模块中的逻辑段,只要具有相同的段名,就把这些段集中成为一个逻辑段装入内存。 (3) STACK。组合(zh)类型为STACK时,其含意与PUBLIC基本一样,即不同程序中的逻辑段,如果段名相同,则集中成为一个逻辑段。不过组合(zh)类型STACK仅限于作为堆栈区域的逻辑段使用。顺便提一下,在执行

20、程序(.EXE)中,堆栈指针SP设置在这个集中以后的堆栈段的(最终地址1)处。 第75页/共184页第七十六页,共185页。 (4) COMMON。连接时,对于不同程序中的逻辑段,如果具有相同的段名,则都从同一个地址开始装入,因而(yn r)各个逻辑段将发生重叠。最后,连接以后段的长度等于原来最长的逻辑段的长度,重叠部分的内容是最后一个逻辑段的内容。 (5) MEMORY。该类型表示当几个逻辑段连接时,本逻辑段定位在地址最高的地方。如果被连接的逻辑段中有多个段的组合类型都是MEMORY,则汇编程序只将首先遇到的段作为MEMORY段,而其余的段均当作COMMON段处理。 第76页/共184页第七

21、十七页,共185页。 (6) AT表达式。这种组合(zh)类型表示本逻辑段根据表达式的值定位段地址。例如AT 8A00H,表示本段的段地址为8A00H,则本段从存储器的物理地址8A000H开始装入。 第77页/共184页第七十八页,共185页。 3) 类别(Class) SEGMENT伪指令的第三个任选项是类别,类别必须放在单引号内。类别的作用是在连接时决定各逻辑段的装入顺序。当几个程序模块进行连接时,其中具有相同类别名的逻辑段被装入连续的内存区,类别名相同的逻辑段,按出现的先后顺序排列。没有类别名的逻辑段,与其他(qt)无类别名的逻辑段一起连续装入内存。 第78页/共184页第七十九页,共1

22、85页。 例如,假设(jish)一个主程序中有五个逻辑段,段名和类别名分别为:STK1段 STACKCODE1段 无DATA1段 BUFFER DATA2段 TABLE DATA3段 BUFFER 第79页/共184页第八十页,共185页。还有一个子程序,包括四个逻辑段,段名和类别(libi)名分别为: DATA4段 TABLE DATA5段 BUFFER STK2段 STACK CODE2段 无 当将上述主程序和子程序进行连接时,两个(lin )程序模块中各逻辑段装入内存的顺序见图5.3。第80页/共184页第八十一页,共185页。段名类别名主程序STK1STACKCODE1DATA1DAT

23、A2DATA3无BUFFERTABLEBUFFER段名类别名子程序DATA4DATA5STK2TABLEBUFFERSTACKCODE2无无DATA1DATA3DATA5DATA2DATA4CODE2CODE1STK2STK1存储器STACK无类别名BUFFERTABLE图5.3 逻辑段按类别(libi)装入内存的示意图 第81页/共184页第八十二页,共185页。 SEGMENT伪指令后面还有三个任选项:定位类型、组合类型和类别。在上面的格式中,它们都放在方括号内,表示可有可无。如果有,三者的顺序必须符合格式中的规定。这些任选项是给汇编程序(MASM)和连接程序(LINK)的命令。 SEGM

24、ENT伪指令后面的任选项告诉汇编程序和连接程序,如何确定段的边界,以及如何组合几个不同的段等。下面(xi mian)分别进行讨论。 第82页/共184页第八十三页,共185页。第83页/共184页第八十四页,共185页。第84页/共184页第八十五页,共185页。第85页/共184页第八十六页,共185页。第86页/共184页第八十七页,共185页。汇编语言汇编语言(hu bin y yn)和和DOS操作系统的接口操作系统的接口 当我们编写的汇编语言当我们编写的汇编语言(hu bin y yn)源程序是在源程序是在DOS环境环境下运行时,必须了解汇编语言下运行时,必须了解汇编语言(hu bin

25、 y yn)是如何同是如何同DOS操作操作系统接口的。系统接口的。 当我们用编辑程序把源程序输入到机器中,用汇编程序把它转当我们用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区一个用户程序建立了一个程序段前缀区PSP,其长度为,其长度为256个字节,个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。操作系统在程序段前缀的开始处系统的接口。操作系统在程序段前缀的开

26、始处(偏移地址偏移地址0000H)安安排了一条排了一条INT 20H软中断指令。软中断指令。INT 20H中断服务程序由中断服务程序由DOS提供,提供,执行该服务程序后,控制就转移到执行该服务程序后,控制就转移到DOS,即返回到,即返回到DOS管理的状态。管理的状态。因此,用户在组织程序时,必须使程序执行完后能去执行存放于因此,用户在组织程序时,必须使程序执行完后能去执行存放于PSP开始处的开始处的INT 20H指令,这样便返回到指令,这样便返回到DOS,否则就无法继续,否则就无法继续键入命令和程序。键入命令和程序。 第87页/共184页第八十八页,共185页。 DOS在建立了程序段前缀区PS

27、P之后,就将要执行的程序从磁盘装入内存。在定位程序时,DOS将代码段置于PSP下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后,DOS就设置段寄存器DS和ES的值,以使它们指向PSP的开始处,即INT 20H的存放地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的指令(zhlng)位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底(取决于堆栈的长度),然后系统开始执行用户程序。 为了保证用户程序执行完后能返回到DOS状态,可使用如下两种方法。 第88页/共184页第八十九页,共185页。 1标准方法 首先将用户程序的主程序定义成一个FAR过程,

28、其最后一条指令为RET。然后在代码段的主程序(即FAR过程)的开始部分用如下(rxi)三条指令将PSP中INT 20H 指令的段地址及偏移地址压入堆栈:PUSH DS ;保护PSP段地址MOV AX,0 ;保护偏移地址0PUSH AX 第89页/共184页第九十页,共185页。 这样,当程序执行到主程序的最后一条指令RET时,由于该过程具有FAR属性,故存在堆栈内的两个字就分别弹出到CS和IP,从而执行INT 20H指令,使控制返回到DOS状态。例如(lr)上面的多字节相加程序就是采用这种方法使控制返回到DOS状态的(返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C)。 第90页/

29、共184页第九十一页,共185页。 2. 非标准方法 也可在用户的程序中不定义过程段,只在代码段结束之前(即CODE ENDS之前)增加(zngji)两条语句:MOV AH,4CHINT 21H则程序执行完后也会自动返回DOS状态。 第91页/共184页第九十二页,共185页。第92页/共184页第九十三页,共185页。第93页/共184页第九十四页,共185页。第94页/共184页第九十五页,共185页。第95页/共184页第九十六页,共185页。第96页/共184页第九十七页,共185页。第97页/共184页第九十八页,共185页。第98页/共184页第九十九页,共185页。第99页/共1

30、84页第一百页,共185页。第100页/共184页第一百零一页,共185页。第101页/共184页第一百零二页,共185页。第102页/共184页第一百零三页,共185页。汇编语言汇编语言(hu bin y yn)程序设计程序设计 通常, 编制一个汇编语言程序应按如下(rxi)步骤进行: 明确任务, 确定算法。 绘流程图。 根据流程图编写汇编语言程序。 上机调试程序。 第103页/共184页第一百零四页,共185页。图 6.3 标准(biozhn)流程图符号 起始和终止框执行判断框连接框第104页/共184页第一百零五页,共185页。顺序程序设计顺序程序设计(shj)图 6.4 顺序(shnx

31、)结构流程图 开始S1S2S3结束第105页/共184页第一百零六页,共185页。 例例 6.5 试编制一程序试编制一程序(chngx),求出下列公式中的,求出下列公式中的Z值,并存放在值,并存放在RESULT单元中:单元中: 28)(XYXZ其中X,Y的值分别(fnbi)存放在VARX,VARY单元中。源程序编制如下: TITLE EXAMPLE 1 DATA SEGMENT 2 VARX DW 6 3 VARY DW 7 4 RESULT DW ? 5 DATA ENDS 第106页/共184页第一百零七页,共185页。 6 STACK1 SEGMENT PARA STACK 7 DW 2

32、0H DUP(0) 8 STACK1 ENDS 9 COSEG SEGMENT 10 ASSUME CS: COSEG, DS: DATA, SS: STACK1 11 PROC1 PROC FAR 12 START: PUSH DS 13 MOV AX,0 14 PUSH AX 15 MOV AX,DATA 16 MOV DS, AX 17 MOV DX, VARX ;DXX 第107页/共184页第一百零八页,共185页。 18 ADD DX, VARY ;DX (X+Y) 19 MOV CL, 3 20 SAL DX, CL ;DX (X+Y)*8 21 SUB DX, VARX ;DX

33、 (X+Y)*8-X 22 SAR DX,1 ;DX (X+Y)*8-X)/2 23 MOV RESULT,DX ; 存结果 24 RET 25 PROC1 ENDP 26 COSEG ENDS 27 END START 第108页/共184页第一百零九页,共185页。图 6.5 用户程序装入内存(ni cn)后的内存(ni cn)分配情况 系统占用程序段前缀用户数据段用户堆栈段用户代码系统和ROM占用0HDS,ESSSCS0FFFFFH共100H个字节用户空间第109页/共184页第一百一十页,共185页。 结束用户程序, 返回操作系统的另一个办法是用中断指令“INT 21H”。如使用这种办

34、法,用户程序可以不设置过程(guchng), 只要在用户程序结束时,用以下两条指令即可: MOV AH, 4CH INT 21H 这样(zhyng),上述程序的代码段可以修改为: COSEG SEGMEN T ASSUME CS: COSEG, DS: DATA ASSUME SS: STACK1 第110页/共184页第一百一十一页,共185页。START: MOV AX, DATA MOV DS, AX MOV DX, VARX ADD DX, VARY MOV CL,3 SAL DX, CL SUB DX, VARX SAR DX,1 MOV RESULT, DX MOV AH, 4CH

35、 INT 21H COSEG ENDS END START 第111页/共184页第一百一十二页,共185页。 例例 用查表的方法将一位十六进制数转换成与它相应的用查表的方法将一位十六进制数转换成与它相应的ASCII码。码。 既然指定用查表的方法,那么首先要建立既然指定用查表的方法,那么首先要建立(jinl)一个表一个表TABLE。 我们在表中按照十六进制数从小到大的顺序放入它们对应的我们在表中按照十六进制数从小到大的顺序放入它们对应的ASCII码码值。编制的源程序如下:值。编制的源程序如下: DATA SEGMENT TABLE DB 30H,31H,32H,33H,34H,35H,36H,

36、37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 4 ASCI DB ? DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) 第112页/共184页第一百一十三页,共185页。STACK1 ENDS COSEG SEGMENT ASSUME CS: COSEG, DS: DATA, SS: STACK1 BEING: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE MOV AH,0 MOV AL, HEX ADD BX, AX MOV AL, BX MOV ASC

37、I, AL MOV AH, 4CH INT 21H COSEG ENDS END BEING 第113页/共184页第一百一十四页,共185页。 类似这种查表, 如使用换码指令XLAT(Translate), 程序可以更加精练。 换码指令格式: XLAT 表首址 指令功能: AL(BX)+(AL) 使用这条指令,通常是把表首址的偏移量送入BX中,而把要查找(ch zho)表内单元的偏移量(0255)送入AL中。这样,上述程序中代码段的有关语句可以修改为 BEING: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE MOV AL, HEX XLAT TA

38、BLE MOV ASCI, AL 第114页/共184页第一百一十五页,共185页。例5.8 求两个数的平均值。这两个数分别放在x单元(dnyun)和y单元(dnyun)中,而平均值放在z单元(dnyun)中。程序如下:DATA SEGMENT x DB 95 y DB 87 z DB ? 第115页/共184页第一百一十六页,共185页。DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA MAINPROC FARSTART:PUSHDS MOV AX,0 PUSH AX MOV AX,DATA;装填(zhun tin)数据段寄存器DS MOV DS,AX MO

39、V AL,x ;第一个数送入AL 第116页/共184页第一百一十七页,共185页。ADD AL,y ;两数相加,结果送ALMOV AH,0ADC AH,0 ;带进位(jnwi)加法,进位(jnwi)送AHMOV BL,2 ;除数2送BLDIV BL ;求平均值送ALMOV z,AL ;结果送入z单元RET MAIN ENDPCODEENDSEND START 第117页/共184页第一百一十八页,共185页。 例5.9 在内存中自tab开始的16个单元连续存放着015的平方值(平方表),任给一个数x(0 x15),如13,且存放在x单元中,查表求x的平方值,并把结果送入y单元中。根据给出的平

40、方表,分析表的存放规律,可知表的起始地址与数之和,正是的平方值所在(suzi)单元的地址,由此编制程序如下: DATA SEGMENT tabDB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,225 x DB 13 y DB ?DATA ENDS 第118页/共184页第一百一十九页,共185页。CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX LEA BX,tab MOV AH,0 MOV AL,x ADD BX,AX MOV AL,BX MOV y,AL MOV A

41、H,4CH INT 21H CODE ENDS END START 第119页/共184页第一百二十页,共185页。第120页/共184页第一百二十一页,共185页。第121页/共184页第一百二十二页,共185页。第122页/共184页第一百二十三页,共185页。第123页/共184页第一百二十四页,共185页。第124页/共184页第一百二十五页,共185页。第125页/共184页第一百二十六页,共185页。第126页/共184页第一百二十七页,共185页。第127页/共184页第一百二十八页,共185页。第128页/共184页第一百二十九页,共185页。第129页/共184页第一百三十页,共185页。第130页/共184页第一百三十一页,共1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论