版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1
DATASEGMENT;定义数据段
DATA1DB0F8H,60H,0ACH,74H,3BH;被加数
DATA2DB0C1H,36H,9EH,0D5H,20H;加数
DATAENDS;数据段结束
CODESEGMENT;定义代码段
ASSUMECS:CODE,DS:DATA;告诉汇编程序段范围
START:MOVAX,DATA
MOVDS,AX;初始化DS
MOVCX,5
;循环次数送CX
MOVSI,0
;置SI初值为零汇编语言格式第2节汇编语言源程序的格式2
CLC
;清CF标志LOOPER:MOVAL,DATA2[SI];取一个字节加数
ADCDATA1[SI],AL;与被加数相加
INC SI
;SI加1指向下一字节
DECCX
;计数器CX减1
JNZLOOPER
;不等于零转移
MOVAH,4CH
;停止
INT21H
;返回DOSCODEENDS;代码段结束
ENDSTART
;源程序结束,指定起始地址标号汇编语言格式第2节汇编语言源程序的格式3汇编语言源程序标准格式DATASEGMENT…...DATAENDSSTACKSEGMENT…...STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AX ;初始化 …… MOVAH,4CH;返回DOS INT21HCODEENDSENDSTART第2节汇编语言源程序的格式分段结构至少一个代码段段分配:Assume设置DS、ES、SS返回DOS源代码结束4汇编语言语句的类型和组成指令性语句:机器指令相对应,可以产生相应的机器码第2节汇编语言源程序的格式语句格式—例:LOOPER:ADDAH,[SI];加法指示性语句(伪操作指令):不产生机器码。无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。格式——名字伪指令指示符操作数,操作数;注释例:DATA1DB0F8H,60H,0ACH,74H语句格式—名字
伪指令操作符
操作数,操作数;注释5助记符和伪操作指令助记符:MOV,ADD,….指示性(伪指令)操作符:DB,DW,SEGMENT,ENDS,ASSUME,END,….名字和标号:保留字第2节汇编语言源程序的格式6操作数汇编语言中的操作数,可以是常数、变量、标号、寄存器、存储器或表达式。常数是固定值,没有属性,是确定的数据。二进制:字母“B”结尾,例00110100B;八进制:字母“Q”或“O”结尾,例1037O、2370Q;十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2;十六进制:字母“H”结尾,“A~F”开头时,前面加0,例56H、0A7F2H;字符串:用单引号‘’括起来,机内存放的是各字符的ASCII码。例‘ABC’。第2节汇编语言源程序的格式7操作数变量第2节汇编语言源程序的格式变量通常指存放在存储单元中的值,程序运行中可以修改。所有的变量都具有三个属性。⑴段值(SEGMENT)⑵段内偏移地址(OFFSET)⑶类型(TYPE)8操作数标号第2节汇编语言源程序的格式
标号是可执行指令语句的地址的符号表示,可作为程序转向的目标地址。具有三个属性。(1)段值(SEGMENT)(2)段内偏移地址(OFFSET)(3)类型(TYPE)
类型NEAR,表示近标号,只能实现段内转移或调用;类型FAR,表示远标号,可以实现段间转移或调用。注意:若标号后面紧跟冒号,表示隐含此标号距离属性为NEAR,也可用伪指令将此属性改为FAR。9操作数表达式表达式:运算对象+运算符。在汇编时进行运算,运算结果作为语句中的操作数。运算对象:常数、变量、标号。得到的运算结果可以是一个常数字,也可以是一个存储器的地址。MASM中6类运算符:算术运算符逻辑运算符关系运算符分析运算符合成运算符其它运算符
第2节汇编语言源程序的格式10操作数MASM的表达式中的运算符(1)11操作数MASM的表达式中的运算符(2)12操作数MASM的表达式中的运算符(3)13运算符之一:算术运算符+、-、*、/(除,只取除法运算结果之商)、MOD(模,只取除法运算结果之余数)注意:所有的算术运算符均可以进行数据运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加/减某一个数字量。第2节汇编语言源程序的格式例:数组ARRAY定义如下
ARRAYDB1,2,3,4,5,6,7,8TRYDB20指令为:MOVAX,30*5MOVCX,(TRY-ARRAY)汇编时,计算表达式形成如下指令:MOVAX,MOVCX,150814运算符之一:算术运算符第2节汇编语言源程序的格式例汇编程序指令格式如下:
DAEQU300MOVAX,DA-80MOVBX,DAMOD100MOVCX,DA/100MOVDH,01100100BSHR2
汇编时,计算表达式形成指令为:
DAEQU300MOVAX,
MOVBX,
MOVCX,
MOVDH,2200319H15运算符之二:逻辑运算符第2节汇编语言源程序的格式包括4种:AND(与)、OR(或)、NOT(非)、XOR(异或)注意:按位运算,只能对常数进行运算,得到结果也是常数。例MOVAL,NOT0FFHMOVBL,8CHAND73HMOVAH,8CHOR73H
汇编时,计算表达式形成指令为:
MOVAL,
MOVBL,
MOVAH,
000FFH16运算符之三:关系运算符第2节汇编语言源程序的格式包括6种:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。注意:关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址;若结果为真,输出全是1,即0FFH或0FFFFH;若结果为假,输出全是0。例MOVAX,10HGT16ADDBL,6EQ0110BMOVCX,((PORTLT5)AND100)OR((PORTGE5)AND200)汇编时,计算表达式形成指令为:
MOVAX,
ADDBL,
MOVCX,;当端口<5时00FFH100172.SEG【格式】SEG变量或标号
【功能】取变量或标号的段基值。例
MOVAX,SEGM1MOVDS,AX设:M1是段名为DATA的数据段中的一个变量名;如DATA段从0500H开始,上述指令把0500H作为立即数在连接时插入指令,汇编后指令变为:MOVAX,MOVDX,AX运算符之四:分析运算符第2节汇编语言源程序的格式0500H183.TYPE【格式】TYPE变量或标号
【功能】加在变量前,返回变量的类型属性;加在标号前,返回标号的距离属性。运算符之四:分析运算符第2节汇编语言源程序的格式TYPE运算符返回值19运算符之四:分析运算符第2节汇编语言源程序的格式例A1DB20H,30HA2DW0438HA3DD?L1:MOVAH,TYPEA1MOVBH,TYPEA2ADDAL,TYPEA3MOVBL,TYPEL1
汇编时,计算表达式形成指令为:
MOVAH,MOVBH,ADDAL,MOVBL,1240FFH204.LENGTH【格式】LENGTH变量
【功能】当变量中使用DUP时,LENGTH返回此变量数,对其它变量则返回1。运算符之四:分析运算符第2节汇编语言源程序的格式例M1DW100DUP(?)M2DW1,2,3M3DB‘A,B,C,D‘MOVCX,LENGTHM1MOVBL,LENGTHM2MOVAL,LENGTHM3
汇编时,计算表达式形成指令为:
MOVCX,
;返回变量所包含的100个字单元
MOVBL,MOVAL,0FFH11215.SIZE【格式】SIZE变量
【功能】加在变量前,返回该变量分配的总字节数。SIZE=LENGTH*TYPE。运算符之四:分析运算符第2节汇编语言源程序的格式例对上例定义的M1,M2,M3MOVCX,SIZEM1MOVBL,SIZEM2MOVAL,SIZEM3
汇编时,计算表达式形成指令为:
MOVCX,;返回变量所包含的200个字单元MOVBL,MOVBL,2002122运算符之五:合成运算符1.PTR第2节汇编语言源程序的格式【格式】类型/距离PTR变量或标号【功能】将PTR左边的类型属性赋给右边的变量或标号。注意:PTR本身不分配存储单元,仅对已分配的存储单元赋予新的属性;常与类BYTE、WORD、NEAR、FAR等连用。23运算符之五:合成运算符第2节汇编语言源程序的格式例N1DB15H,36HN2DW1122H,3344HLO:MOVAX,WORDPTRN1;使N1转换成AX类型
MOVBL,N2;使N2转换成BL类型例MOV[BX],10H
分析:将立即数送入BX间址指定的存储单元,可以通过PTR指明是存入字节单元还是字单元。
MOVBYTEPTR[BX],10H;MOVWORDPTR[BX],10H;也可用PTR来改变距离属性,
JMPFARPTRLOP
在JMP语句中将标号LOP改为FAR,使JMP指令在其它代码段中也可以用,实现段间转移。BYTEPTR
242.THIS第2节汇编语言源程序的格式【格式】变量/标号EQUTHIS类型/距离【功能】将EQUTHIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。(同一段存储空间)【例】FIRSTEQUTHISBYTETABLEDW200DUP(?)FIRST的偏移地址值与TABLE的偏移地址值相同,区别在于FIRST变量为字节类型,TABLE为字类型。运算符之五:合成运算符25运算符之五:合成运算符3.SHORT第2节汇编语言源程序的格式【格式】SHORT
标号【功能】说明转移类指令中转向地址的属性为短转移:-128~+127之间例L1:JMPSHORTL2………L2:MOVAX,026运算符之六:其它运算符超越运算符“:”【格式】段前缀:变量或地址表达式【功能】表示某个变量或地址被修改。例:MOVAX,ES:[BX]HIGH和LOW【格式】HIGH/LOW变量或标号【功能】HIGH和LOW称为字节分离运算符。例K1EQU0ABCDHK2EQU1234HMOVAH,HIGHK1MOVBL,LOWK2汇编时,计算表达式形成指令为:MOVAH,MOVBL,第2节汇编语言源程序的格式0ABH34H27
圆括号():
()中的运算符具有最高优先权。方括号[]:方括号主要用来表示地址表达式或多重变量的下标值。尖括号<>,及圆点·
在结构中专用。
MASK和WIDTH
在记录中专用。运算符之六:其它运算符第2节汇编语言源程序的格式28数据定义伪指令【格式1】变量名助记符操作数,操作数…;注释【格式2】变量名助记符nDUP(操作数,操作数…);注释【功能】指定的存储单元,以分配存储空间或存入操作数。
变量名——用符号表示,可以省略,后面不跟冒号。汇编时将变量助记符后的第一个字节的偏移地址作为它的符号地址。
助记符——所用伪指令助记符主要有:
DB:用来定义字节;DW:用来定义字;DD:用来定义双字;DQ:用来定义四个字;DT:用来定义十个字节;
操作数——操作数可以是常数,字符串,变量,表达式等。多个操作数之间必须用逗号分开;格式2中,n必须是正整数。
注释——说明伪指令的功能,注释前必须带分号“;”。第3节伪操作命令29数据定义伪指令第3节伪操作命令例操作数是常数或表达式:
DA1DB10H,52H
;变量DA1中装入10H,52HDA2DW1122H,34H
;变量DA2中装入22H,11H,34H,00HDA3DD0A0H,0FFEEH
;变量DA3中装入A0H,00H,00H,;00H,EEH,FFH,00H,00H30数据定义伪指令第3节伪操作命令例操作数是字符串
FIRSTDB‘HELLO’;字符串‘HELLO’的ASCII码装入FIRST;开始的存储单元SECONDDW‘OK’;字符串‘OK’的ASCII码装入SECOND开始的;存储单元;只能定义两个字符,即多于2字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论