汇编语言程序设计初步.ppt
《汇编语言程序设计初步.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计初步.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计初步汇编语言程序设计初步第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.1汇编语言程序基本格式汇编语言程序基本格式4.1.1 汇编语言概述 机器语言机器语言是计算机能直接识别和执行的语言,用一串“0”、“1”数字代码表示。汇编语言汇编语言是一种符号语言,它用某种容易记忆的英文缩写去表示机器指令操作码(指令助记符),用人们熟悉的数码及数学符号等表示操作数、地址。4.1.2 汇编语言源程序和汇编程序 用汇编语言编写的程序称为汇汇编编语语言言源源程程序序,或简称为源源程程序序。对程序员来讲,符号语言简单直观、便于记忆,比二进制数表示的机器语言方便了许多。但计算机只“认
2、识”机器语言而不认识这些文字、数字、符号,为此人们创造了一种程序,叫汇编程序。如同英汉之间对话需要“翻译”一样,汇编程序的作用相当于一个“翻译员”,自动地把汇编语言源程序翻译成机器语言。该过程称为汇汇编编,完成汇编任务的程序称为汇汇编编程程序序,相应形成的机器语言程序称为目目标标程程序序。汇编后形成的目标程序虽然是二进制代码,但还不能直接上机运行,必须经过连接程序(LINK)连接,将库文件或其它目标文件连接到一起形成可执行文件后,才能送入计算机执行。汇编语言程序从建立到汇编、连接形成可执行程序的整个过程如图所示。MyProg.ASM汇编程序编辑程序MyProg.OBJ汇编程序MyProg.EX
3、E11/4/20221第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.1.3 汇编语言的特点汇编语言的特点1.执行速度快2.程序短小3.可以直接控制硬件4.可以方便地编译5.辅助计算机工作者掌握计算机体系结构4.1.4 一般汇编语言程序的结构形式一般汇编语言程序的结构形式 NAME1SEGMENT;段的起始;段的起始 语句语句1 ;语句语句2 ;n条语句序列构成的语句体条语句序列构成的语句体 语句语句n;NAME1ENDS;段的结束;段的结束 NAME2SEGMENT;段的起始;段的起始 语句语句1;语句语句2;m条语句序列构成的语句体条语句序列构成的语句体 语句语句m;NAM
4、E2ENDS ;段的结束;段的结束END ;源程序结束;源程序结束11/4/20222第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束完整的段定义格式完整的段定义格式 data segment data segment ;定义数据段定义数据段 data endsdata ends;-;-extra segment extra segment ;定义附加段定义附加段 extra endsextra ends;-;-code segment code segment ;定义代码段定义代码段 assume cs:code,ds:data,es:extra assume cs:code,d
5、s:data,es:extrastart:start:mov ax,data mov ax,data mov ds,ax mov ds,ax ;段地址段地址 段寄存器段寄存器 code endscode ends end start end startPSPPSPDSDSESESSSSSCSCSEXE程序的内存映象图装入模块文件头11/4/20223第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束汇编语言程序格式汇编语言程序格式1 STACKSEGMENT STACK ;段的起始;段的起始 DB 256 DUP(0);在此定义栈段;在此定义栈段 STACKENDS ;段的结束;段的
6、结束 DATASEGMENT ;段的起始;段的起始 ;在此段定义数据;在此段定义数据 DATAENDS ;段的结束;段的结束 CODESEGMENT ;段的起始;段的起始 ASSUME CS:CODE,DS:DATA,SS:STACK 起始编号:起始编号:MOV AX,DATA ;MOV DS,AX ;将用户数据段作为当前数据段;将用户数据段作为当前数据段 语句语句2 ;m条语句序列构成的语句体条语句序列构成的语句体 MOV AX,4C00H INT 21H ;返回系统;返回系统 CODE ENDS ;段的结束;段的结束END 起始标号起始标号 ;源程序结束;源程序结束11/4/20224第4
7、章 汇编语言程序设计初步目录目录上页上页下页下页结束结束汇编语言程序格式汇编语言程序格式2 STACKSEGMENT STACK ;段的起始;段的起始 DB 256 DUP(0);在此定义栈段;在此定义栈段 STACKENDS ;段的结束;段的结束 DATASEGMENT ;段的起始;段的起始 ;在此段定义数据;在此段定义数据 DATAENDS ;段的结束;段的结束 CODESEGMENT ;段的起始;段的起始 MAIN PORC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA ;MOV DS,AX ;将用户数据段作为当前数据段;将用户数据段作为当前数据段
8、语句语句i ;m条语句序列构成的语句体条语句序列构成的语句体 RET ;返回系统;返回系统 MAIN ENDP CODE ENDS ;段的结束;段的结束END MAIN ;源程序结束;源程序结束11/4/20225第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束存储模式与简化段定义伪操作存储模式与简化段定义伪操作(1)MODEL 伪操作伪操作 .MODEL 存储模式存储模式 ,语言类型语言类型 ,操作系统类型操作系统类型 ,堆栈选项堆栈选项 存储模式:存储模式:tiny small medium compact largetiny small medium compact larg
9、e huge flat huge flat.model small.model small.stack 100H.stack 100H.data.data .code.code.startup.startup .exit 0.exit 0endend(2)简化的段定义伪操作简化的段定义伪操作.code name.code name.data.data.data?.data?.fardata name.fardata name.fardata?name.fardata?name.const.const.stack size.stack size11/4/20226第4章 汇编语言程序设计初步目录
10、目录上页上页下页下页结束结束.model small.model small.data.data.code.code.startup.startup .exit 0.exit 0end end .model small .model small .data .data .code .codestart:mov ax,datastart:mov ax,data mov ds,ax mov ds,ax mov ax,4c00h mov ax,4c00h int 21h int 21h end start end start汇编语言程序格式汇编语言程序格式3 3【减缩格式】【减缩格式】11/4/20
11、227第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.2 汇编语言基本语法汇编语言基本语法4.2.1常量、变量与标号常量、变量与标号 1.常量常量 数值常量 汇编语言中的数值常量可以是二进制、八进制、十进制或十六进制数,书写时用加后缀的方式标明即可,对于十进制数可以省掉后缀。对于十六进制数,当以AF开头时,前面加数字0,以避免和名字混淆。字符串常量 包含在单引号中的若干个字符形成字符串常量,字符串在计算机中存储的是相应字符的ASCLL码。如A的值是41H,AB的值是4142H等。符号常量 常量用符号名来代替就是符号常量。用COUNT EQU 3或COUNT=3定义后COUNT就
12、是一个符号常量,与数值常量3等价。2.变量变量 变量在数据段、附加数据段或堆栈段中定义,后面不跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经常在操作数字段出现。它也有段、偏移及类型三种属性。段属性段属性:定义变量的段起始地址,此值必须在一个段寄存器中。偏移属性偏移属性:变量的偏移地址是从段的起始地址到定义变量的位置之间的字节数。对于16位段,是16位无符号数;对于32位段,则是32位无符号数。在当前段内给出变量的偏移值等于当前地址计数器的值,当前地址计数器的值可以用$来表示。类型属性类型属性:变量的类型属性定义该变量所保留的字节数。如BYTE(DB,1个字节长)、WORD(DW,2个
13、字节长)、DWORD(DD,4个字节长)、FWORD(DF,6个字节长)、QWORD(DQ,8个字节长)、TBYTE(DT,10个字节长),这一点在数据定义伪操作中已作了说明。在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。11/4/20228第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.2.1常量、变量与标号常量、变量与标号3.标号标号 标号在代码段中定义,后面跟着冒号:,它也可以用LABEL或EQU伪操作来定义。此外,它还可以作为过程名定义。标号经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。标号有3种属性:段、偏移及类型。段
14、属性:段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。偏移属性偏移属性:标号的偏移地址是从段起始地址到定义标号的位置之间的字节数。对于16位段是16位无符号数;对于32位段则是32位无符号数。类型属性类型属性:用来指出该标号是在本段内引用还是在其他段中引用的。如是在段内引用的,则称为NEAR。对于16位段,指针长度为2字节;对于32位段,指针长度为4字节。如在段外引用,则称为FAR。对于16位段,指针长度为4字节(段地址2字节,偏移地址2字节);对于32位段,指针长度为6字节(段地址2字节,偏移地址4字节)。11/4/20229第4章 汇编语言程序设计初
15、步目录目录上页上页下页下页结束结束4.2.2运算符与表达式运算符与表达式1.算术运算符算术运算符 算术运算符有:(加)、(减)、*(乘)、/(除)、MOD(取余除)。MOV AL,4*85 ;数值表达式 MOV SI,OFFSETBUF12 ;地址表达式2.逻辑运算符逻辑运算符 逻辑运算符有:AND(与)、OR(或)、XOR(异或)、NOT(非)。逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。在汇编阶段,指令AND AL,78H AND 0FH等价于指令AND AL,08H。3.关
16、系运算符关系运算符 关系运算符有:EQ(相等)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)NE(不等于)。关系运算符要有两个运算对象。两个运算对象要么都是数值、要么都是同一个段内的地址。运算结果为真时,表示为0FFFFH,运算结果为假时,表示为0000H。指令 MOV BX,32 EQ 45 等价于 MOV BX,0 指令 MOV BX,56 GT 30 等价于 MOV BX,0FFFFH 11/4/202210第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.2.2运算符与表达式运算符与表达式4.取值运算符取值运算符 变量和标号具有段属性、偏移属性和类型属性
17、等,要从变量和标号中析出它们的段地址、偏移地址,变量的类型、元素的个数和占用内存的大小等,就要使用取值运算符(又称分析运算符)。这些运算符是SEG、OFFSET、TYPE、LENGTH、SIZE。例如:例如:SCORE DW 30 DUPSCORE DW 30 DUP(0 0)定义了一个变量,定义了一个变量,TYPE SCORETYPE SCORE为为2 2,LENGTH SCORELENGTH SCORE是是3030,而,而SIZE SCORESIZE SCORE是是6060。11/4/202211第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.2.2运算符与表达式运算符与表
18、达式5.合成运算符合成运算符 也称为修改属性运算符,它能修改变量或标号的原有的类型属性并赋予新的类型。这类运算符是PTR和THIS。PTR的格式:的格式:类型 PTR 表达式 其中类型可以是BYTE、WORD、DWORD、NEAR、FAR,表达式是被修改的变量或标号。例如NUM被语句 NUM DB 1,3,5,7 定义为字节类型,若要将NUM开始两个字节的数据装入AX,需要PTR运算符,例如:MOV AX,WORD PTR NUM THIS的格式:的格式:新符号名 EQU THIS 类型 原符号名 类型 参数,THIS的功能与PTR相同,只是格式不同。THIS语句中建立一个新的符号名并指定它有
19、THIS后的类型,而新符号名指向下一语句的原符号名的内存地址。例如前面用PTR修改NUM类型可用下面的THIS语句代替。DNUM EQU THIS WORD NUM DB 1,3,5,7 其中DNUM是字型并指向NUM所指的内存单元,DNUM的存取以字为单位,而NUM仍是字节类型。11/4/202212第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.3 伪指令伪指令1.符号定义伪指令符号定义伪指令 等值伪指令等值伪指令EQUEQU 格式:EQU 例如:CONSTANTEQU256 ;将数256赋以符号名 BEQUBP+8 ;变址引用赋以符号名B 等号伪指令等号伪指令=例如:EM
20、P=6 或 EMP EQU 6【EQU与=有别】定义符号名伪指令定义符号名伪指令LABELLABEL:LABEL伪指令可以定义变量或标号。格式:LABEL 解除定义伪指令解除定义伪指令PURGEPURGE:解除指定符号的定义。格式:PURGE 解除符号定义后,可用EQU重新定义。例如:Y1EQU7;定义Y1的值为7 PURGEY1;解除Y1的定义 Y1EQU36;重新定义Y1的值为3611/4/202213第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.3 伪指令伪指令2.数据定义伪指令数据定义伪指令 格式格式:变量 助记符 操作数,操作数;注释 助记符字段说明所用伪指令的助记
21、符,也即伪指令,说明所定义的数据类型。常用的有以下几种:DBDB伪指令用来定义字节,其后的每个操作数都占有一个字节(8位)。DWDW伪指令用来定义字,其后的每个操作数占有一个字(16位,其低位字节在第一个字节地址中,高位字节在第二个字节地址中)。DDDD伪指令用来定义双字,其后的每个操作数占有两个字(32位)。DFDF伪指令用来定义6个字节的字,其后的每个操作数占有48位,可用来存放远地址。这一伪指令只能用于386及其后继机型中。DQDQ伪指令用来定义4字,其后的每个操作数占有4个字(64位),可用来存放双精度浮点数。DTDT伪指令用来定义10个字节,其后的每个操作数占有10个字节,形成压缩的
22、BCD码。11/4/202214第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.3 伪指令伪指令3.段定义伪指令段定义伪指令 SEGMENT和ENDS 段定义伪指令。该指令能对程序分段。其格式为:段名 SEGMENT 定位类型组合类型类别 段名 ENDS ASSUME 段寄存器指派伪指令。格式为:ASSUME 段寄存器:段名,段寄存器:段名 ORG 移动地址指针的伪指令。其格式为:ORG 常量表达式4.过程定义伪指令过程定义伪指令PROC和和ENDP 过程名 PROC NEAR/FAR 过程名 ENDP 11/4/202215第4章 汇编语言程序设计初步目录目录上页上页下页下页
23、结束结束4.3 伪指令伪指令5.程序标题伪指令程序标题伪指令TITLE 格式:TITLE 文本 其中,文本是用户给出的字符串,要求长度不超过6个字符。6.地址计数器与对准伪指令地址计数器与对准伪指令 地址计数器$例如:ARRAYDW 1,2,$+4,3,4,$+4 如汇编时ARRAY分配的偏移地址为0074,则汇编后的存储区将如图4.2所示。ORG伪指令 ORG伪指令用来设置当前地址计数器的值,其格式为:ORGCONSTANTEXPRESSION 如常量表达式的值为N,则ORG伪指令可以使下一个字节的地址成为常量表达式的值N。例如:VECTORS SEGMENT ORG10 VECT1DW 4
24、7A5H VECT2DW 0C596H VECTORS ENDS 则VECT1的偏移地址值为0AH,而VECT2的偏移地址值为0CH。ARRAY010002007C00030004008200007411/4/202216第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.3 伪指令伪指令7.基数控制伪指令基数控制伪指令 二进制数二进制数 由一串0和1组成其后跟以字母B,如00101100B。十进制数十进制数 由09的数字组成的数。一般情况下,后面不必加上标记,在指定其它基数的情况下,后面可跟字母D,例如178D。十六进制数十六进制数 由09及AF组成的数,后面跟字母H。这个数的第
25、一个字符必须是09,所以如果第一个字符是AF时,应在其前面加上数字0,如0FFFFH。八进制数八进制数 由数字07组成的数,后面可跟字母O或Q,如1777O。.RADIX RADIX伪指令可以把默认的基数改变为216范围内的任何基数。格式如下:.RADIXEXPRESSION 字符串字符串 字符串可以看成串常量,可以用单引号或双引号把字符串放在其中,得到的是字符串的ASCII码值,例如,ABCD。11/4/202217第4章 汇编语言程序设计初步目录目录上页上页下页下页结束结束4.4 宏指令宏指令1.宏指令定义宏指令定义 宏指令名MACRO 形式参数1,形式参数2,形式参数N ;宏指令体(宏体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 初步
限制150内