收藏 分销(赏)

汇编语言设计.pptx

上传人:w****g 文档编号:4163814 上传时间:2024-08-08 格式:PPTX 页数:74 大小:416.42KB
下载 相关 举报
汇编语言设计.pptx_第1页
第1页 / 共74页
汇编语言设计.pptx_第2页
第2页 / 共74页
点击查看更多>>
资源描述
第四章第四章汇编语言程序设计汇编语言程序设计湖州师范学院2024/8/8周四信息工程学院1v宏汇编使用的语句分三类指令性语句伪指令语句/指示性语句宏指令语句4.1.2 MASM汇编语言2024/8/8 周四信息工程学院2指令性语句指令性语句:与机器指令相对应,可译成目标代码(机器指令代码)。语句格式:语句格式:【标号:标号:标号:标号:】【前缀前缀前缀前缀】指令助记符指令助记符指令助记符指令助记符 【操作数,操作数操作数,操作数操作数,操作数操作数,操作数】【;注释;注释;注释;注释】标号:可有可无,可有可无,指令语句的符号地址,后面必须紧跟冒号必须紧跟冒号“:”。注注意意:标号可使用字母、数字和特殊符号;首字符必须是字母或特殊符号;最大长度31个字符;可以省略,经常作为表示转移的地址。指令助记符:指令名称的代表符号,指出指令的操作类型。可译成机器码;不可省略,是关键字。操作数:参与指令运算的数据。可以有一个、多个操作数或无操作数;多个操作数之间用逗逗号号“,”隔开,操作数与指令助记符之间用“空格空格”隔开。操作数可以是常数、变量、标号、寄存器名或表达式。注释:说明指令或程序的功能,可省略。注释前加分号分号“;”。1、指令性语句、指令性语句2024/8/8 周四信息工程学院3伪伪指指令令语语句句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。语句的格式:语句的格式:【名字】伪指令指示符 【操作数,操作数】【;注释】名字:名字后不允许带冒号不允许带冒号“:”,但可以省略可以省略。通常是变量名、段名、过程名、符号名等。伪指令指示符:汇编程序MASM规定的符号。常用的有变变量量定定义义语语句句(DB、DW),符符号号定定义义语语句句(EQU、),段段定定义义语语句句(SEGMENTEND),段段分分配配语语句句(ASSUME),过过程程定定义义语句(PROCENDP)等。操作数:不同伪指令有不同要求。操作数可以是常数、变量、字符串、表达式常数、变量、字符串、表达式等。注释:功能和使用与指令性语句相同。2、伪指令语句、伪指令语句/指示性语句指示性语句2024/8/8 周四信息工程学院44.2.1 汇编语言描述规范1、标识符、标识符字符数为131个第一个字符必须是字母、“?”、“”、“_”第二个字符以后可以使字母、数字、“?”、“”或“_”不能使用系统专用的助记符、伪指令、寄存器等具有三个属性。(1)段属性:定义标识符所在段。(2)偏移量属性:定义标识符所在段的偏移量。(3)类型属性:标号分为:类型NEAR,表示此标号为近标号,只能实现段内转移或调用;类型FAR,表示此标号为远标号,可以实现段间转移或调用。符号名中:字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)。2024/8/8 周四信息工程学院52、操作数、操作数(1)常数是固定值,没有属性,是确定的数据。二进制:字母“B”结尾,例00110100B;八进制:字母“Q”或“O”结尾,例1037O、2370Q;十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2;十六进制:字母“H”结尾,“AF”开头时,前面加0,例56H、0A7F2H;字符串:用单引号括起来,机内存放的是各字符的ASCII码。例ABC。2024/8/8 周四信息工程学院6(2)变量变量通常指存放在存储单元中的值,程序运行中可以修改。所有的变量都具有三个属性。段值段值(SEGMENT)(SEGMENT):指变量所在段的段基址。段内偏移地址段内偏移地址(OFFSET)(OFFSET):指变量所在地址与所在段首地址之间的地址偏移字节数。类型类型(TYPE)(TYPE):指变量中每个元素所包含的字节数:字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)等。(3)标号:标号是可执行指令语句的地址的符号表示,可作为程序转向的目标地址。具有三个属性。(1)(1)段值段值(SEGMENT)(SEGMENT):标号所在段的段基址。(2)(2)段内偏移地址段内偏移地址(OFFSET)(OFFSET):标号所在地址与所在段的段首址之间的偏移地址字节数。(3)(3)类型类型(TYPE)(TYPE):2024/8/8 周四信息工程学院7(7)表达式表达式:运算对象+运算符。在汇编时进行运算,运算结果作为语句中的操作数。运算对象:常数、变量、标号。得到的运算结果可以是一个常数字,也可以是一个存储器的地址。MASM中6类运算符:如表4-1所示。算术运算符(ArithmeticOperators)逻辑运算符(LogicalOperators)关系运算符(RelationalOperators)数值返回运算符(Value-ReturningOperators)修改属性运算符(ModifingattributeOperators)其它运算符(otherOperators)2024/8/8 周四信息工程学院8表表41 MASM的表达式中的运算符(的表达式中的运算符(1)类型类型符号符号名称名称运算结果运算结果算术运算符算术运算符*/MODSHLSHR加法加法减法减法乘法乘法除法除法模除模除左移左移右移右移和和差差乘积乘积商商余数余数左移后二进制数左移后二进制数右移后二进制数右移后二进制数逻辑运算符逻辑运算符ANDORXORNOT与运算与运算或运算或运算异或运算异或运算非运算非运算逻辑与结果逻辑与结果逻辑或结果逻辑或结果逻辑异或结果逻辑异或结果逻辑非结果逻辑非结果2024/8/8 周四信息工程学院9表表表表4 41 MASM1 MASM的表达式中的运算符(的表达式中的运算符(的表达式中的运算符(的表达式中的运算符(2 2)类型类型符号符号名称名称运算结果运算结果关系运算符关系运算符EQNELTLEGTGE相等相等不等不等小于小于小于等于小于等于大于大于大于等于大于等于结果为真输出全结果为真输出全“1”结果为假输出全结果为假输出全“0”数值返回数值返回OFFSETSEGTYPELENGTHSIZE返回偏移地址返回偏移地址返回段基址返回段基址返回元素字节数返回元素字节数返回变量单元数返回变量单元数返回变量总字节数返回变量总字节数偏移地址偏移地址段基址段基址字节数字节数单元数单元数总字节数总字节数2024/8/8 周四信息工程学院10表表表表4 41 MASM1 MASM的表达式中的运算符(的表达式中的运算符(的表达式中的运算符(的表达式中的运算符(3 3)类型类型符号符号名称名称运算结果运算结果修改属性修改属性段寄存器名段寄存器名PTRTHISHIGHLOWSHORT段前缀段前缀修改类型属性修改类型属性制定类型制定类型/距离属性距离属性分离高字节分离高字节分离低字节分离低字节短转移说明短转移说明修改段修改段修改后类型修改后类型指定后类型指定后类型高字节高字节低字节低字节128127字节字节间转移间转移其他运算符其他运算符()().MASKWIDTH园括号园括号方括号方括号点运算符点运算符尖括号尖括号记录位图记录位图记录宽度记录宽度改变运算符优先级改变运算符优先级下标或间接寻址下标或间接寻址连接结构与变量连接结构与变量修改变量修改变量位图形位图形记录记录/字段位数字段位数2024/8/8 周四信息工程学院11包括包括包括包括7 7种:种:种:种:十、一、*、/(除,只取除法运算结果之商)、MOD(模,只取除法运算结果之余数)、SHL(左移,左移1位相当于乘2)、SHR(右移,右移1位相当于除2)。注意:注意:注意:注意:所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加减某一个数字量。一、算术运算符2024/8/8 周四信息工程学院12例4.3汇编程序指令格式如下:DAEQU300MOVAX,DA80MOVBX,DAMOD100MOVCX,DA/100MOVDH,01100100BSHR2汇编时,计算表达式形成指令为:DAEQU300MOVAX,220MOVBX,0MOVCX,3MOVDH,19H2024/8/8 周四信息工程学院13包括包括4种:种:AND(与)、OR(或)、NOT(非)、XOR(异)或)注意:注意:注意:注意:按位按位按位按位运算的,只能对常数常数进行运算,得到结果也是常数。二、逻辑运算符2024/8/8 周四信息工程学院14例4.4MOVAL,NOT0FFHMOVBL,8CHAND73HMOVAH,8CHOR73HMOVCH,8CHXOR73H汇编时,计算表达式形成指令为:MOVAL,0MOVBL,0MOVAH,0FFHMOVCH,0FFH注意:逻辑运算符不要与逻辑指令助记符混淆。2024/8/8 周四信息工程学院15包括包括6种:种:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。意:意:意:意:关系运算符的两两个个操操作作数数必必须须是是数数据据,或是同同一一段段内内的的两两个个存储单元的地址;地址;若结果为真,输出全是l,即0FFH或0FFFFH;若结果为假,输出全是0。三、关系运算符例4.5MOVAX,10HGT16ADDBL,6EQ0110B汇编时,计算表达式形成指令为:MOVAX,0ADDBL,0FFH2024/8/8 周四信息工程学院16数值返回运算符也称作分析运算符分析运算符分析运算符分析运算符(Analytic opertors)(Analytic opertors)(Analytic opertors)(Analytic opertors)。包括包括包括包括5 5 5 5种:种:种:种:OFFSETOFFSETOFFSETOFFSET、SEGSEGSEGSEG、TYPETYPETYPETYPE、LENGTHLENGTHLENGTHLENGTH、SIZESIZESIZESIZE 。功能:功能:加在变变量量或或标标号号前前,返返回回运算对象的某某个个参参数数值值。例如偏移地址值、段地址值、类型属性、变量包含的单元数等。1 1 1 1OFFSETOFFSETOFFSETOFFSET:格式:格式:格式:格式:OFFSETOFFSETOFFSETOFFSET 变量或标号变量或标号功能:功能:功能:功能:返回标号或变量的返回标号或变量的偏移地址值偏移地址值偏移地址值偏移地址值。例4.6若DA1为数据段中一个变量名MOVBX,OFFSETDA1;等价于LEABX,DA1四、数值返回运算符2024/8/8 周四信息工程学院172 2SEGSEG:格式:格式:格式:格式:SEG SEG 变量或标号变量或标号功能:功能:功能:功能:取变量或标号的取变量或标号的段基值段基值段基值段基值。例4.7MOVAX,SEGM1MOVDX,AX解:设:M1是段名为DATA的数据段中的一个变量名;如DATA段从0500H开始,上述指令把0500H作为立即数在连接时插入指令;汇编后指令变为:MOVAX,0500HMOVDX,AX2024/8/8 周四信息工程学院183 3TYPETYPE:格式:格式:格式:格式:TYPETYPE 变量或标号变量或标号功能:功能:功能:功能:加在加在变量前变量前变量前变量前,返回变量的,返回变量的类型属性类型属性类型属性类型属性;加在加在标号前标号前标号前标号前,返回标号的,返回标号的距离属性距离属性距离属性距离属性。如下表所示。如下表所示。TYPE 运算符返回值运算符返回值类型返回值 变量DBDWDDDQ1248标号NEARFAR-1 FFH-2 FEH2024/8/8 周四信息工程学院19例4.8A1DB20H,30HA2DW0438HA3DD?L1:MOVAH,TYPEA1MOVBH,TYPEA2ADDAL,TYPEA3MOVBL,TYPEL1汇编时,计算表达式形成指令为:MOVAH,1MOVBH,2ADDAL,4MOVBL,0FFH2024/8/8 周四信息工程学院204 4LENGTHLENGTH:格式:格式:格式:格式:LENGTHLENGTH 变量变量功功功功能能能能:当当变变量量中中使使用用DUPDUP时时时时,LENGTHLENGTH返返回回此此变变量量所所包包含含的的单单单单元数元数元数元数,对,对其它其它其它其它变量则变量则返回返回返回返回1 1。例4.9M1DW100DUP(?)M2DW1,2,3M3DBA,B,C,DMOVCX,LENGTHM1MOVBL,LENGTHM2MOVAL,LENGTHM3汇编时,计算表达式形成指令为:MOVCX,100;返回变量所包含的100个字单元MOVBL,1MOVAL,12024/8/8 周四信息工程学院215 5SIZESIZE:格式:格式:格式:格式:SIZE SIZE 变量变量功能:功能:功能:功能:加在加在变量前变量前变量前变量前,返回该变量包含的,返回该变量包含的总字节数总字节数总字节数总字节数。SIZESIZELENGTH*TYPELENGTH*TYPE例4.10 M1DW100DUP(?)M2DW1,2,3M3DBA,B,C,DMOVCX,SIZEM1ADDBL,SIZEM2MOVAL,SIZEM3汇编时,计算表达式形成指令为:MOVCX,200;返回变量所包含的200个字单元MOVBL,2MOVAL,12024/8/8 周四信息工程学院22修改属性运算符也称作修改属性运算符也称作合成运算符合成运算符(Synthetic operators)(Synthetic operators)。包括包括包括包括6 6种:种:种:种:段操作符、PTR、THIS、HIGH、LOW、SHORT功能:功能:功能:功能:在程序运行过程中,修改变变量量或标号的属性,包括段属性、偏移地址属性、类型属性等。1 1段操作符:段操作符:段操作符:段操作符:格式:段前缀:格式:段前缀:格式:段前缀:格式:段前缀:变量或地址表达式变量或地址表达式功能:功能:功能:功能:表示某个变量或地址被修改到表示某个变量或地址被修改到指定的段寄存器指定的段寄存器指定的段寄存器指定的段寄存器提供的段基址中。提供的段基址中。例4-11MOVAX,ES:BX五、修改属性运算符2024/8/8 周四信息工程学院232 2PTRPTR:格式:格式:格式:格式:类型类型/距离距离 PTRPTR 变量或标号变量或标号功能:功能:功能:功能:将将PTRPTR左边的类型属性左边的类型属性赋给赋给右边的变量或标号右边的变量或标号。注意:注意:注意:注意:PTRPTR本身本身不分配不分配存储单元,仅对已分配的存储单元存储单元,仅对已分配的存储单元赋予新的属性赋予新的属性;常与类常与类BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR、FARFAR等连用。等连用。2024/8/8 周四信息工程学院24例4.12N1DB15H,36HN2DW1122H,3344HLO:MOVAX,WORDPTRN1;使N1转换成AX类型MOVBL,BYTEPTRN2;使N2转换成BL类型例 MOV BX,10H分析:将立即数送入BX间址指定的存储单元,可以通过PTR指明是存入字节单元还是字单元。MOVBYTEPTRBX,10H;BX10H MOVWORDPTRBX,10H;BX,BX+10010H也可用PTR来改变距离属性,JMPFARPTRLOOP在JMP语句中将标号LOOP改为FAR,使JMP指令在其它代码段中也可以用,实现段间转移。2024/8/8 周四信息工程学院253 3THISTHIS:格式:格式:格式:格式:变量变量/标号标号 EQU THIS EQU THIS 类型类型/距离距离功功功功能能能能:将EQU THIS右边的类型/距离属性,赋赋给给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。例4.13FIRST EQU THIS BYTETABLE DW 200 DUP(?)FIRST的偏移地址值与TABLE的偏移地址值相同,区别在于FIRST变变量量为字节类型,TABLE为字类型。此功能类似于LABEL伪指令的功能。2024/8/8 周四信息工程学院264 4SHOTSHOT:格式:格式:格式:格式:SHORTSHORT 标号标号功能:功能:功能:功能:说明转移类指令中转向地址的属性为短转移:说明转移类指令中转向地址的属性为短转移:-128-128+127+127之间。之间。例L1:JMPSHORTL2L2:MOVAX,05 5HIGHHIGH和和和和LOWLOW:格式:格式:格式:格式:HIGHHIGHLOWLOW 符号常量符号常量功能:功能:功能:功能:HIGHHIGH和和LOWLOW称为称为字节分离运算符字节分离运算符字节分离运算符字节分离运算符。HIGHHIGH从中分离出高位字节,从中分离出高位字节,LOWLOW分离出低位字节。分离出低位字节。2024/8/8 周四信息工程学院27例4.16 K1EQU0ABCDHK2EQU1234HMOVAH,HIGHK1MOVBL,LOWK2汇编时,计算表达式形成指令为:MOVAH,0ABHMOVBL,34H2024/8/8 周四信息工程学院281 1圆括号圆括号圆括号圆括号()():()中的运算符具有最高优先权最高优先权。2 2方括号方括号方括号方括号 :方括号主要用来表示存储器的偏移地址存储器的偏移地址。六、其它运算符2024/8/8 周四信息工程学院29 表表表表达达达达式式式式的的的的计计计计算算算算原原原原则则则则:同同级级运运算算符符从从左左到到右右的的,圆圆括括号号()可可改改变优先级次序。运算符的优先级别如下表所示。变优先级次序。运算符的优先级别如下表所示。七、优先级优先级运算符12345678910(),LENGTH,WIDTH,SIZE,MASKPTR,OFFSET,SEG,TYPE,THIS,CS:,DS:,ES:,SS:HIGH,LOW*,/,MOD,SHL,SHR+,-EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT2024/8/8 周四信息工程学院304.2.3 模式定义伪指令格式:格式:格式:格式:.MO.MODEL DEL 存储模式存储模式功功功功能能能能:定定义义程程序序的的规规模模,也也就就是是选选择择程程序序在在内内存存中中存存储储模模式式的的大大小小。具有7种模式。(1)TINY:只有1个逻辑段。产生COM程序(2)SMALL:可有1个代码段和1个数据段(3)COMPACT:可以有1个以上数据段,但是只有1个代码段(4)MEDIUM:可以有1个以上代码段,但是只有1个数据段(5)LARGE:数据段和代码段均可以有1个以上(6)HUGE:允许数据段大于64KB,可以有多个数据段和多个代码段(7)FLAT:允许有一个长达512KB的段,用于存储代码数据 注意注意对于简化段定义,模式定义不能缺少2024/8/8 周四信息工程学院314.2.4 段定义伪指令段定义段定义语句进行段定义,段分配段分配语句明确段和段寄存器之间的关系。1段定义语句SEGMENTENDS格式:格式:格式:格式:段名段名 SEGMENT SEGMENT【定位类型定位类型】【】【组合类型组合类型】【】【字长选择字长选择】【】【类名类名】逻辑段内容 段名段名 ENDSENDS功能:功能:功能:功能:将一个逻辑段定义成一个整体。段段名名是逻辑段的标识符,不可省略。它确定了逻辑段在存储器中的地址,SEGMENT和ENDS前的段名必须相同相同相同相同。SEGMENTENDSSEGMENTENDS是段定义的伪指令助记符,任何一个逻辑段必须以SEGMENT开始,ENDS结束,不可省略,并且必须成对出现,两者之间是本逻辑段的内容。2024/8/8 周四信息工程学院32定位类型定位类型(Align Type)(Align Type)定位该段起始地址。定位类型参数主要有下面4种。PARAPARA指定定位段的起始地址必须在节的整数边界,参数缺省时,就当成PARA。BYTEBYTE指定该段起始地址定位在存储单元的任何字节地址。WORDWORD指定该段起始地址定位在字的边界,即段的首地址必须是偶数。PAGEPAGE指定该段起始地址定位在页的边界,即段的首地址必须是256的整数倍。2024/8/8 周四信息工程学院33组合类型组合类型(Combine Type)(Combine Type)决定逻辑段之间的组合方式,告诉连接程序本段与其他段的关系,主要参数有6种。NONENONE该段与其它同名段不连接,各段独立各段独立,可作为缺省参数。PUBLICPUBLIC该段与其它同名段连接时,由由低低地地址址到到高高地地址址连连接接,组成一个逻辑段,连接次序由连接命令指定,连接时满足定位类型要求。COMMONCOMMON该段在连接时与其它模块中的同名段有相同的起始地址,采用覆覆盖盖的的方方式式在存储器中存放,连接长度为各分段中最大长度。2024/8/8 周四信息工程学院34ATAT表表达达式式定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。通常各逻辑段在存储器中的位置由系统自动分配,当要求某逻辑段在指定节的边界在指定节的边界上时,就要用AT参数来实现。ATAT不能指定代码段不能指定代码段。STACKSTACK指指定定该段为堆堆栈栈段段,此参数在堆栈段中不不可可省省略略,多个模块只需设置一个堆栈段,各个模块中的堆栈段采用覆覆盖盖方方式式组组合合。容量为各个模块中所设置的最大堆栈段容量。MEMORYMEMORY定位该段与其它模块中的同名段有相同的首地址,采用覆覆盖盖方方式式在存储器中组合连接,其功能与COMMON参数类似,区别是第一个带带MEMORYMEMORY参参数数的的逻逻辑辑段段复复盖盖在在其它同名段的最最上上层层,其它带此参数的同名段按照COMMON方式处理。2024/8/8 周四信息工程学院35类名类名(C1ass Name)(C1ass Name)汇编程序连接时将所有分类名相同分类名相同的逻辑段组成一个段组组成一个段组。分类名分类名可选择不超过不超过4040个字符的名称个字符的名称。注意:注意:SEGMENT后面带带有有的的三三个个参参数数必须按格式中规规定定的的先先后后次次序序排列,但各段仍然是独立的,分类名必须用单引号 括起来。2024/8/8 周四信息工程学院362段分配语句(ASSUME):将逻辑段定义逻辑段定义成代码段、数据段、堆栈段、附加段。用户可以设置多个逻辑段,但只允许只允许4 4个逻辑段同时有效个逻辑段同时有效。格式:格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名功能:功能:定义4个逻辑段,指明段和段寄存器的关系。ASSUMEASSUME为伪指令助记符,放在代码段的开始,不可省略不可省略。说明当前代码段、数据段、堆线段、附加段4个段如何定义。段名必须是用段定义语句SEGMENTENDS定义过的名字。ASSUME NOTHINGASSUME NOTHING取消前面由ASSUME所指定的段寄存器。例:ASSUME ES DS:NOTHING 2024/8/8 周四信息工程学院37注注 意:意:代码段和数据段必须分配代码段和数据段必须分配,附加段可以省略。ASSUMEASSUME伪伪指指令令只将代代码码段段的的段段基基址址自自动动装装入入CSCS寄存器中,而不不能能自自动动把把其其它它段段基基址址装入相应的段寄存器中,所以在代码段的开始要有一段初始化初始化程序完成这一工作。堆堆栈栈段段:将段段基基址址送送入入SSSS寄寄存存器器外,还要将栈栈顶顶偏偏移移地地址址置置入入堆堆栈栈指指示示器器SPSP中。(只要定义堆栈段时使用了关键字STACK,连接程序会自动给SS和SP赋值,无需人工初始化。)2024/8/8 周四信息工程学院383段寄存器的装入:不不能能把把各各段段的的段段基基值值装装入入相相应应段段寄寄存存器器中中,只只有有将将段段基基址址装装入入相相应应的段寄存器中的段寄存器中,该段才被定义成当前段,才可以被处理器访问。,该段才被定义成当前段,才可以被处理器访问。DSDS和和ESES装入装入CODESEGMENTASSUMECS:CODE;定义CODE为代码段ASSUMEDS:DATA_DS;定义DATA_DS为数据段ASSUMEES:DATA_ES;定义DATA_ES为附加段START:MOVAX,DATA_DS;MOVDS,AX;MOVAX,DATA_ES;MOVES,AX;MOVAL,DBYTE1;MOVES:DBYTE22,AL;将AL中的数据送到DATA_ES 段中DBYTE2单元。2024/8/8 周四信息工程学院39(2)SS(2)SS装入装入DATA_STACK SEGMENTSTACKDW40HDUP(?);80H个字节单元TOPLABELWORD;定义TOP(SS=0080H)DATA_STACKENDS;区别:DATA_STACK SEGMENTSTACKDATA_STACKENDSCODESEGMENTASSUMECS:CODE,SS:DATA_STACKSTART:MOVAX,DATA_STACKMOVSS,AXMOVSP,OFFSETTOP在堆栈段定义时,选择STACK选项,则会自动SS、SP相应的值如果没有选择STACK选项,则应同DS、ES一样用指令实现对SS和SP装入初值。2024/8/8 周四信息工程学院40(3)CS(3)CS装入装入按照结束伪指令指定的地址装入CS和IP。格式:格式:格式:格式:END【起始地址】;起始地址可用标号、表达式或逻辑地址表示。程序运行时:调用、转移、中断、复位调用、转移、中断、复位调用、转移、中断、复位调用、转移、中断、复位 自动修改CS和IPEND MAIN2024/8/8 周四信息工程学院41格式格式1 1:变量名变量名 助记符助记符 操作数,操作数 ;注释格式格式2 2:变量名变量名 助记符助记符 n DUP(操作数,操作数);注释功能:功能:指定变量的存储单元,以分配存储空间或存入操作数。变量名变量名用符号表示,可以省略,后面不跟冒号后面不跟冒号。汇编时将变量助记符后的第一个字节的偏移地址第一个字节的偏移地址第一个字节的偏移地址第一个字节的偏移地址作为它的符号地址符号地址符号地址符号地址。助记符助记符所用伪指令助记符主要有:DB:用来定义字节;DW:用来定义字;DD:用来定义双字;DQ:用来定义四个字;DT:用来定义十个字节;REAL4/8/10:用来定义实数;操作数操作数操作数可以是常数,字符串,变量,标号,表达式等。多个操作数之间必须用逗号分开;格式2中,n n必须是正整数必须是正整数。4.2.5 数据定义伪指令2024/8/8 周四信息工程学院42DA1DA1DB 10H,52H DB 10H,52H;变量;变量DA1DA1中装入中装入10H,52H10H,52HDA2DA2DW 1122H,34HDW 1122H,34H;变量;变量DA2DA2中装入中装入22H,11H,34H,00H22H,11H,34H,00HDA3DA3DD 5*20H,0FFEEHDD 5*20H,0FFEEH;变量;变量DA3DA3中装入中装入A0H,00H,00H,00HA0H,00H,00H,00H,;EEH,FFH,00H,00HEEH,FFH,00H,00H2024/8/8 周四信息工程学院43操作数是字符串操作数是字符串操作数是字符串操作数是字符串FIRSTFIRSTDB DB HELLOHELLO;字符串;字符串 HELLOHELLO 的的ASIIASII码装入码装入FIRSTFIRST开始开始的的存储单元存储单元SECONDSECOND DW DW OKOK;字符串;字符串 OKOK 的的ASIIASII码装入码装入SECONDSECOND开始的开始的存存储单元储单元2024/8/8 周四信息工程学院44操作数用操作数用操作数用操作数用?定义不确定值的变量,用作保留存储空间。定义不确定值的变量,用作保留存储空间。定义不确定值的变量,用作保留存储空间。定义不确定值的变量,用作保留存储空间。M1M1 DB?DB?;定义变量;定义变量M1M1为不确定字节,保留为不确定字节,保留l l字节空间字节空间 M2M2 DW 0D55HDW 0D55H,?;定义变量;定义变量M2M2第二个字为不确定,保留两个字节空间第二个字为不确定,保留两个字节空间2024/8/8 周四信息工程学院45操作数用操作数用操作数用操作数用DUPDUPDUPDUP来定义重复变量(来定义重复变量(来定义重复变量(来定义重复变量(DUPDUPDUPDUP前有空格)前有空格)前有空格)前有空格)ONEONEONEONE DB 5 DUP(0)DB 5 DUP(0)DB 5 DUP(0)DB 5 DUP(0);重复;重复5 5个个0 0存入存入ONEONE起始的存储单元起始的存储单元 TWOTWOTWOTWO DW 10 DUP(?)DW 10 DUP(?)DW 10 DUP(?)DW 10 DUP(?);重复;重复1010次,保留次,保留1010个字的存储单元个字的存储单元 THREE DBTHREE DBTHREE DBTHREE DB 4 DUP(1 4 DUP(1 4 DUP(1 4 DUP(1,2 DUP(20H)2 DUP(20H)2 DUP(20H)2 DUP(20H);DUPDUP嵌套嵌套2024/8/8 周四信息工程学院46共共两种两种两种两种:赋值语句EQUEQU,等号语句等号语句等号语句等号语句。它们均不占用内存均不占用内存均不占用内存均不占用内存。1赋值语句EQU:格式:格式:格式:格式:符号名符号名 EQU EQU 表达式表达式功能:功能:功能:功能:给变量、标号、常数、指令、表达式等定义一个符号名一经定义在同一个程序模块中不能重新定义4.2.6 符号定义伪指令3解除语句PURGEPURGEPURGE符号符号1 1,符号,符号2 2,符号符号n2等号语句等号语句“”与EQU语句具有相同功能 区别:区别:区别:区别:EQUEQU左边的标号不允许重新定义,用左边的标号不允许重新定义,用“”定义的语句允许重复定义定义的语句允许重复定义。2024/8/8 周四信息工程学院47例例COUNTEQU 100;常数值赋给符号名COUNTDATAEQUCOUNT2;表达式值赋给符号名DATAA1EQUBXSI;变址寻址存储单元内容赋给符号名A1B1EQUOFFSETA1;偏移地址值赋给符号名B1C1EQUADD;加法指令赋给符号名C1注意:注意:在EQU语句右边表达式中的变量或标号,必须预先定义必须预先定义。例例 (部分代码有的编译器不支持)COUNT100COUNTCOUNT102024/8/8 周四信息工程学院48过程也称作子程序子程序。节省内存空间,便于进行模块化程序设计。格式:格式:格式:格式:过程名 PROC 属性 ;过程内容 RET N 过程名 ENDP功能:功能:功能:功能:定义一个过程,主程序可以用定义一个过程,主程序可以用CALLCALL指令调用它。指令调用它。过程名:过程名:过程名:过程名:过程的名字,过程的名字,不可缺省不可缺省不可缺省不可缺省。子程序入口地址。子程序入口地址。过程名具有三种属性:段属性:段属性:该过程所在段的段基址段基址。偏移地址属性:偏移地址属性:该过程第一个字节第一个字节与段首址段首址之间距离距离字节。距距离离属属性性:为NEARNEAR或FARFAR。NEAR允许过程在段内调用;FAR允许过程在段间调用,NEAR为缺省使用。PROC的距离属性一定要与CALL指令的距离属性一致,否则编译虽能通过,但运行时会出错,与断点保护方法不同有关。4.2.8 过程定义伪指令2024/8/8 周四信息工程学院49PROCPROCPROCPROCENDPENDPENDPENDP过程定义伪指令助记符,成成对对出出现现,不不可可缺缺省省。二者前面有相同的过程名相同的过程名。RET RET RET RET N N N N为过程内部的返回指令。(FAR过程和NEAR过程的RET指令机器码不一样,FAR过程返回时出栈2次,NEAR过程返回时出栈1次)过程内部至少有条RET指令,可以在过程的任何位置,使过程返回到主程序。过程内部可以有多个RET,表示此过程具有多个返回出口(在不同条件下,从不同出口返回)。N为弹出值,表示返回后自自栈顶开始有N个字节作废,N必须为正偶数,可以缺省。过过程程调调用用允允许许嵌嵌套套和和递递归归调调用用。嵌嵌套套与与递递归归的的深深度度由由堆堆栈栈段段的的容容量量决决定。定。2024/8/8 周四信息工程学院50DATASEGMENT ONE DB 22,33,44,55 TWO DB 55,66,77,88 SUM DB 20 DUP(?)DATA ENDSSSTACK SEGMENT STACK STT DB 50 DUP(?)TOP EQU LENGTH STTSSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATAMAIN PROC FARSTART:MOV AX,STACK;堆栈指针可以不要初始化堆栈指针可以不要初始化 MOV SS,AX MOV SP,TOP PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX用过程调用的方法,将内存中用过程调用的方法,将内存中N个个BCD码相加。码相加。2024/8/8 周四信息工程学院51MOV SI,OFFSET ONE ;SI指向第一个加数指向第一个加数 MOV BX,OFFSET TWO MOV DI,OFFSET SUMCLD ;清方向标志;清方向标志CLC ;清进位标志;清进位标志 MOV CX,4LL:CALL ABC LOOP LL RETMAIN ENDPABC PROC NEAR ;完成单字节数据加法运算;完成单字节数据加法运算 LODSB ;【SI】AL,SI+1SI L1:ADC AL,BX ;相加;相加 DAA ;十进调整;十进调整 STOSB ;ALDI,DI+1DI INC BX ;指针改变;指针改变 RETABC ENDPCODE ENDS END START2024/8/8 周四信息工程学院524.2.9 程序计数器与定位指令$来保存当前正在汇编的指令的地址。例ORG$6;表示从当前地址跳过6个字节ABCDW1,2,$4,0AH,0DH,$3设:ABC的偏移地址为1000H则:相当于ABCDW1,2,1008H,0AH,0DH,100DHABC在内存中的存放结果如右图。1程序计数器$:2024/8/8 周四信息工程学院532定位伪指令ORG:格式:格式:格式:格式:ORG表达式 功能:功能:功能:功能:给汇编程序设置位置指针,指定下面语句的起始偏移地址。ORGORG是伪指令助记符,不可缺省。ORG语句可以放在程序的任何位置。表达式表达式表达式表达式给定的偏移地址值,表达式的计算结果必须是正整数。2024/8/8 周四信息工程学院54例用ORG改变数据段地址DATA SEGMENTORG100HA1DB10H,20H,30H;A1偏移地址100HORG200HA2DW3031H,3233H;A2偏移地址200HDATAENDS例用ORG指定代码段地址CODE SEGMENTORG100HASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:;指定代码段起始地址偏移100HMOVAX,DATACODEENDS2024/8/8 周四信息工程学院554.2.10 条件汇编指令IFXX条件条件;程序段程序段ELSE;程序段程序段ENDIFIF表达式表达式/IFE表达式表达式功能:功能:功能:功能:表达式值不为0,汇编程序段1,否则跳过/表达式值为0,汇编程序段1,否则跳过
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服