第4章汇编语言程序格式

上传人:枫** 文档编号:569806008 上传时间:2024-07-31 格式:PPT 页数:78 大小:454KB
返回 下载 相关 举报
第4章汇编语言程序格式_第1页
第1页 / 共78页
第4章汇编语言程序格式_第2页
第2页 / 共78页
第4章汇编语言程序格式_第3页
第3页 / 共78页
第4章汇编语言程序格式_第4页
第4页 / 共78页
第4章汇编语言程序格式_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《第4章汇编语言程序格式》由会员分享,可在线阅读,更多相关《第4章汇编语言程序格式(78页珍藏版)》请在金锄头文库上搜索。

1、计算机科学与技术系计算机科学与技术系汇编语言汇编语言第4章汇编语言程序格式Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望计算机科学与技术系计算机科学与技术系汇编语言汇编语言编辑程序编辑程序.ASM文件文件汇编程序汇编程序.OBJ文件文件连接程序连接程序.EXE文件文件Edit等等MASMLINK汇编语言程序的建立及执行过程:汇编语言程序的建立及执行过程:汇编语言程序的建立及执行过程:汇编语言程序的建立及执行过程:在计算机上运行汇编语言程序的步骤是:在计算机上运行汇编语言程序的步骤是

2、:用编辑程序(任何一种文本编辑程序)建立用编辑程序(任何一种文本编辑程序)建立ASMASM文件;文件;用用MASMMASM程序把程序把ASMASM文件转换成文件转换成OBJOBJ文件;文件;用用LINKLINK程序把程序把OBJOBJ文件转换成文件转换成EXEEXE文件;文件;用用DOSDOS命令直接键入文件名就可执行该程序;命令直接键入文件名就可执行该程序;4.14.1汇编程序功能汇编程序功能汇编程序功能汇编程序功能计算机科学与技术系计算机科学与技术系汇编语言汇编语言汇编程序功能汇编程序功能汇编程序功能汇编程序功能汇编程序的主要功能:汇编程序的主要功能: 检查源程序,给出出错信息。检查源程序

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

4、机机来来执执行行的的)完完完完成成成成处处处处理理理理器器器器选选选选择择择择、存存存存储储储储模模模模式式式式定定定定义义义义、数数数数据据据据定定定定义义义义、存储器分配、指示程序开始结束等功能存储器分配、指示程序开始结束等功能存储器分配、指示程序开始结束等功能存储器分配、指示程序开始结束等功能。处理器选择伪操作处理器选择伪操作段定义伪操作段定义伪操作程序开始和结束伪操作程序开始和结束伪操作数据定义及存储器分配伪操作数据定义及存储器分配伪操作表达式赋值伪操作表达式赋值伪操作地址计数器与对准伪操作地址计数器与对准伪操作基数控制伪操作基数控制伪操作计算机科学与技术系计算机科学与技术系汇编语言汇

5、编语言.8086.8086选择选择8086指令系统指令系统.286.286选择选择80286指令系统指令系统.286P.286P选择保护模式下的选择保护模式下的80286指令系统指令系统.386.386选择选择80386指令系统指令系统.386P.386P选择保护模式下的选择保护模式下的80386指令系统指令系统.486.486选择选择80486指令系统指令系统.486P.486P选择保护模式下的选择保护模式下的80486指令系统指令系统.586.586选择选择Pentium指令系统指令系统.586P.586P选择保护模式下的选择保护模式下的Pentium指令系统指令系统4.2.14.2.1处

6、理器选择伪操作:处理器选择伪操作:处理器选择伪操作:处理器选择伪操作:这类伪操作一般这类伪操作一般放在程序的最前面放在程序的最前面放在程序的最前面放在程序的最前面,如不给出,如不给出,则汇编程则汇编程序序默认值为默认值为默认值为默认值为.8086.8086。计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.2.24.2.2段定义伪操作:段定义伪操作:段定义伪操作:段定义伪操作:段定义伪操作的格式:段定义伪操作的格式:段段段段名名名名 SEGMENTSEGMENT 定定定定位位位位类类类类型型型型 组组组组合合合合类类类类型型型型 使使使使用用用用类类类类型型型型 类类类类别别别别 ;语句

7、序列语句序列语句序列语句序列段名段名段名段名 ENDSENDS1) 1) 段名段名 段名是为该段起的名字,用来段名是为该段起的名字,用来段名是为该段起的名字,用来段名是为该段起的名字,用来指出汇编程序为指出汇编程序为指出汇编程序为指出汇编程序为该段分配的存储区起始位置该段分配的存储区起始位置该段分配的存储区起始位置该段分配的存储区起始位置。1.完整的段定义伪指令完整的段定义伪指令计算机科学与技术系计算机科学与技术系汇编语言汇编语言2) 2) 定位方式定位方式 (1 1 1 1)PARAPARAPARAPARA:表表示示本本本本段段段段必必必必须须须须从从从从能能能能被被被被16161616整整

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

9、 4 4)PAGEPAGEPAGEPAGE:表示:表示本段要从能被本段要从能被本段要从能被本段要从能被256256256256整除的地址处开始存放整除的地址处开始存放整除的地址处开始存放整除的地址处开始存放,即起始地址的最低八位必须是即起始地址的最低八位必须是0 0。 默认为默认为 PARAPARAPARAPARA计算机科学与技术系计算机科学与技术系汇编语言汇编语言3) 3) 组合方式组合方式组合方式有六种类型可供选择。组合方式有六种类型可供选择。(1)PRIVATE PRIVATE PRIVATE PRIVATE 该段为该段为私有段私有段私有段私有段,在连接时将不与其他同名段合并,在连接时将

10、不与其他同名段合并(2)PUBLICPUBLICPUBLICPUBLIC该段在连接时可以把该段在连接时可以把不同模块的不同模块的不同模块的不同模块的同名段同名段同名段同名段相连接而形相连接而形相连接而形相连接而形成一个段成一个段成一个段成一个段。每一段从小段的边界开始,所以各段之间有小于每一段从小段的边界开始,所以各段之间有小于16个字个字节的间隙。节的间隙。(3)COMMONCOMMONCOMMONCOMMON该段在连接时可以该段在连接时可以把不同模块中的把不同模块中的把不同模块中的把不同模块中的同名段同名段同名段同名段重叠而形重叠而形重叠而形重叠而形 成一个段成一个段成一个段成一个段,由于

11、各同名段有相同的起始地址,所以会产生覆盖。,由于各同名段有相同的起始地址,所以会产生覆盖。(4)STACKSTACKSTACKSTACK把把不同模块的同名段组合而成一个堆栈段不同模块的同名段组合而成一个堆栈段不同模块的同名段组合而成一个堆栈段不同模块的同名段组合而成一个堆栈段。各段之。各段之间没有间隙。间没有间隙。(5)MEMORYMEMORYMEMORYMEMORY同同PUBLIC(6)AT AT AT AT 表达式表达式表达式表达式使段地址是表达式所计算出来的使段地址是表达式所计算出来的16位值,位值,CS除外。除外。 默认为默认为 PRIVATE PRIVATE PRIVATE PRIV

12、ATE 计算机科学与技术系计算机科学与技术系汇编语言汇编语言【例】有两个模块,各模块段定义如下【例】有两个模块,各模块段定义如下模块模块1 1: DATA1DATA1SEGMENTSEGMENT PARA PARA PUBLIC PUBLIC DATA1DATA1M1M1DB 45H DUPDB 45H DUP(0 0)DATA1DATA1ENDSENDSDATA2DATA2SEGMENT PARA COMMON DATA2SEGMENT PARA COMMON DATA2N1 DB 102H DUPN1 DB 102H DUP(0 0)DATA2DATA2ENDSENDSEND END 模块

