第5讲汇编语言程序设计.pptx
《第5讲汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《第5讲汇编语言程序设计.pptx(135页珍藏版)》请在咨信网上搜索。
1、1机器语言、汇编语言、高级语言机器语言和汇编语言程序是一系列指令组成的。机器语言是计算机能够理解和执行的语言。汇编语言的基础是机器语言,只是用助记符来表示指令的操作,比机器语言便于使用。汇编语言效率高,占用内存小在各种实时系统中,经常使用汇编语言学习汇编语言,可以更好地理解计算机组成和工作原理。2机器语言、汇编语言、高级语言汇编和连接汇编是将汇编源程序翻译为机器代码,即目标程序;目标程序必须经过连接,才能生成可执行文件;连接是将目标程序和库文件等连接为可执行程序;EXE文件除了程序外还有一个程序段前缀PSP,PSP长度为256字节。前2个字节是一条INT 20H指令。3汇编语言源程序结构汇编语
2、言源程序结构 4汇编语言的语句格式汇编语言共有三种语句类型 指令语句 伪指令语句 宏指令语句1.指令语句及其格式 指令语句即8086CPU的指令,每一条指令即可构成一指令语句。每一指令都有对应的机器代码。指令语句格式 标号:助记符 操作数,;注释格式共有四部分:其中标号,操作数,注释可以是任选项;助记符是必选项,该项在一条语句中不可省略。标号最多由31个字母和数字字符构成。还可以使用?_$等字符。标号后面一定要跟一个冒号;注释前一定加一分号。52、伪指令语句及其格式 伪指令语句不是真正的指令语句,它不产生机器代码,它是汇编程序要求的,用来指示汇编程序做何种操作 伪指令语句格式 名字名字 伪指令
3、伪指令 操作数,操作数,操作数,操作数 ;注释注释 说明:格式共有四部分:其中名字,操作数,注释可以是任选项;伪指令是必选项,该项在一条伪指令语句中不可省略。对于有些语句,名字也是必需的。名字后面不要跟冒号:注释前一定加一分号;各个参数之间用,分开。标号与名字或其他变量必须由字母或特殊字符打头的字母数据串,中间不能有空格,合法的字符包括:字母 AZ 或 az;数字 09 特殊字符:?.$_ ;圆点(.)只能作为第一个字符。63、宏指令语句及其格式宏指令语句:为了书写方便,把一个重复出现的汇编语句序列用一条指令代替,这种重新定义的指令就称为宏指令。这种由宏指令组成的语句称为宏指令语句。宏指令必须
4、先定义,才能被使用,这称为宏定义;在汇编时,又要把宏指令语句进行宏展开,生成对应的机器代码。宏指令语句格式将在后面应用中介绍。7常用伪指令语句一、符号定义语句 1、赋值语句(EQU)格式:符号名 EQU 表达式说明:EQU语句给符号定义一个值或其他符号名,甚至定义一条可执行指令等。它把表达式赋给符号名。在程序中,在程序中,EQU对一个符号名只许定义一次对一个符号名只许定义一次。例如 :COUNT EQU 20 BLOCK DB READ AFTER ME NUM EQU$-BLOCK 8常用伪指令语句(续)2、等号语句(=)格式:符号名=表达式 说明:此语句的功能与 EUQ 类似,但该语句在一
5、个程序中可以对同一符号名多次再定义。例如 A1=10 ;A1 定义为 10 A1=100 ;A1重定义为100 A1 EQU 20;出错,因为A1已定义过,不能再用EQU重新定义。9常用伪指令语句(续)二、数据定义语句 1、定义字节语句(DB-Define Byte)格式:符号名格式:符号名 DB 表达式表达式 说明:数据定义语句(或称数据伪指令或变量定义伪指令),它可以是DB、DW、DD、DQ、DT。表达式可以是下列情况之一:一个常数表达式;问号(?)作为非确定的初始值;一个或多个字符的字符串(只限于DB类型);重复子句:重复次数 DUP (表达式)(Duplicate)10常用伪指令语句(
6、续)举例:ONE DB 1,2,3,4,5 ;TWO DB A ;THREE DB Welcom you!;FOUR DB?,?;SIX DB 50 DUP(5,6,7);DATA1 DB 10 DUP(?);DATA2 DB 20 DUP(5);DATA3 DB 100 DUP(STACK);11常用伪指令语句(续)二、数据定义语句(续)2、定义字语句(DW-Define Word)格式:符号名 DW 表达式 说明:定义字语句,与DB类似,只不过定义一个字(二个字节),其格式与表达式和DB相似。例如 BUF DW 1122,3344,5566 ;定义了3个字(16位)常数 BUF1 DW 1
7、28*4 ;定义了一个常数表达式,由汇编来运算。BUF2 DW 100 DUP(?);定义了100个字单元,占用了200个内 存单元,每个单元的内容是不确定的。12常用伪指令语句(续)3、定义双字(DD),四个字(DQ),10个字节(DT)DD(Define Doubleword);定义双字(4个字节)DQ(Define Quadword);定义4个字(8个字节)DT (Define Tenbyte);定义10个字节 DD,DQ,DT 的格式、表达式及用法与DB,DW语句类似。13常用伪指令语句(续)三、段定义语句 1、段定义语句 格式:段名 SEGMENT 定位类型 连接方式 类别 段名 E
8、NDS 说明:这两个伪操作总是一起出现。该语句将汇编语言源程序分成段,由该语句规定哪个段是代码段,哪个段是数据段或堆栈段。段名不能省略,由编程者自己指定段名,两处段名必须一致。方括号中的三项是可选项,是赋给段名的属性。各项顺序不能错,且用空格分开。14常用伪指令语句(续)1、段定义语句(续)定位类型 表示此段的起始边界要求,可以是PAGE,PARA,WORD或BYTE之一。它们表示如下的地址要求:PAGE=0000 0000 B PARA=0000 B (默认值)WORD=0B BYTE=B 它们分别表示以页、节、字、字节为段的地址边界,若此 项省略,则默认值为PARA(paragraph)。
9、15常用伪指令语句(续)连接方式 用来告诉连接程序(LINK)本段与其他段的关系分别有 六个选项(NONE,PUBLIC,COMMON,AT表达式,STACK,MEMORY)NONE 本段与其他段逻辑上没有关系,每段都有自己的基地址。(默认值)PUBLIC 把本段与同名同类别的其他段连接成一个段。COMMON 为本段和同名同类型的其他段指定相同的基址。各段会产生覆盖。AT表达式 把本段放在表达式的值所指定的地址上(偏移量按 0 处理),STACK 此段为堆栈段,LINK要求被连接的程序至少有一个STACK段。MEMORY 把本段定位在所有其他段之上。16常用伪指令语句(续)类别 需用单引号括起
10、来,在几个模块连接时才需要,若不准备和其他程序组合,可以不指定类别。当几个程序模块进行连接时,具有相同类别名的逻辑段装入连续的内存区,类别名相同的逻辑段,按先后出现的顺序排列。没有类别名的逻辑段,与其它无类别的逻辑段一起连续装入内存。类别名可以由用户任意设定,但是一般对于堆栈段为:STACK,代码段为:CODE,数据段为:DATA17常用伪指令语句(续)2.段寻址语句(ASSUME)格式:ASSUME 段寄存器:段名,说明:由于段名是任意的,汇编程序并不知道哪个段名对应哪个段,所以要用ASSUME伪指令来指明段寄存器与段名之间的关系。该语句必须写在代码段中,一般在段定义语句之后。段名可以是SE
11、GMENT定义的一个段名,或用GROUP定义的一个组名。段寄存器可以是CS,DS,SS,ES 之一。例如 ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA 18常用伪指令语句(续)设置段地址ASSUME伪指令仅仅指出各逻辑段应该装填的地址,但是并未给相应的段寄存器赋值;在程序代码段开始时应当对DS,ES,SS进行段基址装填,CS则在加载程序后由系统自动装填。SS也可以由系统自动装填,但是在定义堆栈段时,必须把参数写全:STACK SEGMENT PARA STACK STACK19常用伪指令语句(续)3.定义偏移地址语句(ORG-origin)格式:ORG 表达式
12、 说明:该语句指定了在它之后的程序段或数据块存放的起始地址的偏移量(0000h0FFFFH),语句中表达式的值就是起始地址,从该地址连续存放程序或数据,除非遇到一个新的ORG语句。例如 DATA SEGMENT ORG 1000H BUF DB 10 DUP(20H)DATA ENDS 20举例DATA SEGMENT ORG 100H X DB 12H Y DW?ORG 200H Z DD 9C56HDATA ENDS 21常用伪指令语句(续)四、过程定义语句 格式:过程名 PROC(NEAR/FAR);缺省值为NEAR RET 过程名 ENDP 说明:该语句的PROC与ENDP必须成对出现
13、,过程名前后必须一致。该语句实际上是定义了一个子程序,该过程可以被其他程序调用。属性可以是NEAR或FAR,表示该过程可以被段内调用或段间调用。例如 SUBPROG PROC FAR 主程序如下 CODE SEGMENT RET ASSUME CS:CODE,DS:DATA SUBPROG ENDP 以上定义了一个名为 CALL SUBPROG SUBPROG的过程 CODE ENDS 22常用伪指令语句(续)五、结束语句 格式:END 表达式 说明:该语句表示整个源程序的结束,它告诉汇编程序汇编任务到此结束。表达式必须是源程序的启动地址。如果几个模块连接在一起,则只能指定主模块的启动地址。其
14、他模块不能有启动地址。如果不使用选择项表达式,则没有启动地址传递给 LINK。程序就不知道从何处启动。例如 END START ;START为源程序的启动地址。23汇编源程序基本结构汇编源程序是一种分段结构。一般都会包括数据段、堆栈段和代码段。DATA SEGMENTDATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENT CODE ENDS END 24汇编源程序基本结构数据段中定义程序所使用的变量、数组、常数、表格等。也可以保留必要的内存单元。DATA SEGMENTBLOCK DW 28H,139H,0 DW 3010H,1122HCOUNT EQU ($
15、-BLOCK)/2SUM DW?TABLE DW 0,1,8,27,64 DW 125,216,343 DW 512,729DATA ENDS25汇编源程序基本结构堆栈段中定义堆栈的大小。也可以直接定义SP的位置,如右边的示例。但并不需要。STACK SEGMENT PARA STACKAREA DB 64 DUP(?)SPT EQU$-AREASTACK ENDS-r AX=0000 BX=0000 CX=0089 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=14F9 ES=14F9 SS=150A CS=150E IP=0000 NV UP EI
16、PL NZ NA PO NC150E:0000 B364 MOV BL,6426汇编源程序基本结构代码段中应包括:ASSUME语句;至少一个过程,即PROC;对段地址寄存器(DS、SS、ES)赋值;准备返回DOS系统的指令;实现程序功能的指令。CODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21H RETMAIN ENDPCODE ENDS27汇编语言源程序结构任何一个汇编语言源程序可以由若干个段组成,至少应该包含一个代码段,堆栈段和数据段视需要而定如果使用堆栈,最好用户
17、自行设置堆栈空间,如果用户不设置,则使用系统堆栈空间。28EXE程序汇编和连接后生成可执行文件(.exe)EXE文件有两部分组成:程序段前缀(PSP,Program Segment Prefix)和装入模块PSP:由连接程序生成,含有文件的控制信息和重定位信息。偏移地址空间:00HFFH;DOS利用PSP对有关数据进行重新定位。第一个单元存放着DOS返回指令INT 20H装入模块:程序本身;DOS从100H开始装入程序本身。29EXE程序(续)EXE文件装入内存时,DS、ES指向PSP,而不是程序的数据段和附加段,所以要在程序中根据实际的数据段和附加段改变相应的DS、ES。标准程序前奏:由于装
18、载时将DS、ES指向PSP的起点,因此应当在程序开始时将PSP的起点地址压入堆栈,从而在返回时,返回DOS:PUSH DSSUB AX,AXPUSH AXCS、IP指向代码段程序开始执行的指令,SS,SP指向堆栈段。源程序中如果没有堆栈段,则SS=PSP段地址,SP=100H。30COM程序COM程序结构程序规模较小,且不用与外部模块装配,可以把各段包括在代码段内,编译为COM程序。COM程序的结构COM程序不允许定义堆栈段。COM程序更紧凑,执行速度快COM程序不超过64KBPSPPSP00DOS暂驻部分00IP=0100HCS,DS,ES,SS64KBSP=0FFFEH用户程序区64KBR
19、AM低端RAM高端256字节31数据定义常量十六进制第一个字符必须是数字,否则要加数字“0”。常量若是ASCII码字符串,要用或“”括起来。变量代表一个内存单元,编译后就是一个地址内存单元,有段地址和段内偏移量,还有类型即字节数,1(字节变量)2(字变量)4(双字变量)标号代表代码段内某条指令的地址,也有三个属性:段地址、段内偏移量和类型。类型有两种:NEAR标号(-1,只在段内引用)和FAR标号(-2,可在段内、段间引用)。常量、变量、标号不能使用保留字。32运算符算术运算符 *MOD(模)SHL(左移)SHR (右移)如:PI_REM EQU 314156 MOD 100000 MASKB
20、 EQU 00110010BMASKB1 EQU MASKB SHL 2MASKB2 =MASKB SHR 2逻辑运算符AND 逻辑与 OR 逻辑或 XOR 逻辑异或 NOT 逻辑非 逻辑运算符在汇编时完成运算,逻辑运算指令在执行时完成。MASKB EQU 00101011BMOV AL,5EHAND AL,MASKB AND 0FH33运算符关系运算符EQ等于NE不等 LT小于 GT大于 LE小于等于 GE大于等于产生真(0FFFFH)和假(0000H)两种结果如:MOV AX,(CHOICE LT 20)AND 5)OR (CHOICE GE 20)AND 6)34运算符值返回运算符1、$
21、运算符(返回汇编器当前地址计数器的值)2、SEG和OFFSET运算符 SEG 返回变量或标号的段地址 OFFESET 偏移地址3、TYPE的运算符返回变量或标号的类型。4、LENGTH和SIZE运算符只对DUP定义的变量有意义。LENGTH返回元素的个数,SIZE返回变量的字节数,即LENGTH与TYPE的乘积。5、HIGH(16位的高字节)和LOW(16位的低字节)运算符SEG 返回变量或标号的段地址OFFESET 偏移地址MOV AX,SEG TABLEMOV BX,OFFSET TABLE如:AB DD 1MOV AX,TYPE AB如:TABLE DW 100 DUP(?)MOV CX
22、,LENGTH TABLEMOV CX,SIZE TABLE如:NUM EQU 0CDEFHMOV AH,HIGH NUMMOV AL,LOW NUM35运算符属性运算符PTR运算符用于暂时改变变量或者标号的原有属性格式:格式:新属性新属性 PTR PTR 表达式表达式如:F1 DW 1234H F2 DB 23H,56H,18H MOV AL,BYTE PTR F1 MOV BX,WORD PRT F2 JMP FAR PTR SUB1MOV BYTE PTR SI,100MOV WORD PTR SI,10036运算符LABEL运算符 对已定义的内存单元属性重定义,并取新名。本身不分配内存
23、单元。如:CFB LABEL BYTEDFW DW 4567HEFW LABEL WORDFFB DB 89H,40HTHIS运算符 新属性放在右边如:FIRST EQU THIS BYTESECOND DW 5678HMOV BL,FIRSTMILES EQU THIS FARCMP SUM,100(64K)JMP MILES37运算符属性运算符段超越运算符,强迫当前指令的操作数的寻址按照超越运算符指定的段寻址。如:MOV AX,ES:BXSHORT运算符 通知汇编器,转移目标在-127+128之间(段内相对转移)如:JMPSHORT F138基本结构程序设计顺序结构程序设计32位无符号数的
24、乘法8086只能直接进行16位数的乘法。32位数的乘法要通过16位数的乘法来实现。32位数相乘的结果是64位。39DATASEGMENTNUM1DW8000H,8000HNUM2DW8008H,8000HMUTDW4 DUP(0)DATAENDSSTACKSEGMENTDB100 DUP(s)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTAPROC FARPUSH DSXORAX,AXPUSH AX40MOV AX,DATAMOV DS,AXLEABX,NUM1MOV AX,BXMOV SI,BX+4MOV DI,BX+6MUL SI
25、;低16位乘低16位MOV BX+8,AXMOV BX+10,DXMOV AX,BX+2;乘数的高16位MUL SI;高16位乘低16位ADDBX+10,AXADCBX+12,DX41MOV AX,BXMUL DI;低16位乘高16位ADDBX+10,AXADCBX+12,DXADCWORD PTRBX+14,0MOV AX,BX+2MUL DI;高16位乘高16位ADDBX+12,AXADCBX+14,DXRETSTAENDPCODEENDSENDSTA42例例.查表求平方值查表求平方值DATA SEGMENTTABLESQDB 0,1,4,9,16,25,36,49,DB 64,81,10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。