Tokenedu.com-上海交通大学继续教育学院.ppt

上传人:ga****84 文档编号:345939 上传时间:2018-09-24 格式:PPT 页数:80 大小:829.50KB
下载 相关 举报
Tokenedu.com-上海交通大学继续教育学院.ppt_第1页
第1页 / 共80页
Tokenedu.com-上海交通大学继续教育学院.ppt_第2页
第2页 / 共80页
Tokenedu.com-上海交通大学继续教育学院.ppt_第3页
第3页 / 共80页
Tokenedu.com-上海交通大学继续教育学院.ppt_第4页
第4页 / 共80页
Tokenedu.com-上海交通大学继续教育学院.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

1、主要内容程序设计语言概述8086汇编语言的基本语法8086汇编语言程序设计,汇编语言程序设计,程序设计语言概述,机器语言 机器码表示,例如 B8H、C3H (天书)汇编语言 用指令助记符表示机器码 (难学) 例: 机器码 B8H、C3H的助记符为 MOV AX,BX 注:CPU不同,机器码不同,助记符不同高级语言 语言规范,可用于不同的 CPU (通用),机器语言是由0、1二进制代码书写和存储的指令与数据。,机器语言,特点: 能为机器直接识别与执行; 程序所占内存 空间较少。缺点: 难认、难记、难编写、易出错。,程序设计语言概述,汇编语言,汇编语言是用指令的助记符、符号地址、标号等书写程序的语

2、言,简称符号语言。,特点:易读、易写、易记。缺点:不能像机器语言那样为计算机所直接识别,也不如高级语言那样具有很好的通用性和可移植性。,程序设计语言概述,高级语言是脱离具体机器(即独立于机器),面向用户的通用语言,不依赖于特定计算机的结构与指令系统。 用同一种高级语言编写的源程序,一般可在不同计算机上运行而获得同一结果。 由于高级语言的通用性特点,对于高级语言程序员来说,不必熟悉计算机内部具体结构和机器指令,而只需要把主要精力放在程序结构和算法描述上面。 所以,高级语言具有更广泛的领域。,高级语言,程序设计语言概述,机器语言汇编语言 高级语言,机器码,汇编程序,编译程序,直译,解释程序,从计算

3、机语言到计算机机器码,程序设计语言概述,汇编语言程序的上机与处理过程,程序设计语言概述,汇编源程序:按严格的语法规则用汇编语言编写的程序。编辑程序:建立和修改汇编语言源程序,形成属性为 ASM 的源文件。 常用软件:全屏幕文本编辑EDIT,记事本NOTEPAD汇编程序:对源文件进行汇编,产生属性为OBJ的以二进制 代码表示的目标程序并存盘。 常用软件:小汇编ASM和宏汇编MASM。连接程序:OBJ文件经过连接程序(LINK),把目标文件与库 文件以及其它目标文件连接在一起,形成属性为 EXE 的可执行文件。,汇编语言程序使用的系统软件,程序设计语言概述,1. 语句的种类,8086汇编语言中,有

4、3种基本语句: 指令语句 伪指令语句 宏指令语句,语句的种类和格式,指令语句:是一种执行性语句,它在汇编时,汇编程序 将为之产生一一对应的机器目标代码。,汇编指令,机器码,MOV DS, AX ADD AX, BX,8E D803 C3,语句的种类和格式,伪指令语句:是一种说明性语句,它在汇编时只为汇编程序提供进行汇编所需要的有关信息。 如定义符号,分配存储单元,初始化存储器等,而本身并不生成目标代码。,DATA SEGMENT AA DW 20H,-30H DATA ENDS,语句的种类和格式,8086的汇编语句一般由4个字段组成,根据其不同种类的语句格式来描述。,2. 语句格式,语句的种类