13、模块2 2:DATA1DATA1SEGMENT SEGMENT PARA PARA PUBLIC PUBLIC DATA1DATA1M2M2DB 104H DUPDB 104H DUP(11H11H)DATA1DATA1ENDSENDSDATA2DATA2SEGMENT SEGMENT PARA PARA COMMON COMMON DATA2DATA2N2N2DB 105H DUPDB 105H DUP(0 0)DATA2DATA2ENDSENDSDATA3DATA3SEGMENTSEGMENTT1T1DB 50 DUPDB 50 DUP(20H20H)DATA3DATA3ENDSENDSE

14、NDEND计算机科学与技术系计算机科学与技术系汇编语言汇编语言该段的定位组合方式示意图如图所示。该段的定位组合方式示意图如图所示。 计算机科学与技术系计算机科学与技术系汇编语言汇编语言 4) 4) 使用类型使用类型 USE16USE16USE16USE16 使用使用1616位寻址方式位寻址方式 段长段长64K64K USE32USE32USE32USE32 使用使用3232位寻址方式位寻址方式 段长段长4G4G 5) 5) 类别类别 在引号中给出连接时组成的段组的类型名。在在引号中给出连接时组成的段组的类型名。在连连连连接后形成的装入模块中,可使相同类别的段位置靠接后形成的装入模块中,可使相同

15、类别的段位置靠接后形成的装入模块中,可使相同类别的段位置靠接后形成的装入模块中,可使相同类别的段位置靠在一起。在一起。在一起。在一起。计算机科学与技术系计算机科学与技术系汇编语言汇编语言假定伪指令假定伪指令ASSUME格式:格式:ASSUMEASSUMEASSUMEASSUME 段寄存器:段名段寄存器:段名段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名,段寄存器:段名,段寄存器:段名 功能:功能:建立段寄存器与段之间的对应关系。该伪指令一般建立段寄存器与段之间的对应关系。该伪指令一般建立段寄存器与段之间的对应关系。该伪指令一般建立段寄存器与段之间的对应关系。该伪指令一般出现在代

16、码段中。出现在代码段中。出现在代码段中。出现在代码段中。 DATA1DATA1SEGMENTSEGMENTA ADB 1DB 1,2 2,3 3DATA1DATA1ENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMEASSUMEASSUME DSDSDSDS:DATA1DATA1DATA1DATA1,CSCSCSCS:CODECODECODECODE 其中段寄存器名必须是其中段寄存器名必须是CS,DS,ES和和SS(对于对于386及后继机及后继机型还有型还有FS和和GS)中的一个。中的一个。段名必须是由段名必须是由SEGMENT定义的段定义的段中的段名。中的段名

17、。计算机科学与技术系计算机科学与技术系汇编语言汇编语言段定义伪操作:段定义伪操作:完整的段定义格式举例完整的段定义格式举例datasegment;定义数据段定义数据段dataends;-extrasegment;定义附加段定义附加段extraends;-codesegment;定义代码段定义代码段assumecs:code,ds:data,es:extrastart:movax,datamovds,ax;段地址段地址段寄存器段寄存器codeendsendstart计算机科学与技术系计算机科学与技术系汇编语言汇编语言codesegmentmainprocfarassumestart:pushds

18、movax,0pushaxretmainendpcodeendsendstartcode segmentcode segmentmain proc farmain proc far assume assume start:start: mov ax,4c00h mov ax,4c00h int 21h int 21hmain endpmain endpcode endscode ends end start end start计算机科学与技术系计算机科学与技术系汇编语言汇编语言例:一个完整的段定义格式例:一个完整的段定义格式STACK SEGMENTSTACK;定义堆栈段定义堆栈段STACK.

19、;分配堆栈段的大小分配堆栈段的大小STACKENDSDATASEGMENT;定义数据段定义数据段.;定义数据定义数据DATAENDSCODE SEGMENTCODE;定义代码段定义代码段ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;程序开始程序开始MOVDS,AX.;程序代码程序代码MOVAX,4C00H;程序终止,返回程序终止,返回DOSINT21HCODE ENDS;代码段结束代码段结束.;子程序代码子程序代码ENDSTART;汇编结束汇编结束例:一个完整的段定义格式例:一个完整的段定义格式计算机科学与技术系计算机科学与技术系汇编语言汇编语言

20、2.存储模型与简化段定义伪指令存储模型与简化段定义伪指令前前面面介介绍绍了了完完整整的的段段定定义义格格式式,用用完完整整段段定定义义格格式式虽虽然然可可以以控控制制段段的的各各种种属属性性,但但程程序序员员很很少少使使用用。现现在在的的汇汇编编程程序序提提供供了了一一种种简简化化的的段定义方式,它使定义段更简单、方便。具体形式如下:段定义方式,它使定义段更简单、方便。具体形式如下:.MODELSMALL.MODELSMALL;定义存储模式定义存储模式.STACK.STACK;定义堆栈段定义堆栈段.DATA.DATA ;定义数据段定义数据段.;定义数据定义数据.CODE.CODE ;定义代码段

21、定义代码段.STARTUP.STARTUP;程序起始点,并建立程序起始点,并建立DS和和SS内容内容.;程序代码程序代码.EXIT0.EXIT0;程序结束点,返回程序结束点,返回DOS.;子程序子程序ENDEND;汇编结束汇编结束计算机科学与技术系计算机科学与技术系汇编语言汇编语言存储模式与简化段定义伪操作存储模式与简化段定义伪操作(1)MODEL伪操作伪操作 .MODEL .MODEL .MODEL .MODEL 存储模式存储模式存储模式存储模式 , , , ,语言类型语言类型语言类型语言类型 , , , ,操作系统类型操作系统类型操作系统类型操作系统类型 , , , ,堆栈选项堆栈选项堆栈

22、选项堆栈选项 存储模式:存储模式:tiny tiny tiny tiny 所有数据和代码都放在一个段所有数据和代码都放在一个段所有数据和代码都放在一个段所有数据和代码都放在一个段 .com(0100H) .com(0100H) .com(0100H) .com(0100H) small small small small 所有数据和代码各放在一个段所有数据和代码各放在一个段所有数据和代码各放在一个段所有数据和代码各放在一个段 medium medium medium medium 代码使用多个段代码使用多个段代码使用多个段代码使用多个段 ,数据合并一个段,数据合并一个段,数据合并一个段,数据合

23、并一个段 compact compact compact compact 所有代码使用一个段所有代码使用一个段所有代码使用一个段所有代码使用一个段 ,数据可放多个段,数据可放多个段,数据可放多个段,数据可放多个段 large large large large 数据和代码都可用多个段数据和代码都可用多个段数据和代码都可用多个段数据和代码都可用多个段 huge huge huge huge 数据和代码都可用多个段数据和代码都可用多个段数据和代码都可用多个段数据和代码都可用多个段 ,数据段可超过,数据段可超过,数据段可超过,数据段可超过64K64K64K64K flat flat flat fla

24、t 允许用允许用允许用允许用32323232位偏移量,位偏移量,位偏移量,位偏移量,DOSDOSDOSDOS下不允许。下不允许。下不允许。下不允许。计算机科学与技术系计算机科学与技术系汇编语言汇编语言TINY:该存储类型是为编写:该存储类型是为编写COM文件类型而设置的。文件类型而设置的。SMALL:所所有有的的数数据据变变量量必必须须在在一一个个数数据据段段之之内内,所所有有的的代代码码也也必必须须在在一一个个代代码码段段之之内内。在在这这种种模模型型下下,数数据据段段寄寄存存器器的的内内容容保保持持不不变,所有转移也都是段内转移。变,所有转移也都是段内转移。MEDIUM:所所有有的的数数据

