第4章汇编语言程序格式课件

PPT
  • 阅读 41 次
  • 下载 0 次
  • 页数 78 页
  • 大小 272.013 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第4章汇编语言程序格式课件
可在后台配置第一页与第二页中间广告代码
第4章汇编语言程序格式课件
可在后台配置第二页与第三页中间广告代码
第4章汇编语言程序格式课件
可在后台配置第三页与第四页中间广告代码
第4章汇编语言程序格式课件
第4章汇编语言程序格式课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 78
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】第4章汇编语言程序格式课件.ppt,共(78)页,272.013 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44750.html

以下为本文档部分文字说明:

计算机科学与技术系《汇编语言》汇编程序功能伪操作汇编语言程序格式汇编语言程序的上机过程第4章汇编语言程序格式计算机科学与技术系《汇编语言》编辑程序.ASM文件汇编程序.OBJ文件连接程序.EXE文件Edit等MASMLINK汇编语言程

序的建立及执行过程:在计算机上运行汇编语言程序的步骤是:•用编辑程序(任何一种文本编辑程序)建立ASM文件;•用MASM程序把ASM文件转换成OBJ文件;•用LINK程序把OBJ文件转换成EXE文件;•用DOS命令直接键入文件名就可执行该程序;4.1汇编程序功能计算机科学与技术系《汇编

语言》汇编程序功能汇编程序的主要功能:•检查源程序,给出出错信息。•产生目标文件(.obj)和列表文件(.lst)。•展开宏指令。计算机科学与技术系《汇编语言》4.2伪操作(伪指令)伪操作是汇编程序对源程序进行汇编时处理的操作,(不像机器指令那样是程序运行期间由计算机来执行

的)完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。•处理器选择伪操作•段定义伪操作•程序开始和结束伪操作•数据定义及存储器分配伪操作•表达式赋值伪操作•地址计数器与对准伪操作•基数控制

伪操作计算机科学与技术系《汇编语言》.8086选择8086指令系统.286选择80286指令系统.286P选择保护模式下的80286指令系统.386选择80386指令系统.386P选择保护模式下的80386指令系统.486选择80486指令系统.486P选择保护模式下的804

86指令系统.586选择Pentium指令系统.586P选择保护模式下的Pentium指令系统4.2.1处理器选择伪操作:这类伪操作一般放在程序的最前面,如不给出,则汇编程序默认值为.8086。计算机科学与技术系《汇编语言》4.2.2段定义伪操作:段定义伪操作的格式:段名SEGMENT[定位类型

][组合类型][使用类型][‘类别’]…………;语句序列段名ENDS1)段名段名是为该段起的名字,用来指出汇编程序为该段分配的存储区起始位置。1.完整的段定义伪指令计算机科学与技术系《汇编语言》2)定位方式(1)PARA:表示本段必须从能被16整除的

地址处开始存放,即段起始地址最低四位必须是0。(2)WORD:表示本段要从一个偶数地址处开始存放,即段起始地址的最低一位必须是0。(3)BYTE:表示本段起始地址可以从任一地址处开始存放。(4)PAGE:表示本段要从

能被256整除的地址处开始存放,即起始地址的最低八位必须是0。默认为PARA计算机科学与技术系《汇编语言》3)组合方式组合方式有六种类型可供选择。(1)PRIVATE该段为私有段,在连接时将不与其他同名段合并(2)PUBLIC该段在连接时可以把不

同模块的同名段相连接而形成一个段。每一段从小段的边界开始,所以各段之间有小于16个字节的间隙。(3)COMMON该段在连接时可以把不同模块中的同名段重叠而形成一个段,由于各同名段有相同的起始地址,所以会产生覆盖。(4)STACK把不同模块的同名段组

合而成一个堆栈段。各段之间没有间隙。(5)MEMORY同PUBLIC(6)AT表达式使段地址是表达式所计算出来的16位值,CS除外。默认为PRIVATE计算机科学与技术系《汇编语言》【例】有两个模块,各模块段定义如下模块1:┆DATA1SEGMENTPAR

