第四章汇编语言程序设计课件.ppt
《第四章汇编语言程序设计课件.ppt》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计课件.ppt(69页珍藏版)》请在三一办公上搜索。
1、第四章 汇编语言程序设计,第一节 汇编语言源程序汇编语言是用指令的助记符、符号地址、标号和伪指令等来书写程序 一、汇编语言源程序的结构一个完整的汇编语言源程序通常由若干个逻辑段(SEGMENT)组成,包括代码段、数据段、附加段和堆栈段,它们分别映射到存储器中的物理段上,第四章 汇编语言程序设计 第一节 汇编语言源程序,例4-1 两个字(A6B8H,206DH)相加的完整的汇编语言程序,DATA SEGMENT;定义数据段DATA1DW 0A6B8H;定义被加数DATA2 DW 206DH;定义加数SUM DW 2 DUP(?);定义和 DATAENDS;数据段结束CODESEGMENT;定义代
2、码段ASSEME CS:CODE,DS:DATA;段寄存器说明 START:MOVAX,DATAMOVDS,AX;初始化DSLEA SI,SUM;存放结果的偏移地址送SIMOVAX,DATA1;取被加数ADDAX,DATA2;两数相加MOVSI,AX;和送入SUMMOV AH,4CH INT21H;返回DOSCODEENDS;代码段结束ENDSTART;源程序结束,例4-1 两个字(A6B8H,206DH)相加的完整的,二、汇编语言语句类型及格式指令性语句的格式:标号:前缀 操作码 操作数,操作数;注释 例如指令性语句:START:MOV AX,DATA;将立即数DATA送累加器AX指示性语句
3、的格式:名字 伪操作 操作数,操作数,;注释 例如指示性语句:DATA1 DB 56H,78H,9AH;定义字节型数据,“DB”是伪操作,二、汇编语言语句类型及格式,指令性语句与指示性语句在格式上的区别:,指令性语句中的“标号”表示指令的符号地址,其后面通常要加上“:”。指示性语句中的“名字”通常表示变量名、段名和过程名等,其后不加“:”。名字在多数情况下表示的是变量名,用来表示存储器中一个数据区的地址。指令性语句中的操作数最多为两个操作数,也可以没有操作数。而指示性语句中的操作数可根据需要有多个,当操作数有不止一个时,相互之间用逗号隔开。,指令性语句与指示性语句在格式上的区别:指令性语句中的
4、“标,汇编语言语句中的操作数,三、数据项及表达式操作数可以是寄存器、存储器单元或数据项。而数据项又可以是常量、标号、变量和表达式 1常量 二进制常量 十进制常量 十六进制常量 字符串常量,汇编语言语句中的操作数 三、数据项及表达式,2标号 指令的标号是由编程者确定的,它不能与指令助记符或伪指令重名,也不允许由数字开头,标号的字符个数不超过31个。指令性语句中的标号代表存放一条指令的存储单元的符号地址,其后通常加一个冒号。,2标号,标号具有3种属性:段、偏移量和类型。标号的段属性是就是标号所在段的段地址。标号的偏移量就是标号所在段的起始地址到定义该标号的地址之间的字节数(即偏移地址)。偏移量是一
5、个16位无符号数。标号的类型有NEAR和FAR两种。前一种标号称为近标号,只能在段内被引用,地址指针为2个字节。后一种标号称为远标号,可以在其他段被引用,地址指针为4个字节。,标号具有3种属性:段、偏移量和类型。,3变量 变量名由字母开头,长度不超过31个字符。变量是存储器中某个数据区的名字,因为数据区中的内容是可以改变的,因此变量的值也可以改变。变量在指令中可以作为存储器操作数引用。变量也具有3种属性,即:段、偏移量和类型。变量的段属性就是它所在段的段地址。因为变量一般在存储器的数据段或附加段中,所以变量的段值在DS或ES寄存器中。变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字节
6、数。变量的类型有BYTE(字节)、WORD(字)、DWORD(双字)、QWORD(四字)、TBYTE(十个字节)等,表示数据区中存取操作对象的大小。,3变量,使用变量时需注意以下两点:变量的类型与指令的要求要相符。例如指令MOV AX,VAR中,要求VAR必须定义为字类型变量。在定义变量时,变量名对应的是数据区的首地址。如果数据区中有多个数据,则对其他数据操作时,需修改地址。例如:BUFFERDB 56H,78H,9AH MOVAL,BUFFER+2;将9AH送(AL),使用变量时需注意以下两点:,4表达式表达式是由常数、操作数、操作符和运算符组合而成 表达式中常用的运算符有以下几种:算术运算
7、符算术运算符有(加)、(减)、*(乘)、/(除)、MOD(取余)等 逻辑运算符逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异或)例如:指令MOV AL,0A6H XOR 0CEH等价于MOV AL,68H,4表达式,关系运算符关系运算符包括EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。关系运算符连接的必须是两个数值,或同一段中的两个存储单元地址。关系运算符的运算结果是一个逻辑值,当关系不成立(为假)时,结果为0;当关系成立(为真)时,结果为0FFFFH,关系运算符,取值运算符取值运算符用来分析一个存储器操作数的属性 OFFSET
8、利用运算符OFFSET可以得到一个标号或变量的偏移地址。例如:MOV SI,OFFSET DATA1;将变量DATA1的偏移地址送SI该指令等同于以下指令:LEA SI,DATA1 SEG利用运算符SEG可以得到一个标号或变量的段地址。例如:MOV AX,SEG DATA;将变量DATA的段地址送AX MOV DS,AX;(DS)(AX),取值运算符,属性运算符属性运算符PTR用来指定其后的存储器操作数的类型。例如:MOV AX,WORD PTRSI;将SI和SI+1所指向的两个存储单元送AX 段超越运算符运算符“:”跟在某个段寄存器名(DS、ES、SS或CS)之后表示段超越,用来指定一个存储
9、器操作数的段属性。例如:MOV AX,ES:BX;将ES段中由BX指向的字操作数送(AX),属性运算符,第二节 伪指令,一、数据定义伪指令数据定义伪指令用来定义一个变量的类型,给存储器赋初值,或给变量分配存储空间 1定义字节(DB)DB(Define Byte)用来定义一个变量,并初始化其内存单元。格式:变量名 DB 表达式表达式可以是以下情况之一:一个常数表达式;问号(?)作为非确定的初始值;一个或多个字符的字符串;重复子句:重复次数 DUP(表达式),第二节 伪指令 一、数据定义伪指令,例如:DATA1 DB 11H,22H,33,44H,55H;定义了5个字节常数 STRING1DB A
10、;定义了一个字符 STRING2DB How Are You?;定义了一个字符串SUMDB?;预置了一个不确定的值(变量)BUFFER DB 10 DUP(?);预置了10个具有不确定值的单元,例如:,2定义字(DW)DW(Define Word)定义一个字(两个单元)。DW伪操作后面的每个操作数都占用两个字节,在内存中存放时,低字节在前,高字节在后。DW的格式和表达式与DB类似。例如:DATA2 DW 1234H,5678H,9ABCH BUFFERDW 50 DUP(?)数据定义伪指令还有DD、DQ、DT,2定义字(DW),二、符号定义伪指令符号定义伪指令EQU用于给一个表达式赋予一个名字
11、。以后在程序中凡是用到该表达式的时候,就用这个名字来代替;在需要修改该表达式的值时,只需在赋予名字的地方修改即可。其格式为:名字 EQU 表达式格式中的表达式可以是一个常数、符号、数值表达式、地址表达式,甚至可以是指令助记符。,二、符号定义伪指令,例如:COUNTEQU 100;常量 VAREQU 64*1024;数值表达式 ADDR EQU DS:BP+8;地址表达式 GOTO EQU JMP;指令助记符 EQU指令不能对同一个符号重复定义。若希望对同一个符号重复定义,可以用“”伪指令。例如:EMP=60H;EMP代表数值60H EMP=80H;在此将EMP重新赋值,EMP代表数值80H,例
12、如:,三、段定义伪指令段定义语句可使编程者按段组织程序和使用存储器。段定义伪指令有SEGMENT和ENDS 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS,三、段定义伪指令,1定位类型:表示此段的起始边界要求,可以是PAGE,PARA,WORD和BYTE。它们表示如下的地址要求:PAGE=BPARA=B(隐含值)WORD=BBYTE=B分别称它们为以页、节、字、字节为边界。若该项省略,则其默认值位PARA。,1定位类型:表示此段的起始边界要求,可以是PAGE,PA,2组合类型:用来告诉连接程序本段与其他段的关系,分别为NONE,PUBLIC,COMMON,AT表达式以及STAC
13、K和MEMORY。,2组合类型:用来告诉连接程序本段与其他段的关系,分别为N,四、设定段寄存器伪指令伪指令ASSUME告诉汇编程序一个段属于哪个段寄存器。当汇编程序遇到一个段名时,它就自动地引用给出的段寄存器将段名加以汇编。格式为:ASSUME 段寄存器名:段名,段寄存器名:段名,格式中的段寄存器名可以是CS、DS、ES或SS。,四、设定段寄存器伪指令,在一个源程序中,ASSUME伪指令要放在可执行程序开始位置的前面。例如,以下程序是一个完整代码段的定义方法。CODESEGMENT PARA PUBLIC CODEASSUME CS:CODE,DS:DATA,ES:EDATA,SS:STACK
14、MOVAX,DATAMOVDS,AXMOVAX,EDATAMOVES,AXMOVAX,STACKMOVSS,AX CODEENDS,在一个源程序中,ASSUME伪指令要放在可执行程序开始位置,五、过程定义伪指令过程就是子程序。调用过程和从过程返回的指令是CALL和RET。过程定义伪指令的格式为:过程名PROC NEAR/FARRET过程名ENDP,五、过程定义伪指令,例4-2 编写一个软件延时的子程序。,DELAYPROC;定义一个过程PUSHBX;保护BX原来的内容PUSH CX;保护CX原来的内容MOVBL,50;外循环次数NEXT:MOVCX,2000;内循环次数WAITS:LOOPWA
15、ITS;(CX)0则循环DECBL;修改外循环计数值JNZNEXT;(BX)0则继续外循环POPCX;恢复CX原来的内容POPBX;恢复BX原来的内容RET;过程返回DELAYENDP;过程结束,例4-2 编写一个软件延时的子程序。DELAYPRO,六、结束伪指令END伪指令表示程序到此为止,告诉汇编程序汇编任务到此结束。其格式为:END 标号END伪操作后面的标号表示程序的开始地址。,六、结束伪指令,第三节 DOS功能调用,所有的DOS系统功能调用都是利用软中断指令INT 21H来实现的。INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可分为设备管理、目录管理、文件管理和
16、其他等四个方面。INT 21H对每一个子功能都进行了编号称为功能号。DOS系统功能调用的方法为:AH功能号;在其他寄存器中放入该功能所要求的入口参数;INT 21H;,第三节 DOS功能调用 所有的DOS系统功能调用都是利用软,INT 21H的几个最常用的功能,1键盘输入单字符功能号1和功能号8都可以接收键盘输入的单字符,输入的字符以ASCII码的形式放在累加器AL中。其中1号功能有回显,即键盘输入的内容在放入累加器AL的同时,在显示其上也显示出来;8号功能无回显。键盘输入单字符的功能常用来回答程序中的提示信息,或选择菜单中的可选项以执行不同的程序段。,INT 21H的几个最常用的功能 1键盘
17、输入单字符,例4-3 从键盘输入“Y”或“N”来选择程序的走向,SECLE:MOVAH,01H INT21H CMPAL,Y JEYES CMP AL,N JENOJMPSECLEYES:NO:,例4-3 从键盘输入“Y”或“N”来选择程序的走向 SE,2键盘输入字符串键盘输入字符串通过0AH号功能来实现。该功能要求用户定义一个输入缓冲区来存放输入的字符串 在调用本功能前,应把键入缓冲区的起始地址预置入DX寄存器。,2键盘输入字符串,例4-4 从键盘上输入字符串HOW ARE YOU?,并在串尾加结束标志$。,DATA SEGMENTSTRINGDB 20,?,20 DUP(?)DATAEND
18、SCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,0AH INT21H,MOV CL,STRING+1 XOR CH,CH ADD CX,2ADD DX,CX MOV BX,DXMOV BYTE PTRBX,$MOV AH,4CH INT 21HCODE ENDS END START,例4-4 从键盘上输入字符串HOW ARE YOU?,3显示器显示单字符 2号功能用于在显示器上显示单个字符。其程序段如下:MOV DL,;待显示字符的ASCII码必须放在DL中MOVAH,02H;
19、功能号02HAHINT21H;执行系统功能调用,3显示器显示单字符,4显示器显示字符串9号功能用于在显示器上显示一个字符串,要求被显示的字符串必须以“”字符作为结束符,否则会引起屏幕混乱。显示时如果希望光标能自动换行,则应在字符串结束前加上回车及换行的ASCII码0DH和0AH MOV DX,;要显示字符串的首地址送DXMOVAH,09H;功能号09HAHINT21H;执行系统功能调用,4显示器显示字符串,例4-5 在数据段内定义两句话:“PRESS ANY KEY IN THE KEYBOARD.”,“THE RESULT WILL DISPLAY IN SCREEN”。将这两句话在屏幕上分
20、两行显示出来,DATA SEGMENTSTRING DB PRESS ANY KEY IN THE KEYBOARD.,0DH,0AH DB THE RESULT WILL DISPLAY IN SCREEN.,0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVDX,OFFSET STRING MOVAH,09H INT21H MOVAH,4CH;返回DOS INT 21H CODEENDS END START,例4-5 在数据段内定义两句话:“PRESS ANY K,5.返回DO
21、S一个程序执行完后,应使程序正常退出并返回到DOS,可使用DOS系统功能调用的4CH号功能。用4CH号功能返回DOS的程序段如下;MOVAH,4CH;功能号送AH INT21H;返回DOS,5.返回DOS,第四节 汇编语言程序设计基础,设计汇编语言源程序的基本步骤为:分析实际问题,并抽象出描述问题的数学模型,确定解决问题的算法与思路;画程序流程图(简单程序可省略此步);为数据和程序代码分配内存单元和寄存器;编写源程序;上机调试与修改,进行结果分析。在进行汇编语言源程序设计时,通常用到四种基本程序结构:顺序程序、分支程序、循环程序、子程序。,第四节 汇编语言程序设计基础设计汇编语言源程序的基本步
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 汇编语言 程序设计 课件
链接地址:https://www.31ppt.com/p-2111807.html