5、和格式,标号: 前缀 指令助记符 操作数表 ;注释 表示可任选部分;操作数表是由逗号分隔开的多个操作数。,指令语句的格式,1) 标号 标号代表“:”后面指令所在的存储地址(逻辑地址),供JMP、CALL和LOOP等指令作操作数使用,以寻找转移目标地址。,语句的种类和格式,2) 前缀,8086中有些特殊指令,常作为前缀同其他指令配合使用。 例如,和“串操作指令”(MOVS、CMPS、SCAS、LODS 与STOS)连用的5条“重复指令”(REP、REPE/REPZ、REPNE/REPNZ),语句的种类和格式,了解内容,3) 指令助记符包括8086的指令助记符,以及用宏定义语句定义过的宏指令名。,

6、语句的种类和格式,4) 操作数表 对于8086的一般性执行指令,操作数表可以是一个或两个操作数。 若是两个操作数,则称左边操作数为目标操作数,右边操作数为源操作数。,语句的种类和格式,5) 注释以“;”开始,用来简要说明该指令在程序中的作用,以提高程序的可读性。,语句的种类和格式,标识符定义的常量名、变量名、过程名、段名等。 标识符由字母开头,由字母、数字、特殊字符(如?、下划线、等)组成的字符串。 默认情况下,汇编程序是不区分大、小写字母的。 注意:名字的后面没有冒号,这是伪指令语句同指令语句在格式上的主要区别。,名字 伪指令 数表 ;注释,伪指令语句的格式,1) 名字,语句的种类和格式,2

7、) MASM中的常用伪指令助记符,语句的种类和格式,了解内容,在伪指令语句的参数表中,包含有用逗号分隔的多个参数,可以是常数、变量名、表达式等。,3) 参数表,语句的种类和格式,一条指令必须包括一个指令助记符,以及充分的寻址信息,以使汇编程序能将其转换成一条机器指令的操作码字段及由操作数寻址方式指定的操作数字段。,指令语句,标号是为一组机器指令所起的名字,用来作为汇编语言源程序中转移、调用以及循环等指令的操作数程序转移的转向地址(目标地址)。 标号表示指令地址, 是指令符号地址, 具有3种属性: 段地址、段内偏移量(或相对地址)以及类型。,1. 标号,(1) 标号及其属性,标号用一标识符定义,

8、即以字母开头,由字母、数字、特殊字符(如?、下划线、等)组成的字符串表示。 标号最大长度一般不超过31个字符,除宏指令名外。 标号不能与保留字相同。保留字看上去类似标识符,但它们在语言中有被机器赋于的特殊意义。标号最好用具有一定含义的英文单词或单词缩写表示,便于阅读。,(2) 标号的定义,标号的组成,指令语句,在指令助记符之前,使用标号并紧跟一个冒号“:”,表示该标号被定义为一个类型为NEAR的标号。当然,标号也可单列一行。 例如: SUBROUT: MOV AX, 3000H,指令语句,(3) 标号的使用,通常,“标号”只在循环、转移和调用指令中使用。,指令语句,2. 指令助记符,执行性指令

9、中的指令助记符主要为8086 CPU指令系统中指令助记符。,指令语句,3. 操作数,立即数操作数寄存器操作数存储器操作数,指令语句,指令中直接给出,不需要使用寄存器,也不涉及访问数据区的操作,只能作为源操作数。 立即操作数是整数,可以是1字节或2字节。 在汇编语言中,立即操作数用常量(包括数值常量和符号常量)以及由常量与有关运算符组成的数值表达式表示。 如:MOV BX,1000+5*3,(1) 立即操作数,指令语句,通用寄存器 AX、BX、CX、DX、BP、SP、DI、SI以及段寄存器 CS、SS、DS、ES 都可以作为操作数。 如:MOV BX,AX,(2) 寄存器操作数,指令语句,以指定

10、的存储单元中的内容作为指令的处理对象,汇编指令中的存储器操作数实际上是存储单元的逻辑地址。,(3) 存储器操作数,例如:,MOV WORD PTR0A00H, 0000HMOV AX, BX,指令语句,常量指在汇编过程中已经有确定数值的量。 主要用作指令语句中的立即操作数、变址寻址和基址加变址寻址中的位移量DISP,或在伪指令语句中用于给变量赋初值。,4. 各种寻址方式下操作数的表达式,(1) 常量与数值表达式,指令语句,常量分“数值常量”与“符号常量”两种。数值常量:以各种进位制数值形式表示,以后缀字符区分各种进位制。,符号常量:预先给常量定义一个“名字”,然后在汇编语句中用该“名字”表示该