25、据变变量量必必须须在在一一个个数数据据段段之之内内,但但代代码码段段可可以以有有多多个个。在在这这种种模模型型下下,数数据据段段寄寄存存器器的的内内容容保保持持不不变变,转转移移可可以以是是段间转移。段间转移。COMPACT:数据段可以有多个,但代码段只能有一。:数据段可以有多个,但代码段只能有一。LARGE:数数据据段段和和代代码码段段都都可可以以有有多多个个,但但一一个个数数组组的的字字节节数数不不能超过能超过64KB。HUGE:数数据据段段和和代代码码段段都都可可以以有有多多个个,一一个个数数组组的的字字节节数数也也可可以以超过超过64KB。FLAT:只能在:只能在80386及其以后的计

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

27、可可可超超超超过过过过64KB64KB;因因因因此此此此小小小小模模模模式下程序的最大长度为式下程序的最大长度为式下程序的最大长度为式下程序的最大长度为128KB128KB。访访问问操操作作数数或或指指令令都都只只需需要要使使用用16位位偏偏移移地地址址;这这意意味味着着诸诸如如指指令令转转移移、程程序序调调用用以以及及数数据据访访问问等等都都是是近近属属性性(NEAR),即即小小型型模模式式下下的的调调用用类类型型和和数数据据指指针针缺缺省省分分别为近调用和近指针。别为近调用和近指针。计算机科学与技术系计算机科学与技术系汇编语言汇编语言.model small.model small.sta

28、ck 100H.stack 100H.data.data .code.code.startup.startup .exit 0.exit 0endend计算机科学与技术系计算机科学与技术系汇编语言汇编语言.MODELMODEL存储模式存储模式存储模式存储模式 ,语言类型,语言类型,语言类型,语言类型,操作系统类型,操作系统类型,操作系统类型,操作系统类型,堆栈选项,堆栈选项,堆栈选项,堆栈选项 vv 语语语语言言言言类类类类型型型型说说说说明明明明可可可可使使使使汇汇汇汇编编编编语语语语言言言言程程程程序序序序与与与与其其其其它它它它语语语语言言言言程程程程序序序序达达达达到到到到共共共共享享

29、享享的的的的目目目目的的的的。所所所所有有有有有有有有效效效效的语言类型可以是的语言类型可以是的语言类型可以是的语言类型可以是C C、BASICBASIC、FORTRANFORTRAN等。等。等。等。vv操作系统类型操作系统类型操作系统类型操作系统类型说明程序运行于哪个操作系统之下,说明程序运行于哪个操作系统之下,说明程序运行于哪个操作系统之下,说明程序运行于哪个操作系统之下,OS_DOSOS_DOS该选项的缺省值。该选项的缺省值。该选项的缺省值。该选项的缺省值。vv堆堆堆堆栈栈栈栈选选选选项项项项类类类类型型型型的的的的值值值值有有有有二二二二个个个个可可可可选选选选值值值值:NEARSTA

30、CKNEARSTACK和和和和FARSTACKFARSTACK。其其其其中中中中:NEARSTACKNEARSTACK是该选项的缺省堆栈类型。是该选项的缺省堆栈类型。是该选项的缺省堆栈类型。是该选项的缺省堆栈类型。NEARSTACKNEARSTACK堆栈段和数据段是同一段;堆栈段和数据段是同一段;堆栈段和数据段是同一段;堆栈段和数据段是同一段;FARSTACKFARSTACK堆栈段和数据段是不同的段,且堆栈不在段组堆栈段和数据段是不同的段,且堆栈不在段组堆栈段和数据段是不同的段,且堆栈不在段组堆栈段和数据段是不同的段,且堆栈不在段组DGROUPDGROUP中。中。中。中。例如:例如:例如:例如

31、:.MODELSMALL.MODELSMALL,C C,OS_DOSOS_DOS,FARSTACKFARSTACK计算机科学与技术系计算机科学与技术系汇编语言汇编语言(2)简化的段定义伪操作简化的段定义伪操作.code name.code name.data.data.data?.data?.fardata name .fardata name 默认名:默认名:FAR_DATAFAR_DATA.fardata? name .fardata? name 默认名:默认名:FAR_BSSFAR_BSS.const.const.stack size .stack size 默认为默认为1KB1KB计算

32、机科学与技术系计算机科学与技术系汇编语言汇编语言汇编语言提供汇编语言提供汇编语言提供汇编语言提供7 7种标准段,通常在编写一个独立的汇编程序种标准段,通常在编写一个独立的汇编程序种标准段,通常在编写一个独立的汇编程序种标准段,通常在编写一个独立的汇编程序时定义以下三个标准段:时定义以下三个标准段:时定义以下三个标准段:时定义以下三个标准段:.STACK.STACK大小大小大小大小 ;堆栈段;堆栈段;堆栈段;堆栈段uu它的参数指定堆栈段所占存储区的字节数,默认是它的参数指定堆栈段所占存储区的字节数,默认是它的参数指定堆栈段所占存储区的字节数,默认是它的参数指定堆栈段所占存储区的字节数,默认是1K

33、B1KB。.DATA.DATA ;数据段;数据段;数据段;数据段uu它用于定义具有初值的变量,当然也允许定义无初值的变量。它用于定义具有初值的变量,当然也允许定义无初值的变量。它用于定义具有初值的变量,当然也允许定义无初值的变量。它用于定义具有初值的变量,当然也允许定义无初值的变量。无初值变量可以安排在另一个段中,它用无初值变量可以安排在另一个段中,它用无初值变量可以安排在另一个段中,它用无初值变量可以安排在另一个段中,它用.data?.data?伪指令创建。伪指令创建。伪指令创建。伪指令创建。.CODE.CODE段名段名段名段名 ;代码段;代码段;代码段;代码段uu它的参数指定该代码段的段名

34、。如果没有给出段名,则采用它的参数指定该代码段的段名。如果没有给出段名,则采用它的参数指定该代码段的段名。如果没有给出段名,则采用它的参数指定该代码段的段名。如果没有给出段名,则采用默认段名。默认段名。默认段名。默认段名。计算机科学与技术系计算机科学与技术系汇编语言汇编语言v简化段定义伪指令指明一个逻简化段定义伪指令指明一个逻简化段定义伪指令指明一个逻简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面辑段的开始,同时自动结束前面辑段的开始,同时自动结束前面辑段的开始,同时自动结束前面的一个段,的一个段,的一个段,的一个段,不用不用不用不用ENDSENDS作为段结作为段结作为段结作为段结束符

35、束符束符束符。vv 采用简化段定义伪指令前,采用简化段定义伪指令前,采用简化段定义伪指令前,采用简化段定义伪指令前,需需需需有有有有.MODEL.MODEL存储模式语句存储模式语句存储模式语句存储模式语句。vv 使用简化段定义,使用简化段定义,使用简化段定义,使用简化段定义,各段名称和各段名称和各段名称和各段名称和其他用户所需的信息可以使用其他用户所需的信息可以使用其他用户所需的信息可以使用其他用户所需的信息可以使用MASMMASM预定义符号预定义符号预定义符号预定义符号,例如:,例如:,例如:,例如:datadata表示由表示由表示由表示由.data.data等定义的数等定义的数等定义的数等

36、定义的数据段的段名。据段的段名。据段的段名。据段的段名。例:简化段定义例:简化段定义.MODELSMALL.STACK100H.DATA.CODESTART:MOVAX,DATAMOVDS,AXMOVAX,4C00HINT21HENDSTART计算机科学与技术系计算机科学与技术系汇编语言汇编语言.model small.model small.data.data.code.code.startup.startup .exit 0.exit 0end end .model small .model small .data .data .code .codestart: start: mov ax

37、, datamov ax, data mov ds, ax mov ds, ax mov ax, 4c00h mov ax, 4c00h int 21h int 21h end start end start .model small .model small .const .const .data .data .code .codestart: mov ax, DGROUPstart: mov ax, DGROUP mov ds, ax mov ds, ax mov ax, 4c00h mov ax, 4c00h int 21h int 21h end start end start计算机科

