汇编语言程序设计2课件_第1页
汇编语言程序设计2课件_第2页
汇编语言程序设计2课件_第3页
汇编语言程序设计2课件_第4页
汇编语言程序设计2课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章汇编语言程序设计1第四章汇编语言程序设计14.1程序设计语言概述机器语言汇编语言高级语言用二进制编码表示的指令,计算机可以直接识别并执行采用助记符表达指令操作码,采用标识符表示指令操作数。与计算机内部硬件结构和指令系统密切相关,通用性较差。通常用于实时控制及需要直接控制设备的场合。脱离具体机器,不依赖于特定计算机的结构和指令系统。通用性好,便于移植。不能编写直接访问机器硬件资源的系统软件或控制软件。24.1程序设计语言概述机器语言用二进制编码表示的指令,计4.28086汇编语言简介一、数据与表达式1.数据——常数、变量、标号1)常数表示一个固定数值,主要用于做指令中的立即数、寻址中的位移量,或在伪指令语句中给变量赋值。数值常数:由二、八、十和十六进制表达的数。字符串常数:用’’括起来的一串ASCII码字符,等效为一组数值常数。0101B 3247O2873(D)23ABH’12AB’=31H、32H、41H、42H34.28086汇编语言简介一、数据与表达式0101B 2)变量代表某个数据所在存储单元的地址,用来引用某个存储单元。其值在程序运行期间可以改变。变量需要事先定义,通过变量名引用。变量名表示给变量分配的存储单元的首地址。属性:段基址、段内偏移量、类型(字节、字等)3)标号代表指令所在存储单元的地址,通常用来作为程序中转移、循环指令的操作数。属性:段基址、段内偏移量、距离(NEAR、FAR)42)变量42.表达式由常数、变量、标号和运算符连接而成分类:数字表达式、地址表达式8086汇编语言中的运算符算术运算符逻辑运算符关系运算符数值返回运算符属性修改运算符52.表达式由常数、变量、标号和运算符连接而成51)算术、逻辑、关系运算符算术运算符+、-、*、/、mod等逻辑运算符AND、OR、NOT、XOR关系运算符EQ、NE、LT、LE、GT、GE注意逻辑运算指令和逻辑运算符的区别ANDDX,PORTAND0FFH汇编时由汇编程序计算程序运行时计算若两个数的关系符合比较条件,则比较结果为全1,否则为全0=≠<≤>≥61)算术、逻辑、关系运算符算术运算符+、-、*、/、mod等2)数值返回运算符①段基址运算符SEG

SEG变量/标号功能:取变量/标号的段基址②偏移量运算符OFFSETOFFSET变量/标号功能:取变量/标号的偏移地址例:将变量NUM1的段基址送AX,偏移地址送SI。MOVAX,SEGNUM1MOVSI,OFFSETNUM1;等价于LEASI,NUM172)数值返回运算符①段基址运算符SEG;等价于LEAS③类型运算符TYPETYPE变量/标号功能:返回反映变量/标号类型的数值

④长度运算符LENGTH

LENGTH变量功能:返回变量的元素个数。若变量定义时采用DUP表达式,则返回最外层DUP的重复次数;若最外层未用DUP,则返回1。DUP表达式的格式:重复次数DUP(数据,…)类型字节字双字NEARFAR返回值124-1-28③类型运算符TYPE类型字节字双字NEARFAR返回值12例:X1DB1,2,3,4X2DB10DUP(2,3DUP(0))X3DB2,3DUP(0)则:LENGTHX1的值为____LENGTHX2的值为____LENGTHX3的值为____⑤字节总数运算符SIZE

SIZE变量功能:返回变量所占的总字节数。

SIZEX=(LENGTHX)*(TYPEX)