APUBLIC‘DATA1’M1DB45HDUP(0)DATA1ENDSDATA2SEGMENTPARACOMMON‘DATA2’N1DB102HDUP(0)DATA2ENDSEND模块2:┆DATA1SEGMENTPARAPUBLIC‘DATA1’M2DB104H

DUP(11H)DATA1ENDSDATA2SEGMENTPARACOMMON‘DATA2’N2DB105HDUP(0)DATA2ENDSDATA3SEGMENTT1DB50DUP(20H)DATA3ENDSEND计算机科学与技

术系《汇编语言》该段的定位组合方式示意图如图所示。计算机科学与技术系《汇编语言》4)使用类型USE16使用16位寻址方式段长≤64KUSE32使用32位寻址方式段长≤4G5)类别在引号中给出连接时组成的段组的类型名。在连接后形成的装入模块中,可使相同类别的段位置靠在一起。计算机科学与技术系《

汇编语言》◆假定伪指令ASSUME格式:ASSUME段寄存器:段名[,段寄存器:段名]功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。DATA1SEGMENTADB1,2,3DATA1ENDSCODESEGMENTASSUMEDS:DATA1,CS:

CODE┆其中段寄存器名必须是CS,DS,ES和SS(对于386及后继机型还有FS和GS)中的一个。段名必须是由SEGMENT定义的段中的段名。计算机科学与技术系《汇编语言》◆段定义伪操作:完整的段定义格式举例datasegment;定义数据段…da

taends;----------------------------------------extrasegment;定义附加段…extraends;----------------------------------------codesegment;定义代码段as

sumecs:code,ds:data,es:extrastart:movax,datamovds,ax;段地址段寄存器…codeendsendstart计算机科学与技术系《汇编语言》……codesegmentmain

procfarassume……start:pushdsmovax,0pushax……retmainendpcodeendsendstart……codesegmentmainprocfarassume……start:…………m

ovax,4c00hint21hmainendpcodeendsendstart计算机科学与技术系《汇编语言》例:一个完整的段定义格式STACKSEGMENTSTACK;定义堆栈段STACK...;分配堆栈段的大小STACKENDSDATASEGMENT;定义数据段...;定义

数据DATAENDSCODESEGMENT‘CODE’;定义代码段ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;程序开始MOVDS,AX...;程序代码MOVAX,4C00H;程序终止,返回DOSINT21HCODEENDS;

代码段结束...;子程序代码ENDSTART;汇编结束例:一个完整的段定义格式计算机科学与技术系《汇编语言》2.存储模型与简化段定义伪指令前面介绍了完整的段定义格式,用完整段定义格式虽然可以控制段的各种属性,但程序员很少使用。现在的汇编程序提供了一种简化的段定义方式,它使定义段更简单

、方便。具体形式如下:.MODELSMALL;定义存储模式.STACK;定义堆栈段.DATA;定义数据段...;定义数据.CODE;定义代码段.STARTUP;程序起始点,并建立DS和SS内容...;程序代码.EXI

T0;程序结束点,返回DOS...;子程序END;汇编结束计算机科学与技术系《汇编语言》存储模式与简化段定义伪操作(1)MODEL伪操作.MODEL存储模式[,语言类型][,操作系统类型][,堆栈选项]存储模式:ti

ny所有数据和代码都放在一个段.com(0100H)small所有数据和代码各放在一个段medium代码使用多个段,数据合并一个段compact所有代码使用一个段,数据可放多个段large数据和代码都可用多个段

huge数据和代码都可用多个段,数据段可超过64Kflat允许用32位偏移量,DOS下不允许。计算机科学与技术系《汇编语言》①TINY:该存储类型是为编写COM文件类型而设置的。②SMALL:所有的数据变量必须

在一个数据段之内,所有的代码也必须在一个代码段之内。在这种模型下,数据段寄存器的内容保持不变,所有转移也都是段内转移。③MEDIUM:所有的数据变量必须在一个数据段之内,但代码段可以有多个。在这种模型下,数据段寄存器的