11、常量。,指令语句,一个能被计算并产生数值的表达式称为数值表达式。 一个数值表达式可自由常量、字符常量以及代表常量或串常量的名字等以算术、逻辑和关系运算符连接而成。,数值表达式,指令语句,算术运算符,(只能用于数值表达式),指令语句,逻辑运算符,(只能用于数值表达式),指令语句,关系运算符,关系不成立时,结果为全0;关系成立时,结果为全1。(关系式的两个操作数必须是数字或是同一段内的两个地址单元)。设(AI)=6。,指令语句,“变量”是内存中一个数据区名字,即数据所存放地址的符号地址,它可作为指令中的存储器操作数来引用。 存储器分段使用,对源程序中所定义的变量有多种属性。,(2) 变量与地址表达

12、式,变量及其属性,段属性:与该变量相对应的数据区所在段的段地址。偏移量属性:该变量与段起始地址相距的字节数。数据类型属性:数据区中数据项存取单位,字节、字等。,指令语句,变量与标号区别: 变量指数据区的名字; 标号是某条执行指令起始地址的符号表示。 变量的类型是指数据项存取单位的字节数大小; 标号的类型指使用该标号的两条指令之间的距离远近, 即NEAR或FAR。,指令语句,在数据段或附加段中使用伪指令DB、DW、DD、DQ和DT来进行定义变量的,这些伪指令称为数据区定义伪指令。 其格式为: 变量名 数据区定义伪指令 表达式,变量的定义,指令语句,数据区定义伪指令:,指令语句,表达式确定数据区的

13、大小及其初值:,数值表达式; 地址表达式:只适用于DW和DD两条伪指令; ?:表示所定义的数据项无确定初值; n DUP(?): DUP为重复因子,定义n个数据项, 它们都是未确定的实值。 n DUP(表达式):定义n个数据项,其初值由表达式确定。,指令语句,变量是存储器数据区的符号表示,因此指令中的存储器操作数可以用变量形式给出。,变量的使用,指令语句, 汇编语言中表达式有两类数值表达式:在汇编时产生一数值,仅具有大小而无其他属性,可作为执行性指令中的立即操作数和数据区中的初值使用。地址表达式:它表示存储器地址,其值一般都是段内的偏移地址,因此它具有段属性、偏移值属性、类型属性。地址表达式主

14、要用来表示执行性指令中的多种形式的操作数。,地址表达式,指令语句, 地址表达式由变量、标号、常量、寄存器BX,BP,SI,DI的内容 (用寄存器名以及方括号表示)以及一些运算符组成。,指令语句,a 加法和减法运算符(、)变量或标号可加上或减去某个结果为整数的数值表达式,其结果仍为变量或标号,类型及段地址属性不变,仅修改偏移值属性。一切数值表达式的运算符都可在地址表达式中出现。同一段内的两个变量或标号可以相减,但结果不是地址,而是一个数值,表示两者间相距的字节数。, 地址表达式中可使用的运算符及使用规则:,指令语句,如这几个寄存器不用方括号括起来,表示寄存器本身或操作数。,b 方括号及寄存器 B

15、X,BP,SI,DI,指令语句,IBM宏汇编中有5种运算符,即:算术运算符逻辑运算符关系运算符分析运算符合成运算符前3种运算符已介绍过,下面介绍后2种运算符。,(3) 运算符综述,指令语句,分析运算符用来把存储器操作数(变量或标号)分解为它的组成部分(段地址、偏移值、类型 、数据字节总数、数据项总数等),并以数值形式回送给存储器操作数(变量或标号)。,指令语句,了解内容,SIZE返回值=LENGTH返回值*TYPE 返回值,指令语句,了解内容,合成运算符 用来把存储器操作数的属性部分建立一个新的存储器地址操作数。 只在本语句中有效,并不永久改变变量的属性。 格式为: 类型 PTR 表达式 例:

16、TWO_BYTE DW ? MOV AL, BYTE PTR TWO_BYTE,指令语句,了解内容,运算符的优先级,指令语句,了解内容,伪指令语句:又称为说明性指令或指示语句。高级语言程序中的可执行语句被翻译成机器语言时,必须有非执行语句用于实现赋值、保留存储器,给常数分配符号名字、形成数据结构和终止编译等。汇编语言被翻译成机器语言时,也必须包括有执行类似任务的伪指令。8086依靠段寄存器工作,须包括一些在汇编过程中告诉汇编程序把某个段分配给哪一个段寄存器的伪指令。,伪指令语句,伪指令语句格式为: 名字 伪指令助记符 参数表 ;注释 名字是一标识符,一般不能有“:”结尾,名字可以是符号常量名、

17、段名、变量名等,由不同的伪指令决定。 参数表是用“,”分隔开的一系列参数(包括操作数)。,伪指令语句,1. 数据定义伪指令,DB 变量为字节数据类型(8位), BYTE DW 变量为字数据类型(16位), WORD DD 变量为双字数据类型(32位), DWORD DQ 变量为 4 字数据类型(64位), QBYTE DT 变量为 10 字节数据类型(80位),TBYTE,(1) 5 种数据定义命令,伪指令语句,DW定义字符串只允许包含两个字符,否则必须用DB指令 字符串的个数不超过255个 字符串必须用单引号引起来,伪指令语句,DB、DW、DD可用于存储器初始化。一个存储单位可以是字节、字、

18、双字。表达式有数值表达式与地址表达式之分: 使用地址表达式时,只可在DW或DD伪操作命令中出现,绝不允许出现在DB中。,(2) 存储器初始化,伪指令语句,汇编语言中所有的变量名、标号名、过程名、指令助记符、寄存器名等统称“符号”。 这些符号可以通过伪指令重新命名,也可以通过伪指令为其定义其他名字及新的类型属性。,2. 符号定义伪指令,伪指令语句,为常量定义一个符号,以便在程序中使用符号来表示常量。 格式: 符号常量名 EQU 数值表达式例:ONE EQU 1 TWO EQU 2 SUM EQU ONE+TWO,(1) EQU (赋值伪指令),伪指令语句,使用“”定义的符号名可以被重新定义,使符

19、号名具有新值。例:X=12 ;先将12赋于符号名XX=X+1 ;将符号名X重新定义使其具有新值则在第2个语句经过汇编后,最终X=13。,(2) (等号伪指令),习惯上“”主要用来定义符号常量。,伪指令语句,了解内容,段定义伪指令指示汇编程序应如何按段来组织程序和使用存储器。 命令主要有 SEGMENT,ENDS,ASSUME。,3. 段定义伪指令,伪指令语句,用来把程序模块中的指令或语句分成若干逻辑段。 格式如下: 段名 SEGMENT 定位类型 组合类型 类别 ;一系列汇编指令 段名 ENDS 必须成对出现, SEGMENT与ENDS之间为段体,给其赋于一个名字,名字由用户指定,是不可省略的

20、,而定位类型、组合类型和类别是可选的。,(1) SEGMENT和ENDS伪指令,伪指令语句,(2) ASSUME伪指令,段定义伪指令,一般出现在代码段中,告诉汇编程序哪一个段寄存器是其对应段的段地址寄存器。引用该伪指令后,汇编程序才能对使用变量或标号的指令汇编出正确的目标代码。格式为:ASSUME段寄存器:段名, 段寄存器名:段名例: ASSUME CS: SEGA, DS: SEGB,伪指令语句,在汇编时代码段寄存器的赋值是在程序初始化时自动完成的,而其它段寄存器的赋值须在代码段的编写中通过MOV指令来赋值。,伪指令语句,与高级语言编程相似,编写汇编语言源程序也应首先理解和分析题意与要求,选