11019例:X1DB1,2,3,411019例:…… VAR1DB2DUP(1,2DUP(0)) …… MOVAX,SEGVAR1 MOVBX,OFFSETVAR1 MOVCL,TYPEVAR1 MOVCH,LENGTHVAR1 MOVDX,SIZEVAR1;CL=1;CH=2;DX=210例:……;CL=1;CH=2;DX=2103)属性修改运算符类型修改运算符PTR类型PTR地址表达式短转移运算符SHORTJMPSHORT标号类型指定运算符THISTHIS类型段超越运算符段名:地址表达式段寄存器:地址表达式BYTE、WORD、DWORD、QWORD、TBYTE、NEAR、FAR变量、标号、存储单元113)属性修改运算符类型修改运算符PTR类型PTR地址3.运算符的优先规则(自学)优先级运算符高LENGTH,SIZE,[]段超越运算符PTR,OFFSET,SEG,TYPE,THIS*,/,MOD,SHL,SHR+,-EQ,NE,LT,LE,GT,GE低NOT>AND>OR>XORSHORT123.运算符的优先规则(自学)优先级运算符高LENGTH,SI二、汇编语言的伪指令指令语句伪指令语句宏指令语句执行语句。经过汇编产生可供计算机硬件执行的机器目标代码。说明语句。如:程序有几个段,段的名称,是否需要预留存储空间等。不直接产生目标代码。指令语句+伪指令语句。替代源程序中一段有独立功能的程序,汇编时产生相应的目标代码。13二、汇编语言的伪指令指令语句执行语句。经过汇编产生可供计算机1.数据定义伪指令定义格式:

DB

DW[变量名] DD数据项表 DQDT功能:将数据项表中的数值存入连续的存储单元中,并关联变量名和存储单元地址。可以是常数、表达式、字符串、‘?’、带DUP的表达式141.数据定义伪指令定义格式:可以是常数、表达式、字符串、‘?数据定义例(1)DABYTE DB-5HDAWORD DW6*3DADWORDDD1234HDABYTEDAWORDDADWORDFBH12H00H34H12H00H00H15数据定义例(1)DABYTE DB-5HDAB数据定义例(2)STRING1 DB

'AB'STRING2 DW

'AB'STRING3 DD

'AB'STRING1STRING2STRING341H42H42H41H00H00H41H42H16数据定义例(2)STRING1 DB 'AB'STR2.符号定义伪指令用符号表示常数、表达式赋值伪指令格式:符号名