38、学与技术系计算机科学与技术系汇编语言汇编语言格式:格式:段组名段组名 GROUP GROUP 数据段名数据段名11,数据段名,数据段名22功能:功能:汇编程序把各数据段组成一个段组,以便程序在访问各数据段汇编程序把各数据段组成一个段组,以便程序在访问各数据段时使用一个数据段寄存器时使用一个数据段寄存器DS。如:。如:data1segmentdata1endsdata2segmentdata2endsdatagroupgroupdata1,data2codesegmentassumecs:code,ds:datagroupstart:movax,datagroupmovds,ax3.段组定义伪操

39、作段组定义伪操作计算机科学与技术系计算机科学与技术系汇编语言汇编语言dseg1 segment word public datadseg1 segment word public data dseg1 ends dseg1 ends dseg2 segment word public datadseg2 segment word public data dseg2 endsdseg2 ends datagroup datagroup groupgroup dseg1, dseg2 dseg1, dseg2cseg segment para public codecseg segment par

40、a public code assume cs:cseg, ds: assume cs:cseg, ds:datagroupdatagroupstart:start: mov ax, datagroup mov ax, datagroup mov ds, ax mov ds, ax mov ax, 4c00h mov ax, 4c00h int 21h int 21hcseg endscseg ends end start end start计算机科学与技术系计算机科学与技术系汇编语言汇编语言data1 segment data1 segment wordword const1 dw 100

41、const1 dw 100data1 endsdata1 ends data2 segment data2 segment wordword var1 dw ? var1 dw ?data2 endsdata2 endsdatagroup group data1,data2datagroup group data1,data2code segment code segment assume cs:code, ds:datagroupassume cs:code, ds:datagroup mov ax, datagroup mov ax, datagroup mov ds, ax mov ds

42、, ax mov ax, const1 mov ax, const1 mov var1, ax mov var1, ax mov ax, 4c00h mov ax, 4c00h int 21h int 21hcode endscode ends end start end start计算机科学与技术系计算机科学与技术系汇编语言汇编语言TITLETITLEtexttext;指定列表文件每页打印的标题;指定列表文件每页打印的标题NAMENAMEmodule_namemodule_name;指出模块的名字;指出模块的名字ENDENDlabellabel ;表示源程序结束,;表示源程序结束,label

43、指示程序指示程序;开始执行的起始标号;开始执行的起始标号.STARTUP.STARTUP;定义程序的入口点;定义程序的入口点.EXIT.EXITreturn_valuereturn_value ;退出程序并返回操作系统;退出程序并返回操作系统;return_value常用常用0 0作返回值作返回值4.2.3程序开始和结束伪操作程序开始和结束伪操作可以可以没有没有计算机科学与技术系计算机科学与技术系汇编语言汇编语言在汇编程序在汇编程序MASM中,提供了二组简化的代码伪指令:中,提供了二组简化的代码伪指令:.STARTUP和和.EXIT。v.STARTUP在代码段的开始,用于自动初始化寄存器在代码

44、段的开始,用于自动初始化寄存器DS、SS和和SP;v.EXIT用于结束程序的运行。用于结束程序的运行。.modelsmall.data.code.startup.exit0end.modelsmall.data.codestart:movax,datamovds,axmovax,4c00hint21hendstart计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.2.4数据定义及存储器分配伪操作:数据定义及存储器分配伪操作: 变变变变量量量量名名名名 助助助助记记记记符符符符 操操操操作作作作数数数数 , ,操操操操作作作作数数数数 , , ; ;注注注注释释释释 1.1.变量名必须是

45、一个合法的标识符,它可以写,也可以不写;变量名必须是一个合法的标识符,它可以写,也可以不写;2.2.助记符用于确定内存单元的数据类型,如:助记符用于确定内存单元的数据类型,如:3.3. DB DB(字节)、(字节)、DW DW (字)(字) 、DD DD (双字)(双字) 、DFDF(6 6字节)字节)、DQDQ(四字)、(四字)、DTDT(1010字节)。字节)。4.4.操作数是定义内存单元时的初值表达式,操作数是定义内存单元时的初值表达式,一个定义语句可以一个定义语句可以有多个初值表达式,各表达式之间必须用逗号有多个初值表达式,各表达式之间必须用逗号,分开;分开;如果某个存储单元没有初值表

46、达式,则必须用一个问号如果某个存储单元没有初值表达式,则必须用一个问号?来表示;来表示;5.5.在定义语句的后面可以书写注释内容,也可以不写。在定义语句的后面可以书写注释内容,也可以不写。计算机科学与技术系计算机科学与技术系汇编语言汇编语言DATA_BYTE DATA_BYTE DB DB 10,4,10H, 10,4,10H,? ?DATA_WORD DATA_WORD DWDW 100,100H,-5, 100,100H,-5,? ?例:例:1注:注:注:注:“ “?” ”表示保留存储空间但不存入数据表示保留存储空间但不存入数据表示保留存储空间但不存入数据表示保留存储空间但不存入数据 -

47、- 0AH0AH 04H04H 10H10H - - 64H64H 00H00H 00H00H 01H 01H FBHFBH FFHFFH - -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 计算机科学与技术系计算机科学与技术系汇编语言汇编语言【例】【例】DATA1DB10,4,10HDATA2DW100,100H,-5DATA3DD3*20,0FFFDH041064000001FBFF3C000000FDFF00000ADATA1DATA2DATA310d410h计算机科学与技术系计算机科学与技术系汇编语言汇编语言ARRAY DB HELLO DB AB D

48、W AB 48H48H 45H45H 4CH4CH 4CH4CH 4FH4FH 41H41H 42H42H 42H42H 41H41H ARRAY ARRAY DW1DD12345678HDW2DD0abcd1243H 78H78H 56H56H 34H34H 12H12H 43H43H 12H12H CDHCDH ABHABH DW1 DW1 DW2 DW2 例例例:例:3例2图例3图计算机科学与技术系计算机科学与技术系汇编语言汇编语言重复说明符重复说明符DUP 从前面的内容里,我们知道了定义少量内存变量的定义形从前面的内容里,我们知道了定义少量内存变量的定义形式,但如果在程序中式,但如果在

49、程序中要说明要说明5050个、个、100100个、个、200200个甚至更多的、个甚至更多的、同类型的内存变量时同类型的内存变量时,若采用前面所学的方法,对它们一一,若采用前面所学的方法,对它们一一加以说明显然是不可行的。为此,汇编语言提供了变量的重加以说明显然是不可行的。为此,汇编语言提供了变量的重复说明符复说明符DUPDUP,其说明的一般形式如下:,其说明的一般形式如下: repeat_countrepeat_countrepeat_countrepeat_count DUP ( DUP ( DUP ( DUP (表达式表达式表达式表达式, , , , 表达式表达式表达式表达式, , ,

50、, , , , , 表达式表达式表达式表达式) ) ) ) 解释:解释:repeat_countrepeat_count是重复次数,是重复次数,( (表达式表达式, , 表达式表达式, , , , 表达式表达式) )是被重复的部分,是被重复的部分,“表达式表达式”可以是存储单元可以是存储单元的初值,也可以是含义另一个的初值,也可以是含义另一个DUPDUP的式子。如果在表达式的的式子。如果在表达式的括号中有多个表达式,那么,它们之间要用逗号括号中有多个表达式,那么,它们之间要用逗号,分开。分开。计算机科学与技术系计算机科学与技术系汇编语言汇编语言0102-000102-00BUF1BUF2-10

