8086PENTIUM指令系统汇编语言程序设计_第1页
8086PENTIUM指令系统汇编语言程序设计_第2页
8086PENTIUM指令系统汇编语言程序设计_第3页
8086PENTIUM指令系统汇编语言程序设计_第4页
8086PENTIUM指令系统汇编语言程序设计_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、13.3 汇编语言中的标记、表达式和伪指令汇编语言中的标记、表达式和伪指令3.3.1 汇编语言概况汇编语言概况图3.8 由汇编程序执行的汇编过程2汇编语言用指令助记符来表示机器语言。汇编语言编写的程序源程序。汇编语言中的指令与机器指令之间具有一一对应的关系。经过汇编后,得到目标代码。汇编语言是面向机器的语言。它的优点直接面向机器,硬件操作能力强,目标代码小,执行效率高。缺点:与其它高级语言相比较,程序阅读、理解相对困难,可移植性差。下面看一段汇编语言程序例子3datasegment;数据段定义开始 dai dbinput string:$ bufdmadb80hdup (?)dataends;

2、数据段定义结束stack segment;堆栈段定义开始 me1db80hdup(?)stack ends;堆栈段定义结束codesegment;代码段定义开始assume cs:code,ds:data,ss:stack,es:datastart:movax,datamovds,axmovdx,offset meimovah,09hint21hmovdx,offset bufdma movah,0ahint21hcodeends;代码段定义结束end;程序结束规范程序规范程序43.3.2 汇编语言中的标记汇编语言中的标记汇编语言是面向机器的程序设计语言。汇编语言程序设计在计算机的程序设计中占

3、据重要的地位,特别是对于自动化专业更是如此。汇编语言程序的最大优点:直接面对计算机的硬件,可以直接操作计算机的全部资源,具有最高的效率和控制硬件的能力。最主要缺点:面向特定的计算机,不方便程序移植,需要熟悉硬件。51 汇编语言指令的书写格式及标识符(1)指令书写格式标号:指令助记符 操作数,(操作数) ;注释(2)标号:又叫标识符。 为可选项,它在指令助记符前,以“:”结尾。 标号是该指令在内存中存放的符号地址,转移指令,过程调用指令通常使用该标号来作为目的地址。 一个程序段的开头、一个数据段的开头一般会给出标识符。 子程序投、转移程序的转移目的需要给出标识符。6标号由英文字母、数字、 或“_

4、 , , ? ” 等组成,但应注意: 第一个符号不能是数字; “?” 不能单独做标号。 保留字不能作为标号使用。所谓保留字,就是所有的指令,伪指令以及汇编语言定义的特殊符号,例如 ljmp db 等。 标号不是每一条指令都必须的,只有需要时,指令前面才加标号。所谓需要,就是转移指令的目的地址,或过程(子程序)的第一条指令,或其它目的。标号的长度:不超过31位。7 标号由英文字母、数字、 或“_ , , ? ” 等组成,但应注意:l 第一个符号不能是数字;l “?” 不能单独做标号。l 保留字不能作为标号使用。所谓保留字,就是所有的指令,伪指令以及汇编语言定义的特殊符号,例如 ljmp db 等

5、。 标号不是每一条指令都必须的,只有需要时,指令前面才加标号。 所谓需要,就是转移指令的目的地址,或过程(子程序)的第一条指令,或其它目的。 标号的长度:不超过31位。8例如: start my_code x abcd1 ?001 l004 abc都是有效的标号9而以下这些标号 4abc 第一个字符是数字 main$ 使用了非法字符 $ str=6 使用了非法字符 = a/b 使用了非法字符 / ? 问号不能单独作标号使用 mov 使用了保留字 mov 都是无效的标号。 保留字是指整个字符串,如果字符串中只有部分字符与保留字相同则没关系例如: a_mov_b and123等,都是有效标号。10

6、(3)指令助记符和操作数前面学过。11(4)注释 是可选项,它主要是为了增加程序的可读与可理解性,注释部分不影响程序的执行。 注释部分以 “;”号开始,可以使用任何符号。 一行写不下,可以使用多行,凡是“;”后面的,都是注释。 注释放在一段程序之前,对这段程序进行说明。 或者放在指令之后,对这条指令执行的作用进行说明。12data segment ;数据段定义开始da1db this is a sample program db 0dh,0ah,$ data emds ;数据段定义结束 stack segment ;堆栈段定义开始 st1 db 100dub(?);定义100个字节 stack

7、 ends data segment ;数据段定义开始da1db this is a sample program db 0dh,0ah,$ data emds ;数据段定义结束 13stack segment ;堆栈段定义开始 st1 db 100dub(?);定义100个字节堆栈空间 stack endscode segment;代码段定义开始main proc far assume cs: code,ds:data,ss:stackorg 1000 start: push ds ;程序代码开始 mov ax,0 main emdp ;代码结束 code ends ;代码段定义结束 end

8、 start ;程序结束142 保留字保留字汇编语言中用到的,不能给用户随意定义为其它功能的字符和字符串。例如:全部的指令助记符, 寄存器名 伪指令符号 表达式符号等。153. 分界符汇编语言程序设计中,作为程序,或一条指令中两个部分的分隔符用。例如 两个操作数之间的分隔符 , 标号的分隔符 注释的分隔符教材124页表3.2 给出了可用的分界符。164. 常数在指令中,它就是立即数。可以使用各种数制,注意不同数制的表示方式。如果是字符串,需要用单引号括起来,例如abcd它表示包含4个字符的字符转,分别用每个字符的ascii码存放41h,42h,43h,44h1234表示的是字符串,存放31h,