内容保持不变,转移可以是段间转移。④COMPACT:数据段可以有多个,但代码段只能有一。⑤LARGE:数据段和代码段都可以有多个,但一个数组的字节数不能超过64KB。⑥HUGE:数据段和代码段都可以有多个,一个数组的字节数也可以超过64KB。⑦FLAT:只能在80386及

其以后的计算机系统中运行。计算机科学与技术系《汇编语言》SMALL存储模式一般的程序都可用这种模式。在小型模式下,一个程序至多只能有一个代码段和一个数据段,每段不大于64KB。这里的数据段是指数据段、堆栈段和附加段的总和,它们共用同一个段基

址,总长度不可超过64KB;因此小模式下程序的最大长度为128KB。访问操作数或指令都只需要使用16位偏移地址;这意味着诸如指令转移、程序调用以及数据访问等都是近属性(NEAR),即小型模式下的调用类型和数据指针缺省分别为近调用和近

指针。计算机科学与技术系《汇编语言》.modelsmall.stack100H.data…….code.startup…….exit0end计算机科学与技术系《汇编语言》.MODEL存储模式[,语言类

型][,操作系统类型][,堆栈选项]语言类型说明可使汇编语言程序与其它语言程序达到共享的目的。所有有效的语言类型可以是C、BASIC、FORTRAN等。操作系统类型说明程序运行于哪个操作系统之下,OS_DOS该选项的缺省值。堆

栈选项类型的值有二个可选值:NEARSTACK和FARSTACK。其中:NEARSTACK是该选项的缺省堆栈类型。NEARSTACK——堆栈段和数据段是同一段;FARSTACK——堆栈段和数据段是不同的段,且堆栈不在段组DGROUP中。例如:.

MODELSMALL,C,OS_DOS,FARSTACK计算机科学与技术系《汇编语言》(2)简化的段定义伪操作.code[name].data.data?.fardata[name]默认名:FAR_DATA.fardata?[name]默认名:FAR_BSS.const.s

tack[size]默认为1KB计算机科学与技术系《汇编语言》汇编语言提供7种标准段,通常在编写一个独立的汇编程序时定义以下三个标准段:.STACK[大小];堆栈段它的参数指定堆栈段所占存储区的字节数,默认是1KB。.DATA;数据段它用于定义具有初值的变量,当然也允许定义无初

值的变量。无初值变量可以安排在另一个段中,它用.data?伪指令创建。.CODE[段名];代码段它的参数指定该代码段的段名。如果没有给出段名,则采用默认段名。计算机科学与技术系《汇编语言》简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段,不用E

NDS作为段结束符。采用简化段定义伪指令前,需有.MODEL存储模式语句。使用简化段定义,各段名称和其他用户所需的信息可以使用MASM预定义符号,例如:@data表示由.data等定义的数据段的段名。例:简化段定义.MODELSMALL.STA

CK100H.DATA…….CODESTART:MOVAX,@DATAMOVDS,AX……MOVAX,4C00HINT21HENDSTART计算机科学与技术系《汇编语言》.modelsmall.data…….code.startup……

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

ata…….codestart:movax,DGROUPmovds,ax……movax,4c00hint21hendstart计算机科学与技术系《汇编语言》格式:段组名GROUP数据段名1[,数据段名2……]功能:汇编程序把各数据段组成一个段组,以

便程序在访问各数据段时使用一个数据段寄存器DS。如:data1segment︰data1endsdata2segment︰data2endsdatagroupgroupdata1,data2codese

gmentassumecs:code,ds:datagroupstart:movax,datagroupmovds,ax︰3.段组定义伪操作计算机科学与技术系《汇编语言》dseg1segmentwordpublic‘data’……dseg

1endsdseg2segmentwordpublic‘data’……dseg2endsdatagroupgroupdseg1,dseg2csegsegmentparapublic‘code’assumecs:cseg,ds:datagroupstart:movax,datagr

oupmovds,ax……movax,4c00hint21hcsegendsendstart计算机科学与技术系《汇编语言》data1segmentwordconst1dw100data1endsdata2segmentwo

rdvar1dw?data2endsdatagroupgroupdata1,data2codesegmentassumecs:code,ds:datagroupmovax,datagroupmovds,axmovax,const1movva