EQU表达式等号伪指令格式:符号名=表达式区别:用EQU定义的符号在释放前(PURGE)不可以重新赋值注意:符号名不具有标号的三个属性。常数表达式地址表达式变量名标号名过程名寄存器名指令助记符172.符号定义伪指令用符号表示常数、表达式常数表达式17COUNT = 5COUNT = 10NUMEQU 13+5-4NUMEQU 12*6 符号定义例PURGENUMNUM EQU 12*6 正确错误18COUNT = 5符号定义例PURGENUM正3.类型定义伪指令(自学)定义格式:变量名/标号名LABEL类型功能:为当前存储单元重新定义一个指定类型的变量或标号,但并不为此变量/标号分配存储单元。193.类型定义伪指令(自学)定义格式:194.段定义伪指令功能:把源程序划分成若干逻辑段,便于汇编程序生产相应的目标代码,便于连接程序生产可执行程序。一个汇编语言源程序可以包含若干个逻辑段(代码段、数据段、附加段或堆栈段),段与段之间的顺序可随意排列。需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。204.段定义伪指令功能:把源程序划分成若干逻辑段,便于汇编程序逻辑段定义格式段名SEGMENT[定位类型][组合类型][‘类别名’]……段名ENDS1)段名由用户自定义2)段名的属性:段基址、段内偏移量、定位类型、组合类型、类别名21逻辑段定义格式段名SEGMENT[定位类型][组合类型STACKSEGMENT......STACKENDSDATASEGMENT......DATAENDSCODESEGMENT ......CODEENDS22STACKSEGMENT225.设置起始地址伪指令定义格式:ORG表达式功能:指出该伪指令后面的程序段或数据块存放的起始地址的偏移量。注意:省略ORG则从本段起始地址(偏移量为0)开始连续存放235.设置起始地址伪指令定义格式:ORG表达式23DATA SEGMENTBUFF1DB 23H,56H

ORG 2000HBUFF2DB ‘STRING’DATA ENDS从DATA段偏移地址为2000H的单元开始存放设置起始地址伪指令例从DATA段偏移地址为0的单元开始存放24DATA SEGMENT从DATA段偏移地址为2000H的单6.汇编结束伪指令定义格式:END起始标号功能:表示整个源程序结束,停止汇编。注意:必须是最后一条语句;若有多个END语句,只有第一个有效。256.汇编结束伪指令定义格式:END起始标号257.段寄存器设定伪指令说明设定好的段与段寄存器的关系。定义格式:

ASSUME段寄存器名:段名[,段寄存器名:段名]ASSUME语句的位置任意,一般设在代码段中。注意:ASSUME仅用于定义段和段寄存器的对应关系,并未将各段基址装入相应段寄存器。CS和SS可由系统自动装入,而DS和ES需用程序装入。267.段寄存器设定伪指令说明设定好的段与段寄存器的关系。26STACK1SEGMENTSTACK......STACK1ENDSDATA2SEGMENT......DATA2ENDSCODE3SEGMENT

ASSUMECS:CODE3,DS:DATA2,SS:STACK1START:MOVAX,DATA2MOVDS,AX......CODE3ENDSENDSTARTDS的装入27STACK1SEGMENTSTACKDS的装入278.过程定义伪指令(了解)过程——具有一定功能的程序定义格式: 过程名 PROC[NEAR/FAR] …… RET/RETn 过程名 ENDP288.过程定义伪指令(了解)过程——具有一定功能的程序28注意:过程名的三个属性:段基址、偏移地址、类型属性(距离类型:NEAR、FAR)过程必须在某个段内定义每个过程一定有返回指令RET,可能有多个,但执行的最后一条指令必是RET过程和段可互相嵌套,但不可交叉覆盖29注意:293.3汇编语言程序设计汇编程序的结构框架DATA

SEGMENT……DATA

ENDSCODE

SEGMENT

ASSUME

CS:CODE,DS:DATA

……START:MOV AX,DATA MOV DS,AX …… MOV AH,4CH INT 21HCODE

ENDS

END

START数据定义;段寄存器定义DS的装入DOS调用;可定义过程汇编程序的结构举例303.3汇编语言程序设计汇编程序的结构框架DATA 三、汇编语言的语句结构[名字]操作码[操作数][;注释]例START:MOVAX,30H;AX30H以字母开头,后跟字母、数字、特殊字符(?、*、_、$、@等)组成,不超过31个字符不能与保留字相同任选,多数指令不用,多数伪指令用

指令语句的名字后跟冒号,表示是标号,它代表该行指令的地址;伪指令前的名字后不带冒号时,表示变量、符号、段名、过程名等。

必不可少的核心,规定了所要执行的操作,由指令或伪指令助记符组成。参与操作的数据或地址,可以有多种表达形式,之间用‘,’隔开。‘;’后面的字符串,用来说明程序或语句的功能31三、汇编语言的语句结构以字母开头,后跟字母、数字、特殊字符4.3汇编语言程序设计实例顺序程序设计分支程序设计循环程序设计子程序设计(自学)324.3汇编语言程序设计实例顺序程序设计32[例17]以TABLE为首地址的内存中存有一位十六进制数的ASCII码表。查表求HEX单元中数(0H~0FH)的ASCII码,并存于ASCI单元。DATA SEGMENTTABLEDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46HHEX DB4ASCI DB?DATA ENDS顺序程序设计33[例17]以TABLE为首地址的内存中存有一位十六进制数的设BX指向TABLE表首地址HEX的值送AL查表得出结果将结果送给ASCILEA BX,TABLE(MOVBX,OFFSETTABLE)MOV AL,HEXXLATMOV ASCI,AL流程图34设BX指向TABLE表首地址HEX的值送AL查表得出结果将结CODESEGMENTASSUMECS:CODE,DS:DATABEING: MOV AX,DATA MOV DS,AX MOV BX,OFFSETTABLE MOV AL,HEX

XLATTABLE MOV ASCI,AL MOVAH,4CH INT 21HCODE ENDS ENDBEING35CODESEGMENT35分支程序设计基本思想:根据逻辑判断的结果来形成程序的分支。(a)二分支结构(b)多分支结构36分支程序设计基本思想:根据逻辑判断的结果来形成程序的分支。([例4-18]求数X的绝对值,并送值回原处DATA SEGMENTX DW 8192H;变量XDATA ENDSX(X>=0)

-X(X<0)X=37[例4-18]求数X的绝对值,并送值回原处X>=0?求X的相反数结束>=0<0CMP X,0NEGXJGE流程图38X>=0?求X的相反数结束>=0<0CMP X,0NEGCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX

CMPX,0JGEDONE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论