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

下载本文档

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

文档简介

汇编语言程序格式第1页,课件共43页,创作于2023年2月4.1源程序书写格式完整的段定义一般格式如下:<段名>SEGMENT……<段名>ENDS简化段定义.MODEL,.STACK,.DATA,.CODE一般格式书写结构:<堆栈段名>SEGMENTSTACK……<堆栈段名>ENDS<数据段名>SEGMENT……<数据段名>ENDS<代码段名>SEGMENT ASSUME定义过程名或起始标号:……<代码段名>ENDSEND过程名或起始标号第2页,课件共43页,创作于2023年2月几点说明源程序中的堆栈段、数据段和代码段是逻辑段。源程序在汇编、连接后生成的段是物理段。逻辑段和物理段的关系取决于伪指令ASSUME。一个源程序至少有一个逻辑代码段和END伪指令。一个源程序文件可以含有多个逻辑数据段、多个逻辑代码段、多个逻辑堆栈段。第3页,课件共43页,创作于2023年2月;完整段定义datasegmentHMessageDB'Hello,World',13,10,'$'dataendscodesegment Assumecs:code,ds:dataStart:movax,data movds,ax movah,9 movdx,OFFSETHMessage int21h movah,4ch int21hcodeends ENDStart书写格式举例第4页,课件共43页,创作于2023年2月;简化段定义1.ModelSmall.DATAHMessageDB'Hello,World!',13,10,'$'.CODEStart:movax,@data movds,ax movah,9 movdx,OFFSETHMessage int21h movah,4ch int21h ENDStart书写格式举例第5页,课件共43页,创作于2023年2月;简化段定义2 .ModelSmall .DATAHMessageDB'Hello,World',13,10,'$' .CODEStart:.STARTUP movah,9 movdx,OFFSETHMessage int21h .EXIT0 ENDStart书写格式举例第6页,课件共43页,创作于2023年2月书写格式中涉及的伪指令SEGMENT/ENDS相当于一个逻辑段的前后括号,必须成对出现。<段名>由用户给出,前后必须一致。END格式:END[过程名|标号]功能:源程序文件结束。ASSUME格式:ASSUME段寄存器名:逻辑段名功能:用于指定某逻辑段应通过哪个段寄存器寻址,但并不把具体值装入相应的段寄存器。第7页,课件共43页,创作于2023年2月段寄存器的装填CS的装填系统完成,无需用户干预。DS,ES,SS(对于386后继机型,FS,GS)装填有用户程序完成。以DS为例,一般方法:MOVAX,<逻辑段名>MOVDS,AX程序开始伪指令:.STARTUP(只能在简化段定义格式中使用)第8页,课件共43页,创作于2023年2月DOS下汇编语言程序的正常结束方法1:采用DOS4CH功能调用。…..MOVAH,4CHINT21H……END方法2:RET方式<程序名>PROCFAR PUSHDS SUBAX,AX PUSHAX …… RET<程序名>ENDP …… END第9页,课件共43页,创作于2023年2月4.2伪操作伪操作它不是程序运行期间由计算机执行的,而是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。处理器选择伪操作段定义伪操作程序开始和结束伪操作数据定义及存储器分配伪操作表达式赋值伪操作地址计数器与对准伪操作基数控制伪操作第10页,课件共43页,创作于2023年2月.8086选择8086指令系统(默认值).286选择80286指令系统.286P选择保护模式下的80286指令系统.386选择80386指令系统.386P选择保护模式下的80386指令系统.486选择80486指令系统.486P选择保护模式下的80486指令系统.586选择Pentium指令系统.586P选择保护模式下的Pentium指令系统◆处理器选择伪操作:第11页,课件共43页,创作于2023年2月◆段定义伪操作:完整的段定义格式datasegment;定义数据段

…dataends;----------------------------------------extrasegment;定义附加段

…extraends;----------------------------------------codesegment;定义代码段

assumecs:code,ds:data,es:extrastart:movax,datamovds,ax;段地址

段寄存器

…codeendsendstartPSP

DSESSSCSEXE程序的内存映象图装入模块文件头第12页,课件共43页,创作于2023年2月……codesegmentmainprocfarassume……start:pushdsmovax,0pushax……retmainendpcodeendsendstart……codesegmentmainprocfarassume……start:…………movax,4c00hint21hmainendpcodeendsendstart第13页,课件共43页,创作于2023年2月存储模式与简化段定义伪操作(1)MODEL伪操作