r1,ax…movax,4c00hint21hcodeendsendstart计算机科学与技术系《汇编语言》TITLEtext;指定列表文件每页打印的标题NAMEmodule_name;指出模块的名字END[label];表示源程序结束,label指示程序;开始执行的起始标号.

STARTUP;定义程序的入口点.EXIT[return_value];退出程序并返回操作系统;return_value常用0作返回值4.2.3程序开始和结束伪操作可以没有计算机科学与技术系《汇编语言》在汇编程序MASM中,提供了二组简化的代码伪指令:.STARTUP和.EXIT。.STA

RTUP——在代码段的开始,用于自动初始化寄存器DS、SS和SP;.EXIT——用于结束程序的运行。.modelsmall.data…….code.startup…….exit0end.modelsmall.data…….codestart:

movax,@datamovds,ax……movax,4c00hint21hendstart计算机科学与技术系《汇编语言》4.2.4数据定义及存储器分配伪操作:[变量名]助记符操作数[,操作数,…][;注释]1.变量名必须是一个合法的标识符,它可以写,也可以不写;2.助记符用于确定内存

单元的数据类型,如:DB(字节)、DW(字)、DD(双字)、DF(6字节)、DQ(四字)、DT(10字节)。1.操作数是定义内存单元时的初值表达式,一个定义语句可以有多个初值表达式,各表达式之间必须用逗号‘,’分开;如果某个存储单元没有初值表达式,则必须用一个问号‘?’

来表示;2.在定义语句的后面可以书写注释内容,也可以不写。计算机科学与技术系《汇编语言》DATA_BYTEDB10,4,10H,?DATA_WORDDW100,100H,-5,?例:1注:“?”表示保留存储空间但不存入数据-0AH04H10H-

64H00H00H01HFBHFFH-DATA_BYTEDATA_WORD计算机科学与技术系《汇编语言》【例】DATA1DB10,4,10HDATA2DW100,100H,-5DATA3DD3*20,0FFFDH04106400

0001FBFF3C000000FDFF00000ADATA1DATA2DATA310d410h计算机科学与技术系《汇编语言》ARRAYDB‘HELLO’DB‘AB’DW‘AB’48H45H4CH4CH4FH41H42H42H41HARRAYDW1DD12345678HDW2DD

0abcd1243H78H56H34H12H43H12HCDHABHDW1DW2例例:3例2图例3图计算机科学与技术系《汇编语言》◆重复说明符DUP从前面的内容里,我们知道了定义少量内存变量的定义形式,但如果在程序中要说明50个、100个、

200个甚至更多的、同类型的内存变量时,若采用前面所学的方法,对它们一一加以说明显然是不可行的。为此,汇编语言提供了变量的重复说明符DUP,其说明的一般形式如下:repeat_countDUP(表达式,表达式,…,表达式)解释:repeat_count是重复次数,(表达式,表达式,…,表达

式)是被重复的部分,“表达式”可以是存储单元的初值,也可以是含义另一个DUP的式子。如果在表达式的括号中有多个表达式,那么,它们之间要用逗号‘,’分开。计算机科学与技术系《汇编语言》0102-----000102----------00BUF1→BUF2→-----…100个字节例:BUF1D

B2DUP(0,1,2,?)BUF2DB100DUP(?)计算机科学与技术系《汇编语言》例如:1.BUFFERDB100DUP(?)2.STRINGDB120DUP('ABCDE'),03.DB2DUP(0,2DUP(1,2),3)4.DATA1DW50D

UP(10H,20DUP(1,2,3),20H)5.POINTSDD12,30DUP(0)从上面的例子可看出:用DUP说明内存变量相当于在高级语言中定义数组。-buffer-100字节画出存储单元的分配图,计算分配字节数计算机科学与技术系《汇编语言》◆强

制属性操作符PTR在程序中,我们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时,我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。对于指令:MOV

[BX],1H,其目标操作数[BX]是寄存器间接寻址方式,它指向一个存储单元。在作传送操作时,是把“1H”扩展成8位作字节传送,还是扩展成16位作字传送呢?这就使该指令具有二义性,因为[BX]指向的存储单元可以字节或字的首地址。含有该指令的程序在汇编时,可能会产生警告或出错信息。计算机科学与技