51、0个字节个字节例:例:BUF1DB2DUP(0,1,2,?),?)BUF2DB100DUP(?)(?)计算机科学与技术系计算机科学与技术系汇编语言汇编语言例如:例如: 1.1.BUFFER DB 100 BUFFER DB 100 DUPDUP(?)(?)2.2.STRING DB 120 DUP(ABCDE), 0STRING DB 120 DUP(ABCDE), 03.DB 2 DUP (0,2 DUP(1,2),3)4.4.DATA1 DW 50 DATA1 DW 50 DUPDUP(10H, 20 (10H, 20 DUPDUP(1,2,3), 20H) (1,2,3), 20H) 5

52、.5.POINTS DD 12, 30 POINTS DD 12, 30 DUPDUP(0)(0)从上面的例子可看出:用从上面的例子可看出:用DUPDUP说明内存变量相当于说明内存变量相当于在高级语言中定义数组。在高级语言中定义数组。 - buffer buffer -100字节画出存储单元的分配图,计算分配字节数画出存储单元的分配图,计算分配字节数计算机科学与技术系计算机科学与技术系汇编语言汇编语言强制属性操作符强制属性操作符PTR 在程序中,我们有时需要对同一个存储单元以不同的属在程序中,我们有时需要对同一个存储单元以不同的属在程序中,我们有时需要对同一个存储单元以不同的属在程序中,我们有

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

54、于指令:MOV BX, 1HMOV BX, 1HMOV BX, 1HMOV BX, 1H,其目标操作数,其目标操作数,其目标操作数,其目标操作数BXBXBXBX是寄存是寄存是寄存是寄存器间接寻址方式,它指向一个存储单元。在作传送操作时,器间接寻址方式,它指向一个存储单元。在作传送操作时,器间接寻址方式,它指向一个存储单元。在作传送操作时,器间接寻址方式,它指向一个存储单元。在作传送操作时,是把是把是把是把“1H”“1H”“1H”“1H”扩展成扩展成扩展成扩展成8 8 8 8位作字节传送,还是扩展成位作字节传送,还是扩展成位作字节传送,还是扩展成位作字节传送,还是扩展成16161616位作字传位

55、作字传位作字传位作字传送呢?这就使该指令具有二义性,因为送呢?这就使该指令具有二义性,因为送呢?这就使该指令具有二义性,因为送呢?这就使该指令具有二义性,因为BXBXBXBX指向的存储单指向的存储单指向的存储单指向的存储单元可以字节或字的首地址。含有该指令的程序在汇编时,元可以字节或字的首地址。含有该指令的程序在汇编时,元可以字节或字的首地址。含有该指令的程序在汇编时,元可以字节或字的首地址。含有该指令的程序在汇编时,可能会产生警告或出错信息。可能会产生警告或出错信息。可能会产生警告或出错信息。可能会产生警告或出错信息。 计算机科学与技术系计算机科学与技术系汇编语言汇编语言 为了使指令中存储单

56、元操作数具有明确的属性,我们可以使为了使指令中存储单元操作数具有明确的属性,我们可以使用强制属性操作符用强制属性操作符PTRPTR。其一般格式为:。其一般格式为: 数据类型数据类型PTRPTR地址表达式地址表达式 其中:数据类型是前面所学的各种数据类型,常用的数据类其中:数据类型是前面所学的各种数据类型,常用的数据类型有:型有:BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR和和FARFAR等。等。为了明确指令中存储单元的属性,可把指令为了明确指令中存储单元的属性,可把指令“MOV BX, 1H”“MOV BX, 1H”可可改写成:改写成: MOV MOV byte

57、ptrbyte ptr BX, 1H BX, 1H或或 MOV MOV word ptrword ptr BX, 1H BX, 1H计算机科学与技术系计算机科学与技术系汇编语言汇编语言 在在指令中用操作符指令中用操作符PTRPTR强制后,不管其后的地址表达式原数据类型是什么,强制后,不管其后的地址表达式原数据类型是什么,在本指令中就以在本指令中就以PTRPTR前面的类型为准。前面的类型为准。该强制属性只在本指令有效,是一种临该强制属性只在本指令有效,是一种临时性的属性,它不会改变原内存单元的定义属性。时性的属性,它不会改变原内存单元的定义属性。例如:例如: W1 W1 W1 W1 DWDWDW

58、DW1234H, 5678H1234H, 5678H1234H, 5678H1234H, 5678H B1 B1 B1 B1 DBDBDBDB2 2 2 2 DBDBDBDB5 5 5 5 D1 D1 D1 D1 DDDDDDDD23456789H23456789H23456789H23456789H MOV AX, MOV AX, word ptrword ptr b1 b1 ;把把把把B1B1B1B1开始的二个字节拼接成一个字,执行后,开始的二个字节拼接成一个字,执行后,开始的二个字节拼接成一个字,执行后,开始的二个字节拼接成一个字,执行后,(AX)=0502H(AX)=0502H(AX)

59、=0502H(AX)=0502HMOV BH, MOV BH, byte ptr byte ptr w1;w1;把字把字把字把字W1W1W1W1的低字节传送给的低字节传送给的低字节传送给的低字节传送给BHBHBHBH,执行后,执行后,执行后,执行后,(BH)=34H(BH)=34H(BH)=34H(BH)=34HMOV CH, MOV CH, byte ptrbyte ptr w1+1; w1+1;把字把字把字把字W1W1W1W1的高字节传送给的高字节传送给的高字节传送给的高字节传送给CHCHCHCH,执行后,执行后,执行后,执行后,(CH)=12H(CH)=12H(CH)=12H(CH)=1

60、2HMOV MOV wordword ptr ptr d1, 12H;d1, 12H;把双字把双字把双字把双字D1D1D1D1的低字修改成的低字修改成的低字修改成的低字修改成0012H0012H0012H0012H,执行后,执行后,执行后,执行后,(D1)=23450012H(D1)=23450012H(D1)=23450012H(D1)=23450012H 上面指令中的强制属性是上面指令中的强制属性是临时属性临时属性,它不能改变这些变量在定义时的永久,它不能改变这些变量在定义时的永久属性。属性。计算机科学与技术系计算机科学与技术系汇编语言汇编语言OPER1 DB ?, ?OPER2 DW ?

61、, ? MOV OPER1, 0 ;字节指令 MOV OPER2, 0 ;字指令OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 类型不匹配 MOV AX, MOV AX, WORD WORD PTRPTR OPER1+1 OPER1+1 MOV AL, MOV AL, BYTE BYTE PTRPTR OPER2 OPER2(AX)=3402H (AL)=34H例例计算机科学与技术系计算机科学与技术系汇编语言汇编语言BYTE_ARRAY LABELLABEL BYTEWORD_ARRAY DW 50 DUP (?

62、) tos LABELLABEL WORD L LABELLABEL NEARLABEL伪操作:伪操作: BYTE_ARRAY BYTE_ARRAY WORD_ARRAY WORD_ARRAY tos tos 50字0064H0064H 同一个变量可以具有不同的类型属性,除了可以用同一个变量可以具有不同的类型属性,除了可以用PTRPTR来定义外,还可以用来定义外,还可以用LABELLABEL伪操作来定义伪操作来定义 符号名符号名 LABELLABEL 类型类型其中:常用的类型有其中:常用的类型有BYTEBYTE、WORDWORD、 DWORDDWORD、NEARNEAR和和FARFAR等等计算

63、机科学与技术系计算机科学与技术系汇编语言汇编语言4.2.5表达式赋值伪操作:表达式赋值伪操作:等价语句的一般使用格式如下:等价语句的一般使用格式如下:符号名符号名EQUEQU表达式表达式作用是左边的符号名代表右边的表达式。作用是左边的符号名代表右边的表达式。注注意意:等等价价语语句句不不会会给给符符号号名名分分配配存存储储空空间间,符符号名不能与其它符号同名,也不能被重新定义号名不能与其它符号同名,也不能被重新定义例例 ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+8计算机科学与技术系计算机科学与技术系汇编语言汇编语言 汇编语言提供了用等号汇编语言提供了用等号 “