21、择适当的数据结构和算法,然后,再着手用汇编语言来实现。DOS环境下的8086汇编语言程序结束时,通常用DOS的4CH号中断调用,以便使程序控制返回DOS。 MOV AH, 4CH INT 21H,汇编语言程序设计,顺序程序结构,条件程序结构,分支程序结构,Y,N,一般语句,If else 语句,Switch 语句,程序的基本结构,汇编语言程序设计,循环控制结构 1,循环控制结构 2,Y,Y,N,N,while 语句,do -while 语句,汇编语言程序设计,顺序程序设计条件程序设计 循环程序设计,指令指针 IP 值线性增加,IP = IP + 1,IP 值受标志位的影响而跳变影响标志的指令

22、CMP、TEST、JXX,IP 值受计数器 CX 中的值不为零而循环影响标志的指令 DEC,基本程序设计,汇编语言程序设计,源程序,堆栈段,数据段,代码段,DEBUG直接编程,初始化,输 入,运算处理,转 换,输 出,返回DOS,数值运算,非数值运算,程序的层次模块结构,汇编语言程序设计,例:编程计算W=X+Y+24-Z。其中变量X、Y、Z均为32位数。,顺序结构程序,DATA SEGMENT X DW 19, 86 Y DW 3, 25 Z DW 1987, 325 W DW 2DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:

23、 MOV AX, DATA MOV DS, AX MOV AX, X MOV DX, X+2,ADD AX, Y ADC DX, Y+2 ADD AX, 24 ADC DX, 0 SUB AX, Z SBB DX, Z+2 MOV W, AX MOV W+2, DX MOV AH, 4CH INT 21HCODE ENDS END START,例:符号函数,分支结构程序,设X为8位有符号数。,DATA SEGMENT X DB -18 Y DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, A

24、X,MOV AL, X CMP AL, 0 JGE BIGR MOV AL, -1 JMP STOPBIGR: JE STOP MOV AL, 1STOP: MOV Y, AL MOV AH, 4CH INT 21HCODE ENDS END START,分支结构程序,例:比较变量D1和D2表示的两个有符号字数大小,将其中较大数据放在BX寄存器中。,分支结构程序,BEGIN: MOV AX, DATA MOV DS, AX ;给DS赋段值 MOV BX, D1 CMP BX, D2 JGE NEXT ;若D1D2,则不交换,转NEXT MOV BX, D2 ;若D1D2,则交换NEXT: MO

25、V AH, 4CH INT 21HCODE ENDS END BEGIN,DATA SEGMENT D1 DW -123 ;补码为FF85H D2 DW -120 ;补码为FF88HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,分支结构程序,例:已知X、Y、Z为三个无符号16位二进制数,求三者中最大值, 送MAX单元。,分支结构程序,DATA SEGMENT X DW 180 Y DW 850 Z DW 350 MAX DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA,START: MOV AX, D

26、ATA MOV DS, AX MOV AX, X CMP AX, Y JAE XGY MOV AX, YXGY: CMP AX, Z JAE GMAX MOV AX, ZGMAX: MOV MAX, AX MOV AH, 4CH INT 21HCODE ENDS END START,分支结构程序,例:统计一个数据块中负数的个数,个数送 RS中。,循环结构程序,DATA SEGMENT D1 DB -1,3, 5, 6, 9, 5 COUNT EQU $-D1 RS DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,

27、DATA MOV DS, AX,BEGIN: MOV AX, DATA MOV DS, AX MOV BX, OFFSET D1 MOV CX, COUNT MOV DX, 0 LOP1: MOV AL, BX CMP AL, 0 JGE JUS INC DXJUS: INC BX DEC CX JNZ LOP1 MOV RS, DX MOV AH, 4CH INT 21HCODE ENDS END BEGIN,循环结构程序,例:找出从无符号字节数据存储变量VAR开始存放的N个数中的最大数放在BH中。,循环结构程序,DSEG SEGMENT VAR DB 5,7,19H,23H,0A0H N EQU $-VARDSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEG,BG: MOV AX, DSEG MOV DS, AX MOV CX, N-1 MOV SI, 0 MOV BH, VARSI JCXZ LASTAGIN: INC SI CMP BH, VARSI JAE NEXT MOV BH, VARSI NEXT: LOOP AGINLAST: MOV AH, 4CH INT 21HCSEG ENDS END BG,循环结构程序,Thank You!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。