术系《汇编语言》为了使指令中存储单元操作数具有明确的属性,我们可以使用强制属性操作符PTR。其一般格式为:数据类型PTR地址表达式其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。为了明确指令中存

储单元的属性,可把指令“MOV[BX],1H”可改写成:MOVbyteptr[BX],1H或MOVwordptr[BX],1H计算机科学与技术系《汇编语言》在指令中用操作符PTR强制后,不管其后的地址表达式原数据类型是什么,在本指令中就以PTR前面的类型为准。该强制属性只在本指令有效,是

一种临时性的属性,它不会改变原内存单元的定义属性。例如:W1DW1234H,5678HB1DB2DB5D1DD23456789H…MOVAX,wordptrb1;把B1开始的二个字节拼接成一个字,执行后,(AX)=0502HMOVBH,byteptrw1;把字W1的低字节传送给BH,执行后,(

BH)=34HMOVCH,byteptrw1+1;把字W1的高字节传送给CH,执行后,(CH)=12HMOVwordptrd1,12H;把双字D1的低字修改成0012H,执行后,(D1)=23450012H上面

指令中的强制属性是临时属性,它不能改变这些变量在定义时的永久属性。计算机科学与技术系《汇编语言》OPER1DB?,?OPER2DW?,?……MOVOPER1,0;字节指令MOVOPER2,0;字指令OPER1DB1,2OPER2DW12

34H,5678H……MOVAX,OPER1+1×MOVAL,OPER2×类型不匹配MOVAX,WORDPTROPER1+1MOVAL,BYTEPTROPER2(AX)=3402H(AL)=34H例计算机科学与技术系《汇编语言》BYTE_ARRAYLABELBYTEWORD_ARR

AYDW50DUP(?)tosLABELWORDLLABELNEAR◆LABEL伪操作:BYTE_ARRAYWORD_ARRAYtos50字0064H同一个变量可以具有不同的类型属性,除了可以用PTR来定义外,还可以用

LABEL伪操作来定义符号名LABEL类型其中:常用的类型有BYTE、WORD、DWORD、NEAR和FAR等计算机科学与技术系《汇编语言》4.2.5表达式赋值伪操作:等价语句的一般使用格式如下:符号名EQU表达式作用是左边的符号名代表右边的表达式。注意:等价语句不会给符号名分配存储空间,符号名不

能与其它符号同名,也不能被重新定义例ALPHAEQU9BETAEQUALPHA+18BBEQU[BP+8]计算机科学与技术系《汇编语言》汇编语言提供了用等号“=”来定义符号常数的方法,即可用符号名代表一个常数。其一般格式如下:符号名=数值表达式数值表达式在汇编时应该可以计算出数值,它不能含有向前引

用的符号名称。用等号语句定义的符号可以被重复定义。例如:ABC=10+200*5;ABC的值为1010ABC1=5*ABC+21;ABC1的值为5071COUNT=1;COUNT的值为1COUNT=2*COUNT+1;COUNT的值为3……EMP=7……EMP=EMP+1……计算机科学与

技术系《汇编语言》4.2.6地址计数器与对准伪操作:1.地址计数器$:保存当前正在汇编的指令的地址ORG$+8;跳过8个字节的存储区JNE$+6;转向地址是JNE指令的首址+6JMP$+2;转向下一条指令$用在伪操作

的参数字段:表示地址计数器的当前值ARRAYDW1,2,$+4,3,4,$+400H01H00H02H00H7CH00H03H00H04H00H82HARRAY007E007800740076007A计算机科学与技术系《汇编语言》地址计数器$:保存当前正在汇编的指令的地址。例:ARRAYD

W1,2,$+4,3,4,$+4,又假定ARRAY分配的偏移地址为0074,则存储区分配情况如图所示。0002007C0003000401ARRAY→00740082000078007E0078+4=007C007E+4=0082计算机科