64、=”“=” 来定义符号常数的方法,即可用来定义符号常数的方法,即可用符号名代表一个常数。其一般格式如下:符号名代表一个常数。其一般格式如下: 符号名数值表达式符号名数值表达式符号名数值表达式符号名数值表达式 数值表达式在汇编时应该可以计算出数值,它不能含有向前引数值表达式在汇编时应该可以计算出数值,它不能含有向前引用的符号名称。用的符号名称。用等号语句定义的符号可以被重复定义用等号语句定义的符号可以被重复定义。例如:例如: ABC = 10 + 200 * 5ABC = 10 + 200 * 5 ;ABC ;ABC的值为的值为10101010ABC1 = 5 * ABC + 21ABC1 =

65、5 * ABC + 21 ;ABC1 ;ABC1的值为的值为50715071COUNT = 1COUNT = 1 ;COUNT ;COUNT的值为的值为1 1COUNT = 2*COUNT + 1COUNT = 2*COUNT + 1 ;COUNT ;COUNT的值为的值为3 3EMP = 7EMP = 7EMP = EMP+1EMP = EMP+1计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.2.6地址计数器与对准伪操作:地址计数器与对准伪操作:1.地址计数器地址计数器$:保存当前正在汇编的指令的地址保存当前正在汇编的指令的地址 ORG $+8 ; 跳过8个字节的存储区 JNE $

66、+6 ; 转向地址是 JNE指令 的首址 +6 JMP $+2 ;转向下一条指令$用在伪操作的参数字段:用在伪操作的参数字段:表示地址计数器的当前值表示地址计数器的当前值ARRAYDW1,2,$+4,3,4,$+4 00H00H 01H 00H 02H 00H 7CH7CH 00H00H 03H 00H 04H 00H 82H82H ARRAY ARRAY 007E007E007800780074007400760076007A007A计算机科学与技术系计算机科学与技术系汇编语言汇编语言v地址计数器地址计数器$:保存当前正在汇编的指令的地址。保存当前正在汇编的指令的地址。例:例:ARRAYDW

67、1ARRAYDW1,2 2,$+4$+4,3 3,4 4,$+4$+4,又假定又假定ARRAY分配的偏移地址为分配的偏移地址为0074,则存储区分配情况如图所示。则存储区分配情况如图所示。0002007C0003000401ARRAY00740082000078007E0078+4=007C007E+4=0082计算机科学与技术系计算机科学与技术系汇编语言汇编语言 SEG1 SEGMENT SEG1 SEGMENT ORG 10ORG 10 VAR1 DW 1234H VAR1 DW 1234H ORG 20ORG 20 VAR2 DW 5678H VAR2 DW 5678H ORG $+8

68、ORG $+8 VAR3 DW 1357H VAR3 DW 1357HSEG1 ENDSSEG1 ENDSBUFFER LABEL BYTEBUFFER LABEL BYTE ORG $+8 ORG $+8 BUFFER DB 8 DUP (?)BUFFER DB 8 DUP (?) ORG 100HSTART: 2.ORG伪操作伪操作伪指令的作用是:伪指令的作用是:告诉汇编程序,本伪指令下面的内存告诉汇编程序,本伪指令下面的内存变量从该变量从该“数值表达式数值表达式”所指定的地址开始分配。所指定的地址开始分配。计算机科学与技术系计算机科学与技术系汇编语言汇编语言ORG数值表达式数值表达式伪指

69、令的作用是:告诉汇编程序,本伪伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该指令下面的内存变量从该“数值表达式数值表达式”所指定的地址开始分配。所指定的地址开始分配。如:如:DATASEGMENTORG10VECT1DW47A5HORG20VECT2DW0C596HDATAENDSA547VECT10AH14H96C5VECT2计算机科学与技术系计算机科学与技术系汇编语言汇编语言B DW 2 DUP (?) A DB morning EVEN3.偶对齐伪指令偶对齐伪指令EVEN 偶对齐伪指令格式:偶对齐伪指令格式: EVENEVEN 伪指令的作用是:告诉汇编程序伪指令的作用是:告诉汇

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

71、: ALIGN 4ALIGN 4 ALIGN 2 ALIGN 2 ; EVEN计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.2.7基数控制伪操作:基数控制伪操作:.RADIX表达式表达式; 规定无标记数的基数MOV BX, 0FFHMOV BX, 178.RADIX 16RADIX 16RADIX 16RADIX 16MOV BX, 0FFMOV BX, 178D计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.3汇编语言程序格式汇编语言程序格式伪指令语句格式如下:伪指令语句格式如下:符号名符号名伪指令符伪指令符操作数操作数;注释;注释符号名符号名:符号名是伪指令语句的一个可选

72、项。:符号名是伪指令语句的一个可选项。伪伪指指令令符符:伪伪指指令令符符指指定定汇汇编编程程序序要要完完成成的的具具体体操操作作,如如数数据据定定义义伪伪指指令令DB、DW、DD,段段定定义义伪伪指指令令SEGMENT,假定伪指令假定伪指令ASSUME等。等。操操作作数数:伪伪指指令令后后面面的的操操作作数数可可以以是是常常数数、字字符符串串、变变量量、表表达达式式等等,其其个个数数由由具具体体的的伪伪指指令令决决定定,各各个个操操作作数数之之间间必必须以须以“逗号逗号”分隔。分隔。注注释释:伪伪指指令令的的注注释释必必须须以以“;”开开始始,其其作作用用同同指指令令语语句中的注释部分。如:句

73、中的注释部分。如:DATADB10,4,10H;定义一组字节操作数;定义一组字节操作数计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.3.1名字项名字项名字项可以是标号或变量,它们都是用来表示本语句的符号地址名字项可以是标号或变量,它们都是用来表示本语句的符号地址。v标标号号:在在代代码码段段中中定定义义,后后面面跟跟上上“:”。它它有有三三种种属属性性,即即段段、偏移和类型。偏移和类型。v变变量量:在在数数据据段段或或附附加加段段中中定定义义,后后面面不不跟跟冒冒号号,它它也也有有三三种种属属性,即段、偏移和类型。性,即段、偏移和类型。段属性段属性:标号和名字对应存储单元所在段的段地

74、址。:标号和名字对应存储单元所在段的段地址。偏移属性偏移属性:标号和名字对应存储单元所在段的偏移地址。:标号和名字对应存储单元所在段的偏移地址。类类型型属属性性:标标号号、子子程程序序名名的的类类型型可可以以是是NEAR(近近)和和FAR(远远),分分别别表表示示段段内内或或段段间间;变变量量名名的的类类型型可可以以是是BYTE(字节)、(字节)、WORD(字)和(字)和DWORD(双字)等。(双字)等。计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.3.2操作项操作项操作项可以是指令、伪指令或宏指令助记符操作项可以是指令、伪指令或宏指令助记符。对于对于指令指令,汇编程序将其翻译成机器

75、指令,汇编程序将其翻译成机器指令,对对于于伪伪指指令令汇汇编编程程序序将将根根据据其其所所要要求求的的功功能能进进行行处理。处理。对于对于宏指令宏指令,则根据定义展开。,则根据定义展开。计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.3.3操作数项操作数项操操作作数数项项通通常常是是由由常常数数、寄寄存存器器、标标号号、变变量量或或表表达达式式组组成成。数数值值表表达达式式是是在在汇汇编编过过程程中中能能够够由由汇汇编编程程序序计计算算其其值值的的表表达达式式,其其组组成成部部分分在在汇汇编编时时就就能能完完全全确确定定。它通常是一些常量的运算组合。它通常是一些常量的运算组合。v常量常

