第4章 汇编语言程序设计11.ppt





《第4章 汇编语言程序设计11.ppt》由会员分享,可在线阅读,更多相关《第4章 汇编语言程序设计11.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 汇编语言程序设计mov ax,12hcall displayJmp 1234h1主要内容:主要内容:汇编语言源程序的结构汇编语言语句格式伪指令功能调用汇编语言程序设计24.14.1 汇编语言源程序汇编语言源程序 (1)机器语言机器语言二进制数形式的指令和数二进制数形式的指令和数据。据。B0 64B0 64 是什么意思?这就是是什么意思?这就是机器语言机器语言。既不直。既不直观观,又不易理解和记忆又不易理解和记忆.MOV ALMOV AL,64H64H ;很容易记忆理解,这就是很容易记忆理解,这就是助记助记助记助记符符符符。(2)助记符助记符用便于记忆的英语单词表示用便于记忆的英语单词表
2、示的指令操作码。它的指令操作码。它反映了指令的功能和主要特征反映了指令的功能和主要特征,便于人们理解和记忆。便于人们理解和记忆。3 操作数可能放在存储器中操作数可能放在存储器中,这就涉及这就涉及操作数的地址操作数的地址。程序中遇到转移指令或调用指令程序中遇到转移指令或调用指令,也需要知道转移地址也需要知道转移地址,若若采用具体地址就很不方便采用具体地址就很不方便,一旦有错,改动也很麻烦。于一旦有错,改动也很麻烦。于是人们是人们采用采用采用采用标号或符号标号或符号标号或符号标号或符号来代替来代替来代替来代替地址地址地址地址,例:例:LP1LP1LP1LP1:MOV AX,MOV AX,VARVA
3、RVARVAR LOOP LOOP LP1LP1LP1LP1 (3)汇汇编编语语言言指指令令助助记记符符,符符号号地地址址,标标号号,伪指令等语言元素的集合以及这些元素使用的规则。伪指令等语言元素的集合以及这些元素使用的规则。用汇编语言编写的程序叫用汇编语言编写的程序叫汇编语言源程序汇编语言源程序汇编语言源程序汇编语言源程序。指令除了操作码以外指令除了操作码以外指令除了操作码以外指令除了操作码以外,还有一个还有一个还有一个还有一个操作数问题操作数问题。4汇编程序汇编程序(翻译程序翻译程序)源程序的编译程序源程序的编译程序汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程
4、序 汇编源程序需翻译成机器语言汇编源程序需翻译成机器语言,变成可执行变成可执行文件文件,机器才能执行机器才能执行,这个翻译过程叫这个翻译过程叫汇编。高级语言中称该过程为高级语言中称该过程为“解释解释”或或“编译编译”。执行翻译的程序称为执行翻译的程序称为“汇编程序”。5汇编语言程序设计与执行过程汇编语言程序设计与执行过程输入汇编语言源程序输入汇编语言源程序 EDITEDIT/NOTEPAD等 源文件源文件 .ASMASM汇编汇编(编译编译)MASM/ASMMASM/ASM等 目标文件目标文件 .OBJOBJ链接链接 LINKLINK等 可执行文件可执行文件 .EXEEXE调试调试 DEBUG/
5、TDDEBUG/TD等 最终正确的程序最终正确的程序.EXEEXE 目前都把上述的软件集成在统一的环境下,以方便用户使用。建立、编辑建立、编辑 汇编汇编 连接连接 运行运行 调试调试64.1.1 4.1.1 汇编语言源程序的结构汇编语言源程序的结构 汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由3个(或4个)逻辑段组成:数据段数据段存放数据、变量存放数据、变量 (附加数据段附加数据段存放数据、变量存放数据、变量)堆栈段堆栈段堆栈区域堆栈区域 代码段代码段存放程序指令存放程序指令7一个基本的汇编语言程序框架如下:一个基本的汇编语言程序框架如下:stackstack SEGMENT P
6、ARA SEGMENT PARA stackstack DB 100 DB 100 DUP(DUP(stackstack)stackstack ENDS ENDS datadata SEGMENT SEGMENT data data ENDS ENDS codecode SEGMENT SEGMENT ASSUME CSASSUME CS:codecode,DS,DS:datadata,ESES:datadata,SS:SS:stackstack start:start:MOV AX,MOV AX,datadata MOV DS,AX MOV DS,AX MOV ES,AX MOV ES,AX
7、 MOV AL,4CH MOV AL,4CH INT 21HINT 21H codecode ENDS ENDS END END start start 堆栈段数据段代码段真指令80000:03FF环境与代码运行环境与代码运行FFFF:0堆栈段堆栈段数据段数据段代码段代码段CS:IPDSSS:SP系统起始运行程序系统起始运行程序中断向量区中断向量区(系统专用)(系统专用)栈底最多4个活动段分段结构分段结构ES94.1.2 汇编语言的语句类型与格式汇编语言的语句有两种:汇编语言的语句有两种:汇编语言的语句有两种:汇编语言的语句有两种:指令性语句指令性语句指令性语句指令性语句由由由由8086808
8、680868086指令助记符指令助记符指令助记符指令助记符(真指令真指令真指令真指令)构成的语句构成的语句构成的语句构成的语句指示性语句指示性语句指示性语句指示性语句由由由由伪指令伪指令伪指令伪指令构成的语句构成的语句构成的语句构成的语句指令性语句指令性语句指令性语句指令性语句的格式为:的格式为:标号标号标号标号:指令助记符指令助记符指令助记符指令助记符 目的操作数目的操作数目的操作数目的操作数 ,源操作数源操作数源操作数源操作数 ;注释注释注释注释 指示性语句指示性语句指示性语句指示性语句的格式为:的格式为:名字名字名字名字 伪指令伪指令伪指令伪指令 操作数操作数操作数操作数1,1,1,1,
9、操作数操作数操作数操作数2,2,2,2,;注释注释注释注释 注:注:注:注:各部分之间至少要用一个各部分之间至少要用一个各部分之间至少要用一个各部分之间至少要用一个空格空格空格空格(或逗号、分号或逗号、分号或逗号、分号或逗号、分号)作为分隔符。作为分隔符。作为分隔符。作为分隔符。10 指示性语句(伪指令)由汇编程序执行执行。它。它指出汇编程序应如何对源程序进行汇编,如指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开何定义变量、分配存储单元以及指示程序开始和结束等。始和结束等。指示性语句指示性语句无无机器码指令与其机器码指令与其相对应。相对应。指令性语句(真指令)由由
10、CPU执行执行,每一条每一条指令性语句都指令性语句都有有一条机器码指令与其对应;一条机器码指令与其对应;注意注意:指令性语句汇编时生成机器码;指示性语句汇编时不生成机器码。11语句的构成元素:语句的构成元素:1.1.标号标号标号标号指令的符号地址,用来代表指令在指令的符号地址,用来代表指令在存储器中的地址存储器中的地址。只只能出现能出现在指令性语句在指令性语句中,标号后应中,标号后应加加上冒号。上冒号。2.2.名字名字名字名字段、过程、变量或宏的名字,用来代表它们在段、过程、变量或宏的名字,用来代表它们在存储器中存储器中的地址的地址。只能出现只能出现在指示性语句在指示性语句中,名字后中,名字后
11、不加不加冒号。冒号。n n标号与名字标号与名字统称为统称为标识符标识符一般最多由一般最多由3131个字母、数字及规个字母、数字及规定的特殊符号(如定的特殊符号(如 _ _、$、?、)组成,不能以数字开头。)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写默认情况下,汇编程序不区别标识符中的字母大小写n n一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的用的保留字保留字n n保留字保留字是汇编程序已经利用的标识符,主要有:是汇编程序已经利用的标识符,主要有:o o真指令助记符真指令助记符例如:例如:MOVMO
12、V、ADDADDo o伪指令助记符伪指令助记符例如:例如:DBDB、EQUEQUo o操作符操作符例如:例如:OFFSETOFFSET、PTRPTRo o寄存器名寄存器名例如:例如:AXAX、CSCS123.3.指令助记符指令助记符指令助记符指令助记符80868086真指令、伪指令助记符真指令、伪指令助记符4.4.操作数操作数操作数操作数即即指令的操作对象指令的操作对象对对指令性语句指令性语句(真指令真指令)00,1 1,2 2个个对对指示性语句指示性语句(伪指令伪指令)根据需要而定根据需要而定操作数之间以逗号分隔操作数之间以逗号分隔操作数可以是:寄存器、存储单元、常数或操作数可以是:寄存器、
13、存储单元、常数或表达式表达式 例如:例如:AXAX,DI+BX+10DI+BX+10,200200,16*8+TABLE16*8+TABLE,等等,等等13 例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值 显然,第二种写法要比第一种写法要好。5.5.注释注释注释注释以分号开头,可放在指令后,也可单独一行。以分号开头,可放在指令后,也可单独一行。注意注解的写法。注意注解的写法。要写指令(段)在程序中的要写指令(段)在程序中的作用作用,而不要写指令的操作。而不要写指令的操作。注释不能加程序的汇编,不生成目标程序,只为阅读方
14、便。14汇编语言的一个实例:hello.asm datadata SEGMENT SEGMENTHello DB Hello,world!,0DH,0AHdata data ENDSENDSprogprog SEGMENT SEGMENT ASSUME CS:prog,DS:datastart:MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;显示字符串 MOV AH,4CH INT 21H;退回DOSprogprog ENDS ENDS END END startstart名字标号15 4.1.3 数据项与表达式1常量常量
15、常量常量二进制数二进制数,以以B B或或b b结尾结尾。如。如0100110101001101B B。十十进进制制数数,以以字字母母D D或或d d结结尾尾,缺缺省省情情况况下下,后后缀缀D D或或d d可以省略如可以省略如8585。十十六六进进制制数数,以以H H结结尾尾。以以字字母母A AF F开开头头的的十十六六进进制制数数,前前面面要要用用0 0表表达达,以以避避免免与与其其他他符符号号混混淆淆,如如0 0F160F160H H。字符串字符串:用:用引号括起来引号括起来的的1 1个或多个字符。个或多个字符。如如 ERROR!ERROR!,a a,汇汇 编编 时时 被被 翻翻 译译 成成
16、 对对 应应 的的ASCIIASCII码码4 45H,52H,52H,4FH,52H,21H,61H5H,52H,52H,4FH,52H,21H,61H。数据项数据项(操作数的形式)包括常量常量、标号标号/名字名字、变量变量及表达式表达式。16有三个有三个属性:属性:段地址段地址段地址段地址:即标号所在段的段地址;:即标号所在段的段地址;偏移量偏移量偏移量偏移量:标号所代表存储单元的段内偏移地址;:标号所代表存储单元的段内偏移地址;类类类类 型型型型:NEARNEAR或或FARFAR NEARNEAR表示标号所在语句与转移指令表示标号所在语句与转移指令/调用指令在同一调用指令在同一码段内码段内
17、,跳转时只需改变跳转时只需改变IPIP即可。即可。FAR FAR 标号所在语句与转移指令标号所在语句与转移指令/调用指令不在同一代调用指令不在同一代码段内。跳转时需改变码段内。跳转时需改变CSCS和和IPIP即可。即可。若没有对类型进行说明若没有对类型进行说明,默认为默认为NEARNEARNEARNEAR。标号标号通常作为通常作为转移指令转移指令转移指令转移指令或或CALLCALLCALLCALL指令指令指令指令的转移地址。的转移地址。2.2.标号标号/名字名字指令或数据所在内存单元的符号地址指令或数据所在内存单元的符号地址指令或数据所在内存单元的符号地址指令或数据所在内存单元的符号地址如如
18、Start:MOV AX,data JMP/CALL Start Hello DB 06H,45H,44HPTR17变量也有三个变量也有三个属性属性:段地址段地址变量所在段的段地址变量所在段的段地址偏移量偏移量变量单元地址与段首地址之间的位移量。变量单元地址与段首地址之间的位移量。类类 型型有有BYTEBYTE、WORD WORD、DWORDDWORD三种之一。三种之一。变量变量在程序中作为在程序中作为存储器操作数存储器操作数存储器操作数存储器操作数被引用。被引用。3.变量如如 Start:MOV AX,dataPTR 变量即内存中的存储单元或数据区。变量名是存储单元(数据区)的符号地址 或
19、名字。18例如:例如:正确的正确的:LP1,AGAIN,NEXT,_GO,OK_1LP1,AGAIN,NEXT,_GO,OK_1 错误的错误的错误的错误的 :4M,LOOP,AAA,#HELP,+ONE4M,LOOP,AAA,#HELP,+ONE标号和变量名标号和变量名的使用规则的使用规则:组成组成:A-Z(A-Z(不分大小写不分大小写),0-9,),0-9,?._$_$不能不能以数字开头,以免与十六进制数相混。以数字开头,以免与十六进制数相混。长度长度小于小于3131个字符个字符不能与保留字不能与保留字(指令助记符、伪指令、预定义符号等指令助记符、伪指令、预定义符号等)重名重名对定义的符号不
20、区分大小写。对定义的符号不区分大小写。19注:变量要事先定义才能使用变量类型应与指令要求的操作数类型相符。例:MOV BL,V1;要求V1应该是字节属性的变量。变量定义后,变量名只对应这个数据区的首地址,若有这个数据区有若干个数据项时,其地址要改变。指令中的操作数的段基地址不直接表示出来,是默认的。在使用变量时,其段属性应与其所指的段寄存器相符,若不相符,要加上段超越。204.表达式表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。
21、如如 Start:MOV AX,16*8+TABLE16*8+TABLE21用于地址表达式,例:LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为:LEA SI,1003H(1)算术运算符 +、-、*、/,MODMOD用于数字表达式,例:MOV AX,4*1024 汇编后的形式为:MOV AX,4096 22注意注意:不要把不要把逻辑运算符逻辑运算符与与逻辑运算指令逻辑运算指令混淆:混淆:例:例:AND AX,AND AX,3FC0H AND 0FF00H3FC0H AND 0FF00H 汇编后源操作数被翻译为:汇编后源操作数被翻译为:3F00H3F00H,所以上述指令
22、,所以上述指令与与 AND AX,AND AX,3F00H3F00H等价。等价。(2)逻辑运算符 ANDAND、OROR、XORXOR、NOTNOT逻辑运算符逻辑运算符只能用于只能用于数字数字表达式表达式中。中。例:例:MOV CL,MOV CL,36H AND 0FH36H AND 0FH 经汇编后:经汇编后:MOV CL,MOV CL,06H06H23例:例:MOV BX,MOV BX,PORT GT 300HPORT GT 300H 若若PORTPORT的值大于的值大于300H300H为真为真,则汇编后为:则汇编后为:MOV BX,MOV BX,0FFFFH0FFFFH 若若为假为假,则
23、汇编后为:则汇编后为:MOV BX,MOV BX,0 0(3)关系运算符EQEQ、NENE、LTLT、GTGT、LELE、GEGE关系运算的结果是一个逻辑值:真真或假假 关系为真,结果为全1 关系为假,结果为全024(4)取地址运算符SEG、OFFSETSEGSEG:取变量取变量/标号的段地址标号的段地址OFFSETOFFSET:取变量:取变量/标号的偏移地址标号的偏移地址例:VAR DB 12HVAR DB 12H MOV BX MOV BX,OFFSET OFFSET VAR VAR;取变量;取变量VARVAR的偏移地址的偏移地址 MOV AX MOV AX,SEGSEG VAR VAR;
24、取变量;取变量VARVAR的段地址的段地址注意注意:SEG、OFFSET只能对符号地址操作只能对符号地址操作MOV AX,SEG BXMOV BX,OFFSET SI25例:例:VAR DW 1,2,3,4,5 则则 TYPE TYPE VAR=2VAR=2 LENGTH LENGTH VAR=1VAR=1 SIZE SIZE VAR =2VAR =2(5)取值运算符TYPE、LENGTH、SIZETYPE 取取变量的类型(变量的类型(1,2,4)LENGTH 取所定义取所定义变量变量的长度的长度 (无DUP时为1,有时为DUP前面的值)SIZE 取所定义存储区的字节数取所定义存储区的字节数
25、(=TYPE*LENGTH)26LENGTH和和SIZE运算符的具体运算规则是:如果变量是运算符的具体运算规则是:如果变量是用重复操作符用重复操作符DUP定义的,那么运算符定义的,那么运算符LENGTH的运算的运算结果是外层结果是外层DUP的给定值的给定值(即外层重复次数),如果没(即外层重复次数),如果没有用有用DUP定义的变量,运算结果总是定义的变量,运算结果总是1。而运算符而运算符SIZE是是LENGTH和和TYPE两个运算结果的乘积。两个运算结果的乘积。【例例】取出变量占存储单元个数。取出变量占存储单元个数。DATASEGMENT A DBABCDEF BDW10DUP(1,2DUP(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 汇编语言程序设计11 汇编语言 程序设计 11

限制150内