学与技术系《汇编语言》SEG1SEGMENTORG10VAR1DW1234HORG20VAR2DW5678HORG$+8VAR3DW1357HSEG1ENDSBUFFERLABELBYTEORG$+8BUFFERDB8DUP(?)ORG100HSTAR

T:……2.ORG伪操作伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该“数值表达式”所指定的地址开始分配。计算机科学与技术系《汇编语言》ORG数值表达式伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该“数值表达式”所指定的地址开始分配。如:DATASEGMENT

ORG10VECT1DW47A5HORG20VECT2DW0C596HDATAENDSA547VECT1→0AH14H96C5VECT2→计算机科学与技术系《汇编语言》BDW2DUP(?)ADB‘morning’EVEN3.偶对齐伪指令EVEN偶对齐伪指令格式:EVEN伪指令的作

用是:告诉汇编程序(Assember),本伪指令下面的内存变量从下一个偶地址单元开始分配。计算机科学与技术系《汇编语言》4.对齐伪指令ALIGN对齐伪指令格式:ALIGNNum其中:Num必须是2的幂,如:2、4、8和16等。伪指令的作用是:告诉汇编程序

,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。例:ALIGN4ALIGN2;EVEN计算机科学与技术系《汇编语言》4.2.7基数控制伪操作:.RADIX表达式;规定无标记数的基数MOVBX,0FFHMOVBX,178.RAD

IX16MOVBX,0FFMOVBX,178D计算机科学与技术系《汇编语言》4.3汇编语言程序格式伪指令语句格式如下:[符号名]伪指令符操作数;注释①符号名:符号名是伪指令语句的一个可选项。②伪指令符:伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪

指令SEGMENT,假定伪指令ASSUME等。③操作数:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。④注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。如:……DATADB10,4,10H;定

义一组字节操作数计算机科学与技术系《汇编语言》4.3.1名字项名字项可以是标号或变量,它们都是用来表示本语句的符号地址。标号:在代码段中定义,后面跟上“:”。它有三种属性,即段、偏移和类型。变量:在数据段或附加段中定义,后

面不跟冒号,它也有三种属性,即段、偏移和类型。①段属性:标号和名字对应存储单元所在段的段地址。②偏移属性:标号和名字对应存储单元所在段的偏移地址。③类型属性:标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间;变量名的类型可以是BYTE(字节)、WORD(字)和D

WORD(双字)等。计算机科学与技术系《汇编语言》4.3.2操作项操作项可以是指令、伪指令或宏指令助记符。对于指令,汇编程序将其翻译成机器指令,对于伪指令汇编程序将根据其所要求的功能进行处理。对于宏指令,则根据定义展开。计算机科学与技术系《汇

编语言》4.3.3操作数项操作数项通常是由常数、寄存器、标号、变量或表达式组成。数值表达式是在汇编过程中能够由汇编程序计算其值的表达式,其组成部分在汇编时就能完全确定。它通常是一些常量的运算组合。常量常量是一个立

即数,直接写在汇编语言语句中,在程序的执行过程中,它不可能发生变化。通常,我们用二进制、八进制、十进制或十六进制来书写常量。例如:10101011B、324Q、1234D、1234H、0abcdH、'AB'等都是常量。计算机科学与技术系《汇编语言》

算术运算符算术运算符包括符号:+(正)、-(负),运算符:+(加)、-(减)、*(乘)、/(除)和MOD(取模)。这些运算符和常量、括号可组成数值表达式。如:120+(321-90)mod3,322*5/32,0abcdH+5,-590等逻辑运算符逻辑运算符包括按位

操作符和移位操作符。具体是:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、SHL(左移位)和SHR(右移位)。这些逻辑运算符和常量、括号可组成数值表达式。如:1SHL3,47HAND0FH,NOT56H等,

它们的计算结果分别为:8,7和0A9H。计算机科学与技术系《汇编语言》【例】用算术运算符进行数值表达式运算。┆NUM1EQU25*4–50;NUM1=50NUM2EQUNUM1/7;NUM2=7NUM3DBNUM1MOD7;NUM3=1VAR1DB1,2,3,4,5VAR2DB‘12345’