76、量常常量量是是一一个个立立即即数数,直直接接写写在在汇汇编编语语言言语语句句中中,在在程程序序的的执执行行过过程程中中,它它不不可可能能发发生生变变化化。通通常常,我我们们用用二进制、八进制、十进制或十六进制来书写常量。二进制、八进制、十进制或十六进制来书写常量。例例 如如 : 10101011B、 324Q、 1234D、 1234H、0abcdH、AB等都是常量。等都是常量。计算机科学与技术系计算机科学与技术系汇编语言汇编语言v算术运算符算术运算符算算术术运运算算符符包包括括符符号号:+(正正)、-(负负),运运算算符符:+(加加)、-(减减)、*(乘乘)、/(除除)和和MOD(取取模模)

77、。这这些些运运算算符符和和常常量量、括号可组成数值表达式。括号可组成数值表达式。如:如:120+(321-90)mod3,322*5/32,0abcdH+5,-590等等v逻辑运算符逻辑运算符逻逻辑辑运运算算符符包包括括按按位位操操作作符符和和移移位位操操作作符符。具具体体是是:AND(逻逻辑辑与与)、OR(逻逻辑辑或或)、NOT(逻逻辑辑非非)、XOR(异异或或)、SHL(左左移移位位)和和SHR(右右移移位位)。这这些些逻逻辑辑运运算算符符和和常常量量、括括号号可组成数值表达式。可组成数值表达式。如如:1SHL3,47HAND0FH,NOT56H等等,它它们们的的计计算算结结果果分分别别为

78、:为:8,7和和0A9H。计算机科学与技术系计算机科学与技术系汇编语言汇编语言【例】用算术运算符进行数值表达式运算。例】用算术运算符进行数值表达式运算。 NUM1 EQU25*450;NUM1=50NUM2 EQUNUM1/7;NUM2=7NUM3 DBNUM1MOD7 ;NUM3=1VAR1DB1,2,3,4,5VAR2DB12345NUM4 EQUVAR2-VAR1;NUM4=5NUM5 EQU0FH MOVAL,NUM5SHL4;(;(AL)=11110000BMOVBL,NUM5SHR4;(BL)=00000000B计算机科学与技术系计算机科学与技术系汇编语言汇编语言v关系运算符关系运

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

80、DB0AAAAHGT7FFFH;NUM2=0FFFFHMOVAX,AEQ41H;0FFFFHAXMOVBX,NUM2LTNUM1;0BX计算机科学与技术系计算机科学与技术系汇编语言汇编语言v数值回送运算符数值回送运算符TYPE运算符运算符格式:格式:TYPE变量或标号变量或标号功功能能:分分离离出出其其后后变变量量或或标标号号的的类类型型。如如如如果果果果是是是是变变变变量量量量,将将将将返返返返回回回回该该该该变变变变量量量量的的的的类类类类型型型型对对对对应应应应字字字字节节节节数数数数;如如如如果果果果是是是是标标标标号号号号,则则则则返返返返回回回回代代代代表表表表标标标标号类型的数值

81、。号类型的数值。号类型的数值。号类型的数值。它们之间的关系见下表所示。它们之间的关系见下表所示。类型值类型值124-1-2类型类型BYTEWORDDWORDNEARFAR变量变量标号标号例:例:ARRAYDW1,2,3ADDSI,TYPEARRAY则加法指令被汇编成:则加法指令被汇编成:ADDSI,2计算机科学与技术系计算机科学与技术系汇编语言汇编语言LENGTH运算符运算符格式:格式:LENGTH变量变量功能:功能:取出变量所含的数据存储单元个数取出变量所含的数据存储单元个数。它返回重复操它返回重复操作符作符DUP中的重复数。如果有嵌套的中的重复数。如果有嵌套的DUP,则只返回最外,则只返回

82、最外层的重复数;如果没有操作符层的重复数;如果没有操作符DUP,则返回,则返回1。【例】取出变量占存储单元个数。【例】取出变量占存储单元个数。DATASEGMENTADBABCDEFBDW10DUP(1,2DUP(2)CDB3,20DUP(0)DATAENDS MOVAX,LENGTHA;1AXMOVBX,LENGTH B;10BXMOVCX,LENGTH C;1CX计算机科学与技术系计算机科学与技术系汇编语言汇编语言SIZE运算符运算符格式:格式:SIZE变量变量功能:功能:取出变量所含的数据存储区大小取出变量所含的数据存储区大小。其返回值为:。其返回值为:LENGTHLENGTH变量变量变

83、量变量*TYPE*TYPE变量变量变量变量例如:上例中例如:上例中A、B、C三变量:三变量:SIZEA=LENGTHA*TYPEA=1SIZEB=LENGTHB*TYPEB=20SIZEC=LENGTHC*TYPEC=1计算机科学与技术系计算机科学与技术系汇编语言汇编语言OFFSET运算符运算符格式:格式:OFFSET变量或标号变量或标号功能:分离出其后变量或标号的偏移地址。功能:分离出其后变量或标号的偏移地址。SEG运算符运算符格式:格式:SEG变量或标号变量或标号功能:分离出其后变量或标号所在段的段首址。功能:分离出其后变量或标号所在段的段首址。计算机科学与技术系计算机科学与技术系汇编语言

84、汇编语言【例】假设有下面变量定义:【例】假设有下面变量定义:FIRSTDD12345678H,0;数据段的变量定义数据段的变量定义SCOREDW?,12HNAMEDB10DUP(10)MOVAX,SEGSCORE;代码段的指令代码段的指令MOVBX,SEGNAMEMOVCX,OFFSETSCOREMOVDX,OFFSETNAME由于由于SCORE和和NAME在同一段中定义,所以,在同一段中定义,所以,寄存器寄存器AX和和BX的值是相等的。的值是相等的。假设假设FIRST是数据段的第一个被定义的变量名,它的偏移是数据段的第一个被定义的变量名,它的偏移量为量为0,SCORE的偏移量为的偏移量为8,

85、因为它要跳过二个双字,其,因为它要跳过二个双字,其它如此类推。它如此类推。由于由于NAME在在SCORE之后,且之后,且SCORE之后有之后有二个字,占四个字节,所以,二个字,占四个字节,所以,DX的值要比的值要比CX的值大的值大4。计算机科学与技术系计算机科学与技术系汇编语言汇编语言v属性操作符属性操作符PTR格式:格式:类型类型PTR地址表达式地址表达式在在程程序序中中,我我们们有有时时需需要要对对同同一一个个存存储储单单元元以以不不同同的的属属性性来来访访问问,或或对对一一些些不不确确定定的的存存储储属属性性需需要要显显式式指指定定等等,这这时时我我们们就就需需要要强强制制属属性性操操作

86、作符符PTR。该该操操作作符符的的作作用用有有点点象象C语语言言中中的的类型强制方法。类型强制方法。其其中中:数数据据类类型型是是前前面面所所学学的的各各种种数数据据类类型型,常常用用的的数数据据类类型型有:有:BYTE、WORD、DWORD、NEAR和和FAR等。等。例如指令例如指令MOVBX,1H是错误的,可改写成:是错误的,可改写成:MOVBYTEPTRBX,1H或或MOVWORDPTRBX,1H计算机科学与技术系计算机科学与技术系汇编语言汇编语言段操作符段操作符格式:格式:段寄存器:地址表达式段寄存器:地址表达式功能:用来表示一个标号、变量或地址表达式的段属性。如:功能:用来表示一个标

87、号、变量或地址表达式的段属性。如:MOVAX,ES:BX+SISHORT功能:用来修饰功能:用来修饰JMP指令中转向地址的属性。如:指令中转向地址的属性。如: JMPSHORTNEXT NEXT:MOVAX,BX计算机科学与技术系计算机科学与技术系汇编语言汇编语言THIS格式:格式:THIS数据类型数据类型功功能能:它它为为同同一一存存储储单单元元取取另另一一别别名名,该该别别名名可可具具有有其其自自身身的的数数据据属属性性,但但其其段段地地址址和和偏偏移移量量是是不不变变的的。其其中中:数数据据类类型型是是前前面面所所学学的的各各种种数数据据类类型型,常常用用的的数数据据类类型型有有:BYT

88、E、WORD、DWORD、NEAR和和FAR等。如:等。如:WBUFFEREQUTHISWORDBUFFERDB20DUP(?)这这样样就就给给同同一一片片存存储储单单元元,取取了了二二个个具具有有不不同同数数据据类类型型的的变变量量名名。于于是是,在指令中,引用不同的变量名,就使用其不同的数据属性:在指令中,引用不同的变量名,就使用其不同的数据属性:如果引用变量名如果引用变量名WBUFFER,则是按,则是按“字字”属性来访问;属性来访问;如果引用变量名如果引用变量名BUFFER,则是按,则是按“字节字节”属性来访问。属性来访问。计算机科学与技术系计算机科学与技术系汇编语言汇编语言HIGH和和

89、LOW格式:格式:HIGH常量或地址表达式常量或地址表达式LOW常量或地址表达式常量或地址表达式功功能能:HIGH用用来来分分离离出出其其后后16位位常常量量或或地地址址表表达达式式的的偏偏移移量量的的高高字字节节;LOW用用来来分分离离出出其其后后16位位常常量量或或地地址址表表达达式偏移量的低字节。如:式偏移量的低字节。如:HIGH(1234H+100H),),LOW1234H它们的选取结果分别为:它们的选取结果分别为:13H和和34H。计算机科学与技术系计算机科学与技术系汇编语言汇编语言运算符的优先级运算符的优先级运算符运算符优先级优先级LENGTH、SIZE、(、()、)、1:(段超越

90、):(段超越)2PTR、OFFSET、SEG、TYPE、THIS3HIGH、LOW4*、/、MOD、SHL、SHR5+、-6EQ、NE、LT、LE、GT、GE7NOT8AND9OR、XOR10SHORT11计算机科学与技术系计算机科学与技术系汇编语言汇编语言4.4汇编语言程序上机过程汇编语言程序上机过程编编辑辑文本编辑器,如文本编辑器,如EDIT.COM源程序:文件名源程序:文件名.asm汇汇编编汇编程序,如汇编程序,如MASM.EXE目标模块:文件名目标模块:文件名.obj连连接接连接程序,如连接程序,如LINK.EXE可执行文件:文件名可执行文件:文件名.exe调调试试调试程序,如调试程序

91、,如DEBUG.EXE错误错误错误错误错误错误错误错误应用程序应用程序计算机科学与技术系计算机科学与技术系汇编语言汇编语言开发过程开发过程开发过程开发过程1 1 1 1:源程序的编辑:源程序的编辑:源程序的编辑:源程序的编辑源程序文件要以源程序文件要以ASM为扩展名为扩展名。源程序文件的形成(编辑)可以通过源程序文件的形成(编辑)可以通过任何一个文本编任何一个文本编辑器辑器实现。实现。本书介绍的本书介绍的MASM程序员工作平台程序员工作平台DOS中的全屏幕文中的全屏幕文本编辑器本编辑器EDIT,也可其他程序开发工具中的编辑环境。例,也可其他程序开发工具中的编辑环境。例如:如:EDITtest0

92、1.asm计算机科学与技术系计算机科学与技术系汇编语言汇编语言开发过程开发过程开发过程开发过程2 2 2 2:源程序的汇编:源程序的汇编:源程序的汇编:源程序的汇编汇汇编编是是将将源源程程序序翻翻译译成成由由机机器器代代码码组组成成的的目目标标模模块块文文件的过程件的过程。使用提供的汇编程序是使用提供的汇编程序是MASM.EXE:C:MASMtest01.asm如如果果源源程程序序中中没没有有语语法法错错误误,MASM将将自自动动生生成成一一个个目目标标模模块块文文件件(test01.obj),否否则则MASM将将给给出出相相应应的的错错误误信信息息。这这时时应应根根据据错错误误信信息息,重重

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

94、息重重新新修修改改源源程程序序后后再再汇汇编编、链链接接,直直到到生生成成可可执执行行文件。文件。计算机科学与技术系计算机科学与技术系汇编语言汇编语言开发过程开发过程开发过程开发过程4 4 4 4:可执行程序的调试:可执行程序的调试:可执行程序的调试:可执行程序的调试经经汇汇编编、连连接接生生成成的的可可执执行行程程序序在在操操作作系系统统下下只只要要输输入入文文件名就可以运行:件名就可以运行:C:test01(回车)(回车)操作系统装载该文件进入主存,开始运行。操作系统装载该文件进入主存,开始运行。如如果果出出现现运运行行错错误误,可可以以从从源源程程序序开开始始排排错错,也也可可以以利利用

95、用调试程序帮助发现错误。调试程序帮助发现错误。采用采用DEBUG.EXE调试程序:调试程序:C:DEBUGtest01.exeU计算机科学与技术系计算机科学与技术系汇编语言汇编语言汇编语言程序的上机过程汇编语言程序的上机过程汇编语言程序的上机过程汇编语言程序的上机过程(1 1)建立汇编语言的工作环境)建立汇编语言的工作环境)建立汇编语言的工作环境)建立汇编语言的工作环境为了运行汇编语言程序至少要在磁盘上建立以下文件为了运行汇编语言程序至少要在磁盘上建立以下文件编辑程序,如编辑程序,如EDIT.EXE汇编程序,如汇编程序,如MASM.EXE连接程序,如连接程序,如LINK.EXE调试程序,如调试