9、32h,33h,34h173.3.3 表达式表达式1. 表达式的组成:操作数和运算符。表达式的组成:操作数和运算符。2. 操作数:可以代表一个数据,也可以代表一个地址。操作数:可以代表一个数据,也可以代表一个地址。 逻辑运算符 关系运算符 分析运算符 综合运算符183.运算符运算符(1)算术运算符包括 +; -; *; / ; 取模运算 mod取模运算 mod两数相除,取它的余数。例如: 20 mod 7 结果为? 6 55 mod 6 = 119(2) 逻辑运算符包括: 与(and);或(or), 非(not), 异或(xor)注:只能对常数进行,结果也是常数 他与指令的逻辑运算有区别该运算

10、符在汇编时进行计算,而指令实在程序执行过程中进行运算。例如 and dx, port and 0feh逻辑表达式,汇编时计算出结果逻辑指令,程序执行时起作用203 关系运算符两个操作数的关系相等 eq,不等 ne,小于 lt ,大于 gt, 小于或等于 le,大于或等于ge。参与运算的两个操作数必须都是数据,或者是同一段存储单元的地址;结果是数据,关系成立,结果等于 0ffffh,或0ffff ffffh如果关系不成立,结果等于 0例如:mov bx, port lt 3如果确实 port=0,如果不是,则是负数,y=-1,如果是,还须再次判断是否等于0。程序流程框图为:65开始段定义及初始化

11、取数据-ax(ax)0?(ax)=0?y=-1y=0y=1结束yynnlp1lp3lp2end1画流程图的时候,对转移目标地址(最好是分支程序的两个分支点)都给出一个标号,在写代码时好使用lp066data3 segment x dw -8 y db ?data3 endscode3 segment assume cs:code3, ds:data3start: mov ax, data3 ;设置段基址;设置段基址 mov ds, axlea si, x;取偏移地址;取偏移地址mov ax, siand ax,ax67jns lp1 ;sf=0,转到lp1lp0:mov y,0ffh ;-1的

12、补码jmp end1lp1:jz lp3 ;x=0,转到lp3lp2:mov y, 01h ;x0, y=1ljmp end1lp3:mov y,00h ;x=0,y=0end1: mov ah,4chint 21h code3 endsend start683.4.5 循环程序循环程序的基本结构:循环程序由5个基本部分构成:初始化、循环体、循环参数修改、循环控制、结束处理。循环程序有两种基本结构。循环初始化循环体循环控制 y继续循环结束处理循环参数修改结束循环69循环初始化循环体循环控制 继续循环结束处理循环参数修改结束循环循环程序的另一种结构如图它的特点是先进性循环控制,判断是否满足循环结

13、束条件,如果满足,则结束循环。两种结构的区别在于判断循环结束条件的位置不同。第一种方法,循环体至少被执行一次。第二种可能不被执行。例如求200个数据的绝对值,可以使用循环程序。70开始取地址sidat1di dat2循环次数cx200al si(al)0neg aldi(al)nextyncheck修改si,di指向下一字节循环次数(cx)-1(cx)0结束初始化循环控制71data segment dat1 db 200 dup ? dat2 db 200 dup ?data endscode segment assume cs:code,ds:datastart: mov ax, data

14、 mov ds,ax leasi,dat1;(si)源地址指针 lea di,dat2 ;(di)目标地址指针 mov cx,200 ;(cx)循环次数72check: moval,si ;取一个带符号数到aloral,al ;al内容不变,但使之影响标志jnsnext ;若(sf)=0,则转nextneg al ;否则求补next: mov di,al ;传送到目标地址inc si ;源地址加1inc di ;目标地址加1dec cx ;循环次数(cx)-1jnz check ;如不等于零,则转checkmov ah,4chint 21h ;结束,返回dos code ends end st

15、art 可以可以loop指令指令loop check73开始取地址sitab1di tab2循环次数cx200al si(al)0neg aldi(al)nextyncheck修改si,di指向下一字节结束初始化循环变量修改和循环控制在一体loop check74data segment dat1 db 200 dup ? dat2 db 200 dup ?data endscode segment assume cs:code,ds:datastart: mov ax, data mov ds,ax leasi,dat1;(si)源地址指针 lea di,dat2 ;(di)目标地址指针 m

16、ov cx,200 ;(cx)循环次数75check: moval,si ;取一个带符号数到aloral,al ;al内容不变,但使之影响标志jnsnext ;若(sf)=0,则转nextneg al ;否则求补next: mov di,al ;传送到目标地址inc si ;源地址加1inc di ;目标地址加1loop check ;循环次数(cx)-1;如不等于零,则转checkmov ah,4chint 21h ;结束,返回dos code ends end start 76循环程序的5个部分并不是一定必需的,但循环体和循环控制着两个部分是不能缺少的。一个循环程序,它的循环体如果只包含顺序程序和分支程序,则这样的循环结构为单重循环结构。前面的例子就是单重循环程序结构。77如果循环体内还包含一个循环结构,形成内层循环和外层循环,内层循环嵌套在外层循环体中叫做双重循环结构。78内循

温馨提示

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

评论

0/150

提交评论