.MODEL存储模式[,语言类型][,操作系统类型][,堆栈选项]

存储模式:tinysmallmediumcompactlargehugeflat.modelsmall.stack100H.data…….code.startup…….exit0end(2)简化的段定义伪操作.code[name].data.data?.fardata[name].fardata?[name].const.stack[size]第14页,课件共43页,创作于2023年2月.modelsmall.data…….code.startup…….exit0end

.modelsmall.data…….codestart:movax,@datamovds,ax……movax,4c00hint21hendstart

.modelsmall.const…….data…….codestart:movax,DGROUPmovds,ax……movax,4c00hint21hendstartMASM6.0增加了入口点和出口点伪操作。段组名第15页,课件共43页,创作于2023年2月程序开始可以用NAME或TITLE做为模块的名字格式NAMEmodule_name或TITLEtext如果程序中既无NAME,也无TITLE,则将源文件名作为模块名。结束:END[label]MASM6.0增加了定义入口点和出口点的伪操作.STARTUP.EXIT[return_value]◆程序开始和结束伪操作:第16页,课件共43页,创作于2023年2月一个简单的例子在屏幕上输出一个字符’3’。;完整段定义CSEGSEGMENT ASSUMECS:CSEGSTART:MOVDL,'3' MOVAH,2 INT21H

MOVAH,4CH INT21HCSEGENDSENDSTART;简化段定义1 .MODELSMALL .CODESTART:MOVDL,'3' MOVAH,2 INT21H MOVAH,4CH INT21H ENDSTART第17页,课件共43页,创作于2023年2月;简化段定义2 .MODELSMALL .CODESTART:MOVDL,'3' MOVAH,2 INT21H .EXIT0 ENDSTART第18页,课件共43页,创作于2023年2月4.3程序中数据的组织

(参考教材P142)程序中所涉及的数据除立即数、由指令产生的数、通过键盘等读入的数据外,其他数据、中间结果等都需要在程序设计中进行定义和分配。变量的定义和预置格式:<变量名>伪操作符<操作数><变量名>由字母、数字、下划线等字符组成,第1个字符不能是数字。前31个字符有效。保留字不能作为变量名。<操作数>可以是常数、表达式、字符串、?、DUP等。伪操作符:DB,DW,DD,DF,DQ,DT第19页,课件共43页,创作于2023年2月变量定义举例ADB100 ;A为一个字节,初值100。BDB100,2*3 ;B值为100,B+1值为6。CDB‘ABCD’ ;C值41H,C+1值42H,C+2值43H,C+3值44H。DDB? ;D为一个字节,值不定。EDB23DUP(0) ;23个0,从E开始每个占一个字节。FDW2*3 ;一个字,即06H、00H。DUP(Duplicationoperator)第20页,课件共43页,创作于2023年2月例1COUNTERDB6DB‘A’,‘D’,0DH,‘$’TABLE1DB21,45H,255,10110111B内存分配情况?第21页,课件共43页,创作于2023年2月例2WORD_VARDW89H,1909H,-1DW0ABCDH内存分配情况?第22页,课件共43页,创作于2023年2月DATA_BYTEDB10,4,10H,?DATA_WORDDW100,100H,-5,?

-

0AH

04H

10H

-

64H

00H

00H

01H

FBH

FFH

-DATA_BYTE

DATA_WORD

例:第23页,课件共43页,创作于2023年2月教材P143[例6-30]DATA_BYTEDB12,8,12H

DATA_WORDDW100,-5,100H DATA_DWDD4*15,0FFFBH第24页,课件共43页,创作于2023年2月例6-32STR1DB‘AB’STR2DW‘AB’STR3DD‘AB’第25页,课件共43页,创作于2023年2月例6-33以DA1为首地址的数据区中,存放以下数据:“A”,“B”,0,0,“C”,“D”,0,0。请分别用DB、DW和DD实现。第26页,课件共43页,创作于2023年2月例6-33DA1DB“AB”,0,0,“CD”,0,0DA1DW“BA”,0,“DC”,0DA1DD“BA”,“DC”第27页,课件共43页,创作于2023年2月变量的访问变量的属性段(segment):它属于哪个段,段基是什么。位移(offset):相对于段基的位移是多少。类型(type):表明数据项的长度,如字节,字,双字,4字等。数据回送操作符主要有:TYPE,LENGTH,SIZE,OFFSET,SEG等。对变量的访问有多种形式,除了取其值外,还可以取其段值、位移、类型、长度等。第28页,课件共43页,创作于2023年2月数据回送操作符的使用

