资源描述:
《80x86汇编语言电子教案(4-汇编语言程序格式)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、4.3汇编语言程序格式一语句的种类和格式汇编语言源程序由语句按汇编语言规定的格式书写而成1语句的种类指令语句被汇编程序翻译成机器指令伪指令语句指导汇编程序如何汇编源程序包括符号的定义变量的定义段的定义等宏指令语句宏汇编语言中的特殊语句用宏指令引出例下面给出的是数据定义及存储器分配伪指令例子DATA_WORDDW100,100HDATA_BYTEDB100DUP(?)MESS1DB‘AB’MESS2DW‘AB’下面是完成一定功能的程序段例:STR中有无空格字符有则将第一个空格的序号送至AX否则将-1送至AX……MOVCX,
2、STR_LENGTHMOVSI,-1MOVAL,20HNEXT:INCSICMPAL,STR[SI]LOOPNZNEXT;当(CX)0,ZF=0时循环JZYES;退出循环是因为ZF=1吗MOVAX,-1JMPEXITYES:MOVAX,SIEXIT:……2语句的格式指令语句[标号:]指令助记符[操作数…,操作数][;注释]伪指令语句[名字]伪指令定义符[参数,…,参数][;注释]ò标号定义是以冒号结束的合法标识符标识指令地址ò名字包括符号名变量名段名过程名等为合法的字符串合法的字符串1字母AZ数字09专用字符·–可以使用
3、2数字不能出现在第一个位置其余均可3·只能用在第一个位置4字符数不受限但只有前31个字符有效指令语句[标号:]指令助记符[操作数…,操作数][;注释]伪指令语句[名字]伪指令定义符[参数,…,参数][;注释]ò指令语句中操作数由各种寻址方式表示由逗号隔开ò伪指令语句中参数用于说明伪指令的操作对象格式由具体的伪指令确定操作数或参数可以是常数寄存器标号变量或由它们组成的表达式构成汇编语言中表达式分为数值表达式和地址表达式汇编语言中表达式分为数值表达式和地址表达式一数值表达式数值表达式的各组成部分必须在汇编时就能完全确定1常数
4、常数是指那些在汇编过程中已经有确定数值的量它主要用作指令语句中的立即操作数相对寻址中的位移量DISP或在伪指令语句中给变量赋初值常数可以分数值常数和字符串常数两类数值常数以各种进位制数值形式表示以后缀字符区分各种进位制后缀字符H表示十六进制O表示八进制B表示二进制D表示十进制十进制常省略后缀字符串常数用引号括起来的一个或多个ASIIC码字符汇编语言常数表示实例汇编符号表示表示常数例字符集nB二进制常数01001101B01nO八进制常数1034O0,1,…,7n或nD十进制常数76或76D0,1,……,9nH十六进制常数
5、0aH0,1,…,9,A,B,C,D,E,F‘xxx….x’字符串常数‘AbCD’ASCII码注意ò十六进制数必须以数字开头以区别标识符例98H0A9Hò字符串常数在计算机内字符以ASCII码形式存放如字符串‘ABC’等效为41H42H43H一组数值常数如字符串‘179’等效为31H37H39H一组数值常数2常数表达式将数据常量和字符常量通过运算符组合起来得到一个值ò支持操作1算术运算+,-,*,/,MOD2关系运算EQ等于,NE不等于,LT小于,GT大于,LE小于等于,GE大于等于3逻辑与移位运算AND,OR,XOR,
6、NOT,SHL,SHR4数值回送运算TYPELENGTHSIZEOFFSETSEG等5属性操作符PTR段前缀SHORTTHISHIGH,LOW,HIGHWORD,LOWWORD等MASM6.0支持ò常数表达式的值类型不确定可出现在常数能用的任何地方汇编语言中表达式分为数值表达式和地址表达式二地址表达式地址表达式表示存储器操作数的地址可以是所有存储器操作数的寻址表达式例MOVAXVARW4变量名VARW是一个存储器地址,VARW4是一个地址表达式注意操作数寻址中变量名用来指示操作数的位置因此它是一个存储器地址汇编时也许不能
7、确定VARW的值内容但其偏移地址是确定的例VARW[BX]VARW[BX+DI]VARW[BX][DI]等都是地址表达式指令语句[标号:]指令助记符[操作数…,操作数][;注释]伪指令语句[名字]伪指令定义符[参数,…,参数][;注释]ò注释说明指令或程序的功能便于阅读和理解程序将被汇编程序忽略ò通常程序中一个文本行可以书写一条语句下面我们将详细地讲述出现在操作数参数中的操作符项二表达式中的操作符1算术运算+,-,*,/,MOD2逻辑与移位运算AND,OR,XOR,NOT,SHL,SHR3关系运算EQ等于,NE不等于,L
8、T小于,GT大于,LE小于等于,GE大于等于4数值回送运算TYPELENGTHSIZEOFFSETSEG等5属性操作符PTR段前缀SHORTTHISHIGH,LOW,HIGHWORD,LOWWORD等1算术运算+,-,*,/除,MOD取余例把首地址为BLOCK的字数组的第6个字送入DXMOVDXBLOCK+6-1*2