NUM4EQUVAR2-VAR1;NUM4=5NUM5EQU0FH┆MOVAL,NUM5SHL4;(AL)=11110000BMOVBL,NUM5SHR4;(BL)=00000000B计算机科学与技术系《汇编语言》关系运算符关系运算符包括符号:EQ(相等)、NE(不等)、LT

(小于)、GT(大于)、LE(小于等于)和GE(大于等于)。这些关系运算符和常量、括号也可组成数值表达式。该表达式的计算结果规定如下:若关系不成立,则该数值表达式的计算结果为0;否则,其结果为0FFFFH。【例】用关系运算符进行数

值表达式运算。NUM1DB10LT5;NUM1=0NUM2DB0AAAAHGT7FFFH;NUM2=0FFFFHMOVAX,‘A‘EQ41H;0FFFFH→AXMOVBX,NUM2LTNUM1;0→BX计算机科学与技术系《汇编语言》数值回送运算符①TYPE运算符格式:TYPE变量或标号功

能:分离出其后变量或标号的类型。如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值。它们之间的关系见下表所示。类型值124-1-2类型BYTEWORDDWORDNEARFAR变量标号例:ARRAYDW1,2,3ADDSI

,TYPEARRAY则加法指令被汇编成:ADDSI,2计算机科学与技术系《汇编语言》②LENGTH运算符格式:LENGTH变量功能:取出变量所含的数据存储单元个数。它返回重复操作符DUP中的重复数。如果有嵌套的DUP,则只返回最外层的重复数;如果没有操作符DUP,则

返回1。【例】取出变量占存储单元个数。DATASEGMENTADB‘ABCDEF’BDW10DUP(1,2DUP(2))CDB3,20DUP(0)DATAENDS┆MOVAX,LENGTHA;1→AXMOVBX,LENGTHB;10→BX

MOVCX,LENGTHC;1→CX计算机科学与技术系《汇编语言》③SIZE运算符格式:SIZE变量功能:取出变量所含的数据存储区大小。其返回值为:LENGTH变量*TYPE变量例如:上例中A、B、C

三变量:SIZEA=LENGTHA*TYPEA=1SIZEB=LENGTHB*TYPEB=20SIZEC=LENGTHC*TYPEC=1计算机科学与技术系《汇编语言》④OFFSET运算符格式:OFFSET变量或标号功能:分离出其后变量或标号的偏移地址。⑤SEG运算

符格式:SEG变量或标号功能:分离出其后变量或标号所在段的段首址。计算机科学与技术系《汇编语言》【例】假设有下面变量定义:FIRSTDD12345678H,0;数据段的变量定义SCOREDW?,12HNAMEDB10DUP(10)…MOVAX,SEGSCORE;代码段的指令MOVBX,SEGNA

MEMOVCX,OFFSETSCOREMOVDX,OFFSETNAME由于SCORE和NAME在同一段中定义,所以,寄存器AX和BX的值是相等的。假设FIRST是数据段的第一个被定义的变量名,它的偏移量为0,SCORE的偏移量为8,因为它要跳

过二个双字,其它如此类推。由于NAME在SCORE之后,且SCORE之后有二个字,占四个字节,所以,DX的值要比CX的值大4。计算机科学与技术系《汇编语言》属性操作符①PTR格式:类型PTR地址表达式在程序中,我

们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等

。例如指令MOV[BX],1H是错误的,可改写成:MOVBYTEPTR[BX],1H或MOVWORDPTR[BX],1H计算机科学与技术系《汇编语言》②段操作符格式:段寄存器:地址表达式功能:用来表示一个标号、变量或地址表达式的段属性。如:MOVAX,ES:[BX+SI]③SHO

RT功能:用来修饰JMP指令中转向地址的属性。如:┆JMPSHORTNEXT┆NEXT:MOVAX,BX计算机科学与技术系《汇编语言》④THIS格式:THIS数据类型功能:它为同一存储单元取另一别名,该别

名可具有其自身的数据属性,但其段地址和偏移量是不变的。其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。如:WBUFFEREQUTHISWORDBUFFERDB20DUP(?)这样就给同一片存储单元,取了二个具有不同数