96、程序,如DEBUG.COM必要时,还可以建立如必要时,还可以建立如CREF.EXE,EXE2BIN.EXE等文件。等文件。计算机科学与技术系计算机科学与技术系汇编语言汇编语言code segment codecode segment code assume cs:code,ds:code,ss:code,es:code assume cs:code,ds:code,ss:code,es:code org 100H org 100Hbegin: jmp mainbegin: jmp mainnum1 dw 1199Hnum1 dw 1199Hnum2 dw 1166Hnum2 dw 1166Hs

97、um dw ? sum dw ? main proc nearmain proc near mov ax, num1 mov ax, num1 add ax, num2 add ax, num2 mov sum, ax mov sum, ax mov ax, 4c00h mov ax, 4c00h int 21h int 21hmain endpmain endpcode endscode ends end begin end begin(2 2)建立)建立)建立)建立ASMASM文件文件文件文件例:例:CEDIT MYFILE . ASM计算机科学与技术系计算机科学与技术系汇编语言汇编语言(

98、3 3)用)用)用)用MASMMASM程序产生程序产生程序产生程序产生OBJOBJ文件文件文件文件CMASMMASM MYFILE . ASMMicrosoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.ObjectfilenameMYFILE.OBJ:SourcelistingNUL.LST:MYFILE.LSTMYFILE.LSTCross-referenceNUL.CRF:47962+413345Bytessymbolspacefree0WarningErrors0Sev

99、ereErrors计算机科学与技术系计算机科学与技术系汇编语言汇编语言CLINKMYFILE.OBJMicrosoft(R)OverlayLinkerVersion3.64Copyright(C)MicrosoftCorp1983-1988.Allrightsreserved.RunFileMYFILE.EXE:ListFileNUL.MAP:Libraries.LIB:LINK:warningL4021:nostacksegment(4)用)用LINK程序产生程序产生EXE文件文件(5)程序的运行)程序的运行在建立了在建立了.EXE文件后,就可以直接从文件后,就可以直接从DOS执行程序执行程序CMYFILE计算机科学与技术系计算机科学与技术系汇编语言汇编语言第第4章作业章作业Page 155 4.14.54.84.104.144.174.19

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号