第四章汇编语言程序设计-5.pptx
《第四章汇编语言程序设计-5.pptx》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计-5.pptx(136页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主要内容:4.1 汇编语言和汇编程序4.2 汇编语言程序规范4.3 伪指令4.5 宏指令4.6 汇编语言程序设计第1页/共136页机器语言:二进制数形式的指令和数据。助记符:用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。汇编语言:指令助记符、符号地址、标号、伪指令等语言元素的集合及这些元素使用的规则。汇编语言源程序:用汇编语言编写的程序。4.1 汇编语言和汇编程序第2页/共136页汇编程序源程序的编译程序汇编程序汇编语言 源程序机器语言目标程序 汇编源程序需翻译成机器语言(变成可执行文件,机器才能执行)这个翻译过程叫汇编。高级语言中称该过程为“解释”或
2、“编译”。执行翻译的程序称为“汇编程序”。第3页/共136页汇编语言程序设计与执行过程汇编语言源程序 源文件.ASM汇编(编译)目标文件.OBJ链接 可执行文件.EXE调试 最终程序.EXEMASM 1.ASMLINK 1.OBJDEBUG 1.exe第4页/共136页4.2 汇编语言程序规范1.分段结构2.语句的类型3.语句的构成与规范4.数据项与表达式作业:4-2 4-3(用表格形式)第5页/共136页1.分段结构汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三个逻辑段组成:数据段存放数据、变量堆栈段堆栈区域代码段存放程序指令示例第6页/共136页2.语句的类型指令语句:由指令
3、助记符构成,汇编后将产生相应的机器代码构成的目标程序,供CPU执行。伪指令语句:为汇编程序和链接程序提供一些必要控制信息的、由伪指令构成的管理性语句。宏指令语句:为程序简洁,将一组反复出现的指令集中定义为一条宏指令,汇编后还原为这组指令对应的目标代码。第8页/共136页3.语句的构成与规范汇编语言程序的每个语句由4个域构成:标号、名字 操作符 操作数 ;注释标号名字域:标号指令的符号地址,用来代表指令在存储器中的地址。标号后应加上冒号。名字段、过程、变量的名字,用来代表它们在存储器中的地址。名字后不加冒号。示例第9页/共136页语句的构成与规范操作符域:指令、伪指令、宏指令助记符。操作数域:即
4、指令的操作对象。可以有0个、1个或2个。操作数之间以逗号分隔。形式:寄存器、存储单元、常数或表达式。注释域:以分号开头,用来说明程序的功能、分段,以便阅读和理解。汇编时不予处理。示例第10页/共136页4.数据项与表达式常量标号变量表达式第12页/共136页 常量没有属性的纯数二进制数:以B结尾,如01001101B。十进制数:如85,或以D结尾。十六进制数:以H结尾,第1个数字为A-F时,前面应加0,如0F160H,否则被误会是标识符。字符串:用单引号括起来的1个或多个字符,每个字符的ASCII码值构成。如256,汇编时被翻译成ASCII码323536H,而不是256。第13页/共136页标
5、号:指令语句的名字也是其符号地址。标号有3个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类型:NEAR(段内引用)或FAR(段外引用)常作为转移指令的转移地址 标号第14页/共136页 变量变量:存于内存单元中的数据,可被程序改变变量名:是变量的符号地址变量也有3个属性:段地址:变量所在段的段地址 偏移量:变量单元地址与段首址间的位移量。类 型:有BYTE、WORD和DWORD三种,由定义变量的伪指令确定。变量与标号统称为存储器操作数。第15页/共136页标号和变量名的使用规则1.组成:A-Z a-z 0-9?._$2.不能以数字开头,句号(.)只能作首字符3
6、.长度小于31个字符4.不能与保留字(指令助记符、伪指令、预定义符号等)重名5.不能重复定义例:正确:LP1,AGAIN,NEXT,_GO,OK_1 错误:4M,LOOP,AAA,#HELP,+ONE第16页/共136页 表达式表达式:由常数、寄存器名、标号、变量与一些运算符的组合而成。运算符有6类:A.算术运算符B.逻辑运算符C.关系运算符D.分析运算符E.综合运算符属性运算符优先级别第17页/共136页算术运算符 +、-、*、/、MOD、SHL、SHR完成整数的算术运算,结果也是整数。注意:地址运算要求两个地址要在同一段内,只有加、减法运算才有实际意义。用于数字表达式:MOV AX,4*1
7、024 ;汇编后的形式为:MOV AX,4096用于地址表达式:LEA SI,TAB+3 ;若TAB的偏移地址为1000H,汇编后的形式为:LEA SI,1003H求余、左移、右移 第18页/共136页例4-1 一个程序片断:DATADATA SEGMENT SEGMENT VR DB 1,3,5,6 DATADATA ENDSENDS CODECODE SEGMENT SEGMENT MOV AH,VR+2 ;将VR+2单元内容5AH MOV AL,3*10-20 ;将表达式值10AL MOV BH,10 MOD 3 ;将表达式值1BH MOV BL,01010B SHL 1;左移1次得14
8、HBL6 5 3 1 MVR 第19页/共136页逻辑运算符 AND、OR、XOR、NOT逻辑运算符只能用于数值表达式中。例:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H注意:不要把逻辑运算符与逻辑运算指令混淆:例:AND AX,3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX,3F00H等价。第20页/共136页关系运算符 EQ、NE、LT、GT、LE、GE 关系运算的关系运算的结果结果是一个是一个逻辑值逻辑值:真真或或假假 关系为关系为真真,结果为,结果为全全1 1 关系为关系为假假,结果为,结果为全全0 0 例:例:
9、MOV BX,PORT GT 300HMOV BX,PORT GT 300H 若若PORTPORT值小于值小于300H,300H,则汇编后为则汇编后为:MOV BX,0:MOV BX,0 否则汇编后为:否则汇编后为:MOV BX,0FFFFHMOV BX,0FFFFH第21页/共136页分析运算符取地址运算符 SEG、OFFSET取值运算符 TYPE、LENGTH、SIZE第22页/共136页SEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址例:VAR DB 12H MOV BX,OFFSET VAR;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址
10、;若VAR在当前使用数据段中,则:AX=DS 取地址运算符 SEG OFFSET第23页/共136页取值运算符TYPE、LENGTH、SIZETYPE:取变量/标号的类型(1,2,4,-1,-2)LENGTH:取变量的长度(变量中元素的个数)SIZE:取变量在存储区的字节数(=TYPE*LENGTH)例如:V1 DB 2AH,3FH V2 DW 10 DUP(1,?,2)V3 DW 12DUP(?)注意:LENGTH和SIZE对重复操作数DUP定义的数组逗号隔开的第一项有效,如V2;在如V1变量,对逗号隔开的第一项有效;都符合SIZE=TYPE*LENGTH。DB BW DD NEAR FAR
11、;LENGTH=1,SIZE=1;LENGTH=1,SIZE=1;LENGTH=10,SIZE=20;LENGTH=10,SIZE=20;LENGTH=12,SIZE=24;LENGTH=12,SIZE=24第24页/共136页DATA SEGMENTV1 DB 2AH,3FHV2 DW 2A3FH,3040HV3 DD 12345678H,12ABCDEFHV4 DW 20 DUP(1,4,2DUP(?)DATA ENDS例:下面定义的数据段DATA,从40000H开始。MOV AX,SEG V1 MOV BX,SEG V2 MOV CX,SEG V3 同属一段,段基址相同。MOV AX,O
12、FFSET V1 MOV BX,OFFSET V2 MOV CX,OFFSET V3 偏移地址分别为0,2,6。MOV AX,TYPE V1 MOV BX,TYPE V2 MOV CX,TYPE V3 类型值分别是1,2,4。MOV AX,LENGTH V4 MOV BX,SIZE V4 长度和字节数分别是20,40。MOV AH,LENGTH V1 MOV AL,SIZE V1 MOV BH,LENGTH V2 MOV BL,SIZE V2 MOV CH,LENGTH V3 MOV CL,SIZE V3 只对第一项有效。AH=1AL=1BH=1BL=2CH=1CL=4第25页/共136页属性
13、运算符PTR用来改变或建立地址操作数的新类型。格式:PTR 类型BYTE,WORD,DWORD,NEAR,FARBYTE、WORD、DWORD 描述数据存储单元(变量)地址NEAR、FAR 描述转移、调用(标号)的目的地址第26页/共136页例:MOV BYTE PTR DI,0;字节类型 MOV WORD PTR DI,0;字类型 MOV DI,0B5H ;类型不定 PTR也可用来进行强制类型转换例:STR1 DW 2345H;STR1定义为字类型 MOV AX,STR1 ;合法 MOV AL,STR1 ;非法 MOV AL,BYTE PTR STR1;合法45H23HMSTR1第27页/共
14、136页 与EQU配合,为汇编的下一个存储单元定义一个新的符号名,与下一个存储单元具有相同的地址。格式:THIS 例:LABC EQU THIS BYTE;LABC为字节 LABD DW 4321H,3456H;LABD为字 ;LABC和LABD有相同的段首址和偏移地址 MOVAL,LABC ;AL=21H MOV AX,LABD ;AX=4321H指定新类型THIS43H56HLABC34H21HLABD第28页/共136页优先级优先级运运 算算 符符高高低低(),.,LENGTH,WIDTH,SIZE,MASK,记录字段名记录字段名PTR,OFFSET,SEG,TYPE,THIS,CS:,
15、DS:,ES:,SS:HIGH,LOW*,/,MOD,SHL,SHR+,-EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT分析、综合运算符分离运算符算术运算符关系运算符 逻辑运算符段类型属性第29页/共136页4.3 伪指令伪指令1.数据定义伪指令2.符号定义伪指令3.标号定义伪指令4.段定义伪指令5.段寻址伪指令6.过程定义伪指令7.定位伪指令8.汇编结束作业:4-4(存储示意图)4-5(存储示意图)4-7 4-11 第30页/共136页1.数据定义及存储器分配伪指令功能:为程序分配指定数目的存储单元。格式:变量名 伪指令 ;注释 数据项表为由逗号分隔的表达式组。常用的数
16、据定义伪指令:DB 字节(BYTE)变量,1个字节;DW 字(WORD)变量,2个字节;DD 双字(DWORD)变量,4个字节;DQ 四字(QWORD)变量,8个字节;DT 十字节(TBYTE)变量,10个字节。每 数 据 项 占例1字符 特殊操作数 第31页/共136页例1:DATA_B DB 10,5,10HDATA_W DW 100H,-4DATA_D DD 0FFFBH05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA_BDATA_BDATA_WDATA_WDATA_DDATA_D10105 510H10H100H100H-4 40FFFBH0FFFBH汇编后的
17、内存分配情况第32页/共136页字符串操作数定义:M41H00Hu 字符串只能定义为字节DB或字DW DB定义如:STR DB HELLO DW定义,串中只能有一个或两个字符 例如:DW ABC ()如:DB AB;41H在低地址,42H在高地址 DW AB;42H在低地址,41H在高地址 当DW定义,字符串中有一个字符时 例如:DW A;41H在低地址,高地址补0STRHELLO48H45H4CH4CH4FHABBAM41H42H42H41H第33页/共136页1.操作数?:用来保留存储空间,但不置初值,为随机值。RSV DW?,?,?,?,?,?,?,?2.重复操作符DUP:变量名 伪指令
18、 DUP(表达式)重复的数据可以使用重复操作符DUP,如上面RSV亦可写成:RSV DW 8 DUP(?)3.操作数$(也称程序计数器):其值为程序下一个分配的存储单元的偏移地址。特殊操作数?DUP$第34页/共136页例:TABLE DB 10 DUP(?)BUFFER DW TABLE,$+3设TABLE的偏移地址为0080H,则汇编后:BUFFER0080H80HTABLE008AH008BH008CH008DH.8FH00H00H0089H10 Bytes第35页/共136页2.符号定义伪指令符号定义伪指令 EQU =等值伪指令:EQU 和 等号伪指令:=格式:符号名 EQU/=表达式
19、表达式:常数、表达式、寄存器名、指令助记符注意:1.用”=”定义的符号可在任何时候进行重定义。2.用EQU定义的符号未清除前,不能重新定义。清除可用PURGE伪指令。3.二者均不占用存储空间,仅是给符号赋值。第36页/共136页例:FIVE EQU 5 COUNT EQU AX TEN EQU 10 DIST =BYTE PTRSI+BP GOTO =JMP MOV AX,TEN MOV CX,COUNT ADD DIST,FIVE DIST=WORD PTRSI+BP+1 ADD DIST,AX GOTO LABEL 定义引用第37页/共136页3.标号定义伪指令标号定义伪指令 LABEL功
20、能:用来定义变量或标号的新类型格式:变量(标号)名 LABEL 类型变量:BYTE WORD DWORD 例如:VAR1 LABEL WORD VAR2 DB 20 DUP(1)标号:NEAR FAR 例如:L1 LABEL FAR L2:MOV AX,1000H两变量具有相同两变量具有相同的地址指针的地址指针两标号为同一指令的符号地址THIS第38页/共136页4.段定义伪指令段定义伪指令定义一个段的基本格式:段名 SEGMENT 定位类型 组合方式 类别 段名 ENDS1.二者成对出现,段名应一致。2.段由SEGMENT开始,ENDS结束。3.对数据段和堆栈段中的语句一般是变量定义。4.对
21、代码段则是指令语句。第39页/共136页1)定位类型功能功能:说明说明如何确定如何确定逻辑段的逻辑段的边界边界。PAGE:PAGE:逻辑段从页边界开始。256字节称为一页,故段的起始物理地址应为00H。PARAPARA(Paragraph):(Paragraph):逻辑段从一个节(16个字节)的边界开始。段的起始地址应能被16整除,即段起始物理地址应为0H。默认类型BYTE:BYTE:从字节边界开始,即从任何地址开始。WORD:WORD:从字边界开始,即段从偶地址开始。第40页/共136页2)组合类型组合类型功能:功能:说明不同模块中同名段的组合方式NONE:该段独立,与其他段无关。默认类型P
22、UBLIC:所有同名同类型的段组合成一个逻辑段,公用一个段基址,运行时装入同一个物理段中。STACK:专用于说明堆栈段,同PUBLIC。COMMON:所有同名段同类型的段具有相同的段基址(后覆盖前),段长度取决于最长的COMMON段。AT:按绝对地址定位,数值表达式值(16位)就是段地址,不能用于代码段。MEMORY:该段位于被连接在一起的其他所有段之上。第41页/共136页3)类别由编程者赋予该段的与段名不同的另外一种名字信息。功能:所有同类别段被安排在连续的存储区中。用单引号括起来的字符串。例:模块1中:seg1 SEGMENT PARA STACK stack seg1 ENDS 模块2
23、中:seg2 SEGMENT PARA STACK stack seg2 ENDS第42页/共136页5.段寻址伪指令段寻址伪指令在代码段中用来设定各段名和段寄存器的关系格式:ASSUME CS:code,DS:data,ES:data 语句中的code和data为段名。这个语句说明:1.CS将指向名字为code的代码段 2.DS和ES将指向名字为data的数据段第43页/共136页注意:注意:ASSUMEASSUME伪指令伪指令只是告知只是告知汇编程序有关汇编程序有关段寄段寄存器与段的存器与段的关系关系,并没有给段寄存器赋予实际的初值。,并没有给段寄存器赋予实际的初值。故需要以下语句:故需要
24、以下语句:MOVMOVAX,DATAAX,DATA MOV MOVDS,AXDS,AX MOV MOVES,AXES,AX 将段基址装入段寄存器将段基址装入段寄存器。如果程序中用到堆栈段,。如果程序中用到堆栈段,则则SSSS也需装入实际的初值也需装入实际的初值。代码段基地址代码段基地址不需要程序员装入不需要程序员装入CSCS寄存器寄存器,而由,而由OS(OS(操作系统操作系统)负责装入负责装入。第44页/共136页堆栈段定义过程:堆栈段定义过程:STACK SEGMENT STACK DW 32DUP(?);段内留出32个字作为堆栈区 TOS LABEL WORD ;TOS为字变量,偏移地址为
25、0040H STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,STACK MOV SS,AX ;堆栈段寄存器初始化 MOV SP,OFFSET TOS;堆栈指针初始化 LABEL第45页/共136页6.过程定义伪指令过程定义伪指令(1)定义过程(子程序)伪指令(2)近过程举例(3)同一模块远过程举例(4)连接伪指令连接伪指令:PUBLICPUBLIC 和和 EXTRN(5)不同模块远过程举例第46页/共136页(1)格式:过程名 PROC NEAR/FAR RET 过程名 ENDP (a)过程名:过程入口的符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 汇编语言 程序设计
限制150内