据类型的变量名。于是,在指令中,引用不同的变量名,就使用其不同的数据属性:如果引用变量名WBUFFER,则是按“字”属性来访问;如果引用变量名BUFFER,则是按“字节”属性来访问。计算机科学与技术系《汇编语言》⑤HIGH和LOW格式

:HIGH常量或地址表达式LOW常量或地址表达式功能:HIGH用来分离出其后16位常量或地址表达式的偏移量的高字节;LOW用来分离出其后16位常量或地址表达式偏移量的低字节。如:HIGH(1234H+100H),LOW1234H它们的选取结果分别为:13H和34H。计算机科学与技术

系《汇编语言》运算符的优先级运算符优先级LENGTH、SIZE、()、[]、<>1:(段超越)2PTR、OFFSET、SEG、TYPE、THIS3HIGH、LOW4*、/、MOD、SHL、SHR5+、-6EQ、NE、LT、LE、GT、GE7NOT8AND

9OR、XOR10SHORT11计算机科学与技术系《汇编语言》4.4汇编语言程序上机过程编辑文本编辑器,如EDIT.COM源程序:文件名.asm汇编汇编程序,如MASM.EXE目标模块:文件名.obj连接连

接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如DEBUG.EXE错误错误错误错误应用程序计算机科学与技术系《汇编语言》开发过程1:源程序的编辑源程序文件要以ASM为扩展名。源程序文件的形成(编辑)可以通过任何一个文本编辑器实

现。本书介绍的MASM程序员工作平台DOS中的全屏幕文本编辑器EDIT,也可其他程序开发工具中的编辑环境。例如:EDITtest01.asm计算机科学与技术系《汇编语言》开发过程2:源程序的汇编汇编是将源程序

翻译成由机器代码组成的目标模块文件的过程。使用提供的汇编程序是MASM.EXE:C:\>MASMtest01.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(test01.obj),否则MASM将给出相应的错误信息。这时应

根据错误信息,重新编辑修改源程序后,再进行汇编。计算机科学与技术系《汇编语言》开发过程3:目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):C:\>LINKtest01.obj如果没有严重错误,LINK将生成一个可执

行文件(test01.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件。计算机科学与技术系《汇编语言》开发过程4:可执行程序的调试经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:C:\>test01(回车)操作系统

装载该文件进入主存,开始运行。如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误。采用DEBUG.EXE调试程序:C:\>DEBUGtest01.exe-U计算机科学与技术系《汇编语言》汇编语言程序的上机过程(1)建立汇编语

言的工作环境为了运行汇编语言程序至少要在磁盘上建立以下文件•编辑程序,如EDIT.EXE•汇编程序,如MASM.EXE•连接程序,如LINK.EXE•调试程序,如DEBUG.COM必要时,还可以建立如CREF

.EXE,EXE2BIN.EXE等文件。计算机科学与技术系《汇编语言》codesegment'code'assumecs:code,ds:code,ss:code,es:codeorg100Hbegin:jmpmainnum1dw1199Hnum2dw1166Hsumd

w?mainprocnearmovax,num1addax,num2movsum,axmovax,4c00hint21hmainendpcodeendsendbegin(2)建立ASM文件例:C>EDITMYFILE.ASM计算机科学与技术系《汇编语言》(3)用MASM程序产生O

BJ文件C>MASMMYFILE.ASMMicrosoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.Objectfilename[MYFILE.OB

J]:Sourcelisting[NUL.LST]:MYFILE.LSTCross-reference[NUL.CRF]:47962+413345Bytessymbolspacefree0WarningErrors

0SevereErrors计算机科学与技术系《汇编语言》C>LINKMYFILE.OBJMicrosoft(R)OverlayLinkerVersion3.64Copyright(C)MicrosoftCorp1

983-1988.Allrightsreserved.RunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:LINK:warningL4021:nostacksegment(4)用LINK程序产生EXE文件(5

)程序的运行在建立了.EXE文件后,就可以直接从DOS执行程序C>MYFILE计算机科学与技术系《汇编语言》第4章作业Page1554.14.54.84.104.144.174.19

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?