(参考教材P129)TYPE<变量名> ;DB,DW,DD分别为1,2,4LENGTH<变量名> ;取长度对使用DUP的情况,返回变量的单元数;而对于其他情况,返回1。如FEESDW100DUP(0),LENGTHFEES返回100。如ADB‘1234’,LENGTHA返回1。SIZE<变量名> ;返回变量的字节数SIZE=LENGTH*TYPEOFFSET<变量名或标号> ;取位移值。SEG<变量名或标号> ;取段基地址第29页,课件共43页,创作于2023年2月举例DATASEGMENT ADB‘1234’ BDWA CDDA DDW123H,0F5HDATAENDS……… MOVAX,SEGA ;DATA→AX MOVDS,AX MOVAL,LENGTHA ;1→AL MOVAH,SIZEA ;1→AH MOVBH,TYPEC ;4→BH MOVBP,OFFSETC ;6→BP第30页,课件共43页,创作于2023年2月变量可以通过它的名字访问,要特别注意操作类型与定义时的类型一致。DATASEGMENT ADB52 BDW‘AB’DATAENDSCODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA MOVDS,AX MOVAH,A MOVBX,B MOVCX,A ;出错

MOVCL,B ;出错

……为了提高访问变量的灵活性,可以使用属性操作符,修改变量类型第31页,课件共43页,创作于2023年2月结果:(AX)=3402H(AL)=34H例OPER1DB1,2OPER2DW1234H,5678H……MOVAX,OPER1+1×MOVAL,OPER2×类型不匹配

MOVAX,WORDPTROPER1+1MOVAL,BYTEPTROPER2第32页,课件共43页,创作于2023年2月属性操作符(P132)PTR格式:<类型>PTR<地址表达式>其中,<类型>可以是BYTE、WORD、DWORD、FWORD等。功能:使地址表达式具有另一种类型属性例如:MOV[BX],5 ;必须用PTR说明,写成:MOVBYTEPTR[BX],5或MOVWORDPTR[BX],5第33页,课件共43页,创作于2023年2月段操作符格式1:<段寄存器名>:<地址表达式>格式2:<逻辑段名>:<地址表达式>功能:指定该有效地址相对指定段寻址。例如:MOVAX,ES:[BX+SI]MOVBX,SS:[SI+3]MOVBX,DATA2:WORDPTR[100];将DATA2段中位移100的一个字送BX。第34页,课件共43页,创作于2023年2月THIS(双重定义)格式:<变量名1>EQUTHIS<类型1> <变量名>DB|DW|DD….<类型1>应和<变量名>使用的定义类型不同。举例

FIRST_TYPEEQUTHISBYTEWORD_TABLEDW100DUP(?)FIRST_TYPE的偏移地址与WORD_TABLE完全相同。访问FIRST_TYPE时,按字节类型;而访问WORD_TABLE按字类型。第35页,课件共43页,创作于2023年2月BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)tosLABELWORDLABEL伪操作:nameLABELtype

BYTE_ARRAY

WORD_ARRAY

tos

50字0064H这样,在定义的数组中的第一个字节的地址赋予了两种不同类型的变量名LABEL功能:同一变量可以具有不同的类型属性。第36页,课件共43页,创作于2023年2月◆表达式赋值伪操作:(参考教材P141)格式:表达式名EQU表达式ALPHAEQU9BETAEQUALPHA+18BBEQU[BP+8]与EQU类似的“=”伪操作(允许重复定义)……EMP=7……EMP=EMP+1……第37页,课件共43页,创作于2023年2月◆地址计数器与对准伪操作:地址计数器$:保存当前正在汇编的指令的地址

ORG$+8;跳过8个字节的存储区

JNE$+6;转向地址是JNE的首址+6

温馨提示

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

评论

0/150

提交评论