四章汇编语言程序格式ppt课件_第1页
四章汇编语言程序格式ppt课件_第2页
四章汇编语言程序格式ppt课件_第3页
四章汇编语言程序格式ppt课件_第4页
四章汇编语言程序格式ppt课件_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 汇编程序功能 伪操作 汇编言语程序格式 汇编言语程序的上机过程第第3章章 汇编言语程序构造汇编言语程序构造编辑程序编辑程序. ASM 文件文件汇编程序汇编程序. OBJ 文件文件衔接程序衔接程序. EXE 文件文件文本编文本编辑器辑器MASMLINK在计算机上运转汇编言语程序的步骤是:在计算机上运转汇编言语程序的步骤是:用编辑程序任何一种文本编辑程序建立用编辑程序任何一种文本编辑程序建立ASMASM文件;文件;用用MASMMASM程序把程序把ASMASM文件转换成文件转换成OBJOBJ文件;文件;用用LINKLINK程序把程序把OBJOBJ文件转换成文件转换成EXEEXE文件;文件;用用DO

2、SDOS命令直接键入文件名就可执行该程序;命令直接键入文件名就可执行该程序;用调试程序用调试程序DEBUG(DEBUG(或或CODEVIEW)CODEVIEW)跟踪调试程序。跟踪调试程序。汇编程序的主要功能:汇编程序的主要功能: 检查源程序,给出出错信息;检查源程序,给出出错信息; 处置伪操作处置伪操作( (伪指令伪指令; ; 展开宏指令;展开宏指令; 产生目的文件产生目的文件(.obj)(.obj)和列表文件和列表文件(.lst)(.lst)。 伪操作是汇编程序对源程序进展汇编时处置的操作,不像机器指令那样是程序运转期间由计算机来执行的完成处置器选择、存储方式定义、数据定义、存储器分配、指示

3、程序开场终了等功能。 处置器选择伪操作处置器选择伪操作 段定义伪操作段定义伪操作 程序开场和终了伪操作程序开场和终了伪操作 数据定义及存储器分配伪操作数据定义及存储器分配伪操作 表达式赋值伪操作表达式赋值伪操作 地址计数器与对准伪操作地址计数器与对准伪操作 基数控制伪操作基数控制伪操作 这类伪操作普通放在程序的最前面,如不给出这类伪操作普通放在程序的最前面,如不给出,那么汇编那么汇编程序默许值为程序默许值为 .8086。段定义伪操作的格式:段定义伪操作的格式: 1. 完好的段定义伪指令完好的段定义伪指令是是0 0。默以为默以为 PARA PARA3) 3) 组合方式组合方式组合方式有六种类型可

4、供选择。组合方式有六种类型可供选择。 1 1PRIVATE PRIVATE 该段为私有段,在衔接时将不与其他同名段合并该段为私有段,在衔接时将不与其他同名段合并2 2PUBLIC PUBLIC 该段在衔接时可以把不同模块的同名段相衔接而构成一该段在衔接时可以把不同模块的同名段相衔接而构成一个段。个段。 每一段从小段的边境开场,所以各段之间有小于每一段从小段的边境开场,所以各段之间有小于1616个字节的个字节的间隙。间隙。3 3COMMON COMMON 该段在衔接时可以把不同模块中的同名段重叠而形该段在衔接时可以把不同模块中的同名段重叠而形 成一个段,由于各同名段有一样的起始地址,所以会产生覆

5、盖。成一个段,由于各同名段有一样的起始地址,所以会产生覆盖。4 4STACK STACK 把不同模块的同名段组合而成一个堆栈段。各段之间没把不同模块的同名段组合而成一个堆栈段。各段之间没有间隙。有间隙。5 5 MEMORY MEMORY 同同PUBLICPUBLIC6 6AT AT 表达式表达式 使段地址是表达式所计算出来的使段地址是表达式所计算出来的1616位值,位值,CSCS除外。除外。 默以为默以为 PRIVATE PRIVATE 【例】有两个模块,各模块段定义如下【例】有两个模块,各模块段定义如下模块模块1 1: DATA1DATA1SEGMENT PARA PUBLIC SEGMEN

6、T PARA PUBLIC DATA1DATA1M1M1DB 45H DUPDB 45H DUP0 0DATA1DATA1ENDSENDSDATA2DATA2SEGMENT PARA COMMON SEGMENT PARA COMMON DATA2DATA2N1 DB 102H DUPN1 DB 102H DUP0 0DATA2DATA2ENDSENDSEND END 模块模块2 2:DATA1DATA1SEGMENT PARA PUBLIC SEGMENT PARA PUBLIC DATA1DATA1M2M2DB 104H DUPDB 104H DUP11H11HDATA1DATA1ENDS

7、ENDSDATA2DATA2SEGMENT PARA COMMON SEGMENT PARA COMMON DATA2DATA2N2N2DB 105H DUPDB 105H DUP0 0DATA2DATA2ENDSENDSDATA3DATA3SEGMENTSEGMENTT1T1DB 50 DUPDB 50 DUP20H20HDATA3DATA3ENDSENDSENDEND该段的定位组合方式表示图如下图。该段的定位组合方式表示图如下图。 4) 4) 运用类型运用类型 USE16 USE16 运用运用1616位寻址方式位寻址方式 段长段长64K64K USE32 USE32 运用运用3232位寻址

8、方式位寻址方式 段长段长4G4G 5) 5) 类别类别 在引号中给出衔接时组成的段组的类型名。在衔接后构在引号中给出衔接时组成的段组的类型名。在衔接后构成的装入模块中,可使一样类别的段位置靠在一同。成的装入模块中,可使一样类别的段位置靠在一同。假定伪指令假定伪指令ASSUME格式:格式:ASSUME 段存放器:段名段存放器:段名 ,段存放器:,段存放器:段名段名功能:建立段存放器与段之间的对应关系。该伪指功能:建立段存放器与段之间的对应关系。该伪指令普通出如今代码段中。令普通出如今代码段中。 DATA1SEGMENTADB 1,2,3DATA1ENDSCODESEGMENTASSUMEDS:D

9、ATA1,CS:CODE 其中段存放器名必需是其中段存放器名必需是CS ,DS,ES 和和SS(对于对于386 及后继机及后继机型还有型还有FS 和和GS)中的一个。段名必需是由中的一个。段名必需是由SEGMENT定义的段定义的段中的段名。中的段名。 段定义伪操作:段定义伪操作:完好的段定义格式举例完好的段定义格式举例 data segment ; 定义数据段定义数据段 data ends;-extra segment ; 定义附加段定义附加段 extra ends;-code segment ; 定义代码段定义代码段 assume cs:code, ds:data, es:extrastar

10、t: mov ax, data mov ds, ax ; 段地址段地址 段存放器段存放器 code ends end startcode segmentmain proc far assume start: push ds mov ax, 0 push ax retmain endpcode ends end startcode segmentcode segmentassume assume start:start: mov ax,4c00h mov ax,4c00h int 21h int 21hcode endscode ends end start end start 例:一个完好的段

11、定义格式例:一个完好的段定义格式STACK SEGMENT STACK ; 定义堆栈段定义堆栈段STACK . ; 分配堆栈段的大小分配堆栈段的大小STACK ENDSDATA SEGMENT ; 定义数据段定义数据段 . ; 定义数据定义数据DATA ENDSCODE SEGMENT CODE ;定义代码段定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA ; 程序开场程序开场 MOV DS,AX . ; 程序代码程序代码 MOV AX,4C00H ; 程序终止,前往程序终止,前往DOS INT 21HCODE ENDS ;代码段终

12、了代码段终了. ;子程序代码子程序代码END START ;汇编终了汇编终了 例:一个完好的段定义格式例:一个完好的段定义格式 2. 存储模型与简化段定义伪指令存储模型与简化段定义伪指令 前面引见了完好的段定义格式,用完好段定义格式虽然可以控制前面引见了完好的段定义格式,用完好段定义格式虽然可以控制段的各种属性,但程序员很少运用。如今的汇编程序提供了一种简化段的各种属性,但程序员很少运用。如今的汇编程序提供了一种简化的段定义方式,它使定义段更简单、方便。详细方式如下:的段定义方式,它使定义段更简单、方便。详细方式如下: .MODEL SMALL;定义存储方式定义存储方式.STACK ;定义堆栈

13、段定义堆栈段.DATA ;定义数据段定义数据段 . ;定义数据定义数据.CODE ;定义代码段定义代码段.STARTUP ;程序起始点,并建立程序起始点,并建立DS和和SS内容内容 . ;程序代码程序代码.EXIT 0 ;程序终了点,前往程序终了点,前往DOS. ;子程序子程序END ;汇编终了汇编终了存储方式与简化段定义伪操作存储方式与简化段定义伪操作(1) MODEL 伪操作伪操作 .MODEL 存储方式存储方式 ,言语类型言语类型 ,操作系统类型操作系统类型 ,堆堆栈选项栈选项 存储方式:存储方式:tiny 一切数据和代码都放在一个段一切数据和代码都放在一个段 (0100H) small

14、 一切数据和代码各放在一个段一切数据和代码各放在一个段 medium 代码运用多个段代码运用多个段 ,数据合并一个段,数据合并一个段 compact 一切代码运用一个段一切代码运用一个段 ,数据可放多个段,数据可放多个段 large 数据和代码都可用多个段数据和代码都可用多个段 huge 数据和代码都可用多个段数据和代码都可用多个段 ,数据段可超越,数据段可超越64K flat 允许用允许用32位偏移量,位偏移量,DOS下不允许。下不允许。 TINY:该存储类型是为编写:该存储类型是为编写COM文件类型而设置的。文件类型而设置的。 SMALL:一切的数据变量必需在一个数据段之内,一切的代码也:

15、一切的数据变量必需在一个数据段之内,一切的代码也必需在一个代码段之内。在这种模型下,数据段存放器的内容坚持不必需在一个代码段之内。在这种模型下,数据段存放器的内容坚持不变,一切转移也都是段内转移。变,一切转移也都是段内转移。 MEDIUM:一切的数据变量必需在一个数据段之内,但代码段可以:一切的数据变量必需在一个数据段之内,但代码段可以有多个。在这种模型下,数据段存放器的内容坚持不变,转移可以是有多个。在这种模型下,数据段存放器的内容坚持不变,转移可以是段间转移。段间转移。 COMPACT:数据段可以有多个,但代码段只能有一。:数据段可以有多个,但代码段只能有一。 LARGE:数据段和代码段都

16、可以有多个,但一个数组的字节数不:数据段和代码段都可以有多个,但一个数组的字节数不能超越能超越64KB。 HUGE:数据段和代码段都可以有多个,一个数组的字节数也可以:数据段和代码段都可以有多个,一个数组的字节数也可以超越超越64KB。 FLAT:只能在:只能在80386及其以后的计算机系统中运转。及其以后的计算机系统中运转。SMALL存储方式存储方式 普通的程序都可用这种方式。在小型方式下,一个程序至多只能普通的程序都可用这种方式。在小型方式下,一个程序至多只能有一个代码段和一个数据段,每段不大于有一个代码段和一个数据段,每段不大于64KB。 这里的数据段是指数据段、堆栈段和附加段的总和,它

17、们共用同这里的数据段是指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不可超越一个段基址,总长度不可超越64KB;因此小方式下程序的最大长度为;因此小方式下程序的最大长度为128KB。 访问操作数或指令都只需求运用访问操作数或指令都只需求运用16位偏移地址;这意味着诸如指位偏移地址;这意味着诸如指令转移、程序调用以及数据访问等都是近属性令转移、程序调用以及数据访问等都是近属性NEAR,即小型方,即小型方式下的调用类型和数据指针缺省分别为近调用和近指针。式下的调用类型和数据指针缺省分别为近调用和近指针。.model small.model small.stack 100H.stack

18、 100H.data.data .code.code.startup.startup .exit 0.exit 0endend .MODEL 存储方式存储方式 ,言语类型,言语类型 ,操作系统类型,操作系统类型 ,堆栈选项,堆栈选项 言语类型阐明可使汇编言语程序与其它言语程序到达共享的目的。一切有效言语类型阐明可使汇编言语程序与其它言语程序到达共享的目的。一切有效的言语类型可以是的言语类型可以是C、BASIC、FORTRAN等。等。操作系统类型阐明程序运转于哪个操作系统之下,操作系统类型阐明程序运转于哪个操作系统之下,OS_DOS该选项的缺省值。该选项的缺省值。堆栈选项类型的值有二个可选值:堆

19、栈选项类型的值有二个可选值:NEARSTACK和和FARSTACK。其中:。其中:NEARSTACK是该选项的缺省堆栈类型。是该选项的缺省堆栈类型。NEARSTACK堆栈段和数据段是同一段;堆栈段和数据段是同一段;FARSTACK堆栈段和数据段是不同的段,且堆栈不在段组堆栈段和数据段是不同的段,且堆栈不在段组DGROUP中。中。例如:例如:. MODEL SMALL,C,OS_DOS,FARSTACK 简化的段定义伪操作简化的段定义伪操作 .code name .data .data? .fardata name 默许名:默许名:FAR_DATA .fardata? name 默许名:默许名:

20、FAR_BSS .const .stack size 默以为默以为1KBv 简化段定义伪指令指明一个逻简化段定义伪指令指明一个逻辑段的开场,同时自动终了前面辑段的开场,同时自动终了前面的一个段,不用的一个段,不用ENDS作为段终作为段终了符。了符。v 采用简化段定义伪指令前,需采用简化段定义伪指令前,需有有.MODEL存储方式语句。存储方式语句。v 运用简化段定义,各段称号和运用简化段定义,各段称号和其他用户所需的信息可以运用其他用户所需的信息可以运用MASM预定义符号,例如:预定义符号,例如:v data表示由表示由.data等定义的数据等定义的数据段的段名。段的段名。例:简化段定义例:简化

21、段定义 . MODEL SMALL . STACK 100H . DATA . CODESTART: MOV AX,DATA MOV DS,AX MOV AX,4C00H INT 21H END START.model small.model small.data.data.code.code.startup.startup .exit 0.exit 0end end .model small .model small .data .data .code .codestart: mov ax, datastart: mov ax, data mov ds, ax mov ds, ax mov

22、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格式:段组名格式:段组名 GROUP 数据段名数据段名1,数据段名,数据段名2功能:汇编程序把各数

23、据段组成一个段组,以便程序在访问各数据段功能:汇编程序把各数据段组成一个段组,以便程序在访问各数据段时运用一个数据段存放器时运用一个数据段存放器DS。如:。如: data1 segment data1 ends data2 segment data2 ends datagroup group data1,data2 code segment assume cs:code,ds:datagroup start:mov ax,datagroup mov ds,ax 3. 段组定义伪操作段组定义伪操作dseg1 segment word public dseg1 segment word publi

24、c datadata dseg1 ends dseg1 ends dseg2 segment word public dseg2 segment word public datadata dseg2 endsdseg2 ends datagroup group dseg1, dseg2datagroup group dseg1, dseg2cseg segment para public cseg segment para public codecode assume cs:cseg, ds:datagroup assume cs:cseg, ds:datagroupstart:start:

25、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 startdata1 segment word data1 segment word const1 dw 100 const1 dw 100data1 endsdata1 ends data2 segment word data2 segment word var1 dw ? var1 dw ?data2 endsdata2 en

26、dsdatagroup group data1,data2datagroup group data1,data2code segment code segment assume cs:code, ds:datagroupassume cs:code, ds:datagroup mov ax, datagroup mov ds, ax mov ax, const1 mov var1, ax mov ax, 4c00h int 21hcode ends end start4.2.3 程序开场和终了伪操作程序开场和终了伪操作可以可以没有没有在汇编程序在汇编程序MASM中,提供了二组简化的代码伪指令:

27、中,提供了二组简化的代码伪指令: .STARTUP 和和 .EXIT。.STARTUP在代码段的开场,用于自动初始化存放器在代码段的开场,用于自动初始化存放器DS、SS和和SP;.EXIT用于终了程序的运转。用于终了程序的运转。.model small.data.code.startup .exit 0end .model small .data .codestart: mov ax, data mov ds, ax mov ax, 4c00h int 21h end start4.2.4 数据定义及存储器分配伪操作:数据定义及存储器分配伪操作:变量名必需是一个合法的标识符,它可以写,也可以不

28、写;变量名必需是一个合法的标识符,它可以写,也可以不写;助记符用于确定内存单元的数据类型,如:助记符用于确定内存单元的数据类型,如: DB DB字节、字节、DW DW 字字 、DD DD 双字双字 、DFDF6 6字字节、节、DQDQ四字、四字、DTDT1010字节。字节。操作数是定义内存单元时的初值表达式,一个定义语句可以操作数是定义内存单元时的初值表达式,一个定义语句可以有多个初值表达式,各表达式之间必需用逗号有多个初值表达式,各表达式之间必需用逗号,分开;假分开;假设某个存储单元没有初值表达式,那么必需用一个问号设某个存储单元没有初值表达式,那么必需用一个问号?来表示;来表示;在定义语句

29、的后面可以书写注释内容,也可以不写。在定义语句的后面可以书写注释内容,也可以不写。DATA_BYTE DB 10,4,10H,?DATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,?DATA_WORD DW 100,100H,-5,?例:例:1 - 0AH 04H 10H - 64H 00H 00H 01H 01H FBH FFH -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 【例】【例】DATA1 DB 10,4,10HDATA2 DW 100,100H,-5DATA3 DD 3*20,0FFFDH0 41 06

30、 40 00 00 1F BF F3 C0 00 00 0F DF F0 00 00 ADATA1DATA2DATA310d410hARRAY DB HELLO DB AB DW AB 48H 45H 4CH 4CH 4FH 41H 42H 42H 41H 41H ARRAY DW1DD12345678HDW2DD0abcd1243H 78H 56H 34H 12H 43H 12H CDH ABH DW1 DW2 例例例:例:3例2图例3图反复阐明符反复阐明符DUP 从前面的内容里,我们知道了定义少量内存变量从前面的内容里,我们知道了定义少量内存变量的定义方式,但假设在程序中要阐明的定义方式,

31、但假设在程序中要阐明50个、个、100个、个、200个甚至更多的、同类型的内存变量时,假设采用个甚至更多的、同类型的内存变量时,假设采用前面所学的方法,对它们一一加以阐明显然是不可前面所学的方法,对它们一一加以阐明显然是不可行的。为此,汇编言语提供了变量的反复阐明符行的。为此,汇编言语提供了变量的反复阐明符DUP,其阐明的普通方式如下:,其阐明的普通方式如下: repeat_count DUP (表达式表达式, 表达式表达式, , 表达式表达式) 解释:解释:repeat_count是反复次数,是反复次数,(表达式表达式, 表达表达式式, , 表达式表达式)是被反复的部分,是被反复的部分,“表

32、达式可以是表达式可以是存储单元的初值,也可以是含义另一个存储单元的初值,也可以是含义另一个DUP的式子。的式子。假设在表达式的括号中有多个表达式,那么,它们假设在表达式的括号中有多个表达式,那么,它们之间要用逗号之间要用逗号,分开。分开。0 10 2-0 00 10 2-0 0BUF1BUF2-100个字节个字节例:例: BUF1 DB 2 DUP0,1,2,?,? BUF2 DB 100 DUP?例如:例如: BUFFER DB 100 DUP(?)BUFFER DB 100 DUP(?)STRING DB 120 DUP(ABCDE), 0STRING DB 120 DUP(ABCDE),

33、 0DB 2 DUP (0,2 DUP(1,2),3)DB 2 DUP (0,2 DUP(1,2),3)DATA1 DW 50 DUP(10H, 20 DUP(1,2,3), 20H) DATA1 DW 50 DUP(10H, 20 DUP(1,2,3), 20H) POINTS DD 12, 30 DUP(0)POINTS DD 12, 30 DUP(0)从上面的例子可看出:用从上面的例子可看出:用DUPDUP阐明内存变量相当于阐明内存变量相当于在高级言语中定义数组。在高级言语中定义数组。 - buffer buffer -100字节画出存储单元的分配图,计算分配字节数画出存储单元的分配图,

34、计算分配字节数强迫属性操作符强迫属性操作符 PTR 在程序中,我们有时需求对同一个存储单元以不在程序中,我们有时需求对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需求同的属性来访问,或对一些不确定的存储属性需求显式指定等,这时,我们就需求强迫属性操作符显式指定等,这时,我们就需求强迫属性操作符PTR。该操作符的作用有点象。该操作符的作用有点象C言语中的类型强迫言语中的类型强迫方法。方法。 对于指令:对于指令:MOV BX, 1H,其目的操作数,其目的操作数BX是存放器间接寻址方式,它指向一个存储单元。在是存放器间接寻址方式,它指向一个存储单元。在作传送操作时,是把作传送操作时,是

35、把“1H扩展成扩展成8位作字节传送,位作字节传送,还是扩展成还是扩展成16位作字传送呢?这就使该指令具有二位作字传送呢?这就使该指令具有二义性,由于义性,由于BX指向的存储单元可以字节或字的首指向的存储单元可以字节或字的首地址。含有该指令的程序在汇编时,能够会产生警地址。含有该指令的程序在汇编时,能够会产生警告或出错信息。告或出错信息。 为了使指令中存储单元操作数具有明确的属性,我们可以运用强迫为了使指令中存储单元操作数具有明确的属性,我们可以运用强迫属性操作符属性操作符PTRPTR。其普通格式为:。其普通格式为: 数据类型数据类型PTRPTR地址表达式地址表达式 其中:数据类型是前面所学的各

36、种数据类型,常用的数据类型有:其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR和和FARFAR等。等。为了明确指令中存储单元的属性,可把指令为了明确指令中存储单元的属性,可把指令“MOV BX, 1HMOV BX, 1H可改写成:可改写成: MOV byte ptr BX, 1H MOV byte ptr BX, 1H 或或 MOV word ptr BX, 1H MOV word ptr BX, 1H 在指令中用操作符PTR强迫后,不论其后的地址表达式原数据类型是什么,在本指令中就以PTR前面的类型为准。该强

37、迫属性只在本指令有效,是一种暂时性的属性,它不会改动原内存单元的定义属性。例如: W1 DW1234H, 5678H B1 DB2 DB5 D1 DD23456789H MOV AX, word ptr b1 ;把B1开场的二个字节拼接成一个字,执行后,(AX)=0502HMOV BH, byte ptr w1 ;把字W1的低字节传送给BH,执行后,(BH)=34HMOV CH, byte ptr w1+1;把字W1的高字节传送给CH,执行后,(CH)=12HMOV word ptr d1, 12H ;把双字D1的低字修正成0012H,执行后,(D1)=23450012H 上面指令中的强迫属性

38、是暂时属性,它不能改动这些变量在定义时的永久属性。OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ;字节指令 MOV OPER2, 0 ;字指令OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 类型不匹配 MOV AX, WORD PTR OPER1+1 MOV AL, BYTE PTR OPER2(AX)=3402H (AL)=34H例例BYTE_ARRAY LABEL BYTEWORD_ARRAY DW 50 DUP (?) tos LABEL WORD L LABEL NEAR

39、 LABEL 伪操作:伪操作: BYTE_ARRAY BYTE_ARRAY WORD_ARRAY WORD_ARRAY tos tos 50字0064H0064H 同一个变量可以具有不同的类型属性,除了可以用同一个变量可以具有不同的类型属性,除了可以用PTRPTR来定义外,来定义外,还可以用还可以用LABELLABEL伪操作来定义伪操作来定义 符号名符号名 LABEL LABEL 类型类型其中:常用的类型有其中:常用的类型有BYTEBYTE、WORDWORD、 DWORDDWORD、NEARNEAR和和FARFAR等等4.2.5 表达式赋值伪操作:表达式赋值伪操作:等价语句的普通运用格式如下:

40、等价语句的普通运用格式如下:符号名符号名EQUEQU表达式表达式作用是左边的符号名代表右边的表达式。作用是左边的符号名代表右边的表达式。留意:等价语句不会给符号名分配存储空间,符留意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名,也不能被重新定义号名不能与其它符号同名,也不能被重新定义例例 ALPHA EQU 9ALPHA EQU 9BETA EQU ALPHA+18BETA EQU ALPHA+18BB EQU BP+8BB EQU BP+8 汇编言语提供了用等号 “= 来定义符号常数的方法,即可用符号名代表一个常数。其普通格式如下: 符号名数值表达式 数值表达式在汇编时应该可

41、以计算出数值,它不能含有向前援用的符号称号。用等号语句定义的符号可以被反复定义。例如: ABC = 10 + 200 * 5 ;ABC的值为1010ABC1 = 5 * ABC + 21 ;ABC1的值为5071COUNT = 1 ;COUNT的值为1COUNT = 2*COUNT + 1 ;COUNT的值为3EMP = 7EMP = EMP+14.2.6 地址计数器与对准伪操作:地址计数器与对准伪操作:1. 1. 地址计数器地址计数器 $ $ :保管当前正在汇编的指令的地址:保管当前正在汇编的指令的地址 ORG $+8 ; ORG $+8 ; 跳过跳过8 8个字节的存储区个字节的存储区 JN

42、E $+6 ; JNE $+6 ; 转向地址是转向地址是 JNEJNE指令指令 的首址的首址 +6+6 JMP $+2 ; JMP $+2 ;转向下一条指令转向下一条指令$ $ 用在伪操作的参数字段:用在伪操作的参数字段:表示地址计数器的当前值表示地址计数器的当前值 ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 00H 01H 00H 02H 00H 7CH 00H 03H 00H 04H 00H 82H ARRAY 007E007E007800780074007400760076007A007Av 地址计数器地址计数器 $ :v保管当前正在汇编的指令的地址。保管当前正在

43、汇编的指令的地址。v例:例: ARRAY DW 1,2,$+4,3,4,$+4,v又假定又假定ARRAY分配的偏移地址为分配的偏移地址为0074,v那么存储区分配情况如下图。那么存储区分配情况如下图。0 00 20 07 C0 00 30 00 40 1ARRAY00740 08 20 00078007E0078+4=007C007E+4=0082 SEG1 SEGMENT SEG1 SEGMENT ORG 10 ORG 10 VAR1 DW 1234H VAR1 DW 1234H ORG 20 ORG 20 VAR2 DW 5678H VAR2 DW 5678H ORG $+8 ORG $+

44、8 VAR3 DW 7H VAR3 DW 7HSEG1 ENDSSEG1 ENDSBUFFER LABEL BYTEBUFFER LABEL BYTE ORG $+8 ORG $+8 BUFFER DB 8 DUP (?) BUFFER DB 8 DUP (?) ORG 100HSTART: 2. ORG 伪操作伪操作 伪指令的作用是:通知汇编程序,本伪指令伪指令的作用是:通知汇编程序,本伪指令下面的内存变量从该下面的内存变量从该“数值表达式所指定的地址数值表达式所指定的地址开场分配。开场分配。ORG 数值表达式数值表达式伪指令的作用是:通知汇编程序,本伪伪指令的作用是:通知汇编程序,本伪指令

45、下面的内存变量从该指令下面的内存变量从该“数值表达式数值表达式所指定的地址开场分配。所指定的地址开场分配。如:如:DATA SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 0C596H DATA ENDS A 54 7VECT10AH14H9 6C 5VECT2B DW 2 DUP (?) A DB morning EVEN3. 偶对齐伪指令偶对齐伪指令EVEN 偶对齐伪指令格式:偶对齐伪指令格式: EVEN 伪指令的作用是:通知汇编程序伪指令的作用是:通知汇编程序(Assember),本伪指令下面的内存变量从下一个偶地址单元开本伪指令下面的内存变量

46、从下一个偶地址单元开场分配。场分配。4. 对齐伪指令对齐伪指令ALIGN 对齐伪指令格式:对齐伪指令格式: ALIGN Num其中:其中:Num必需是必需是2的幂,如:的幂,如:2、4、8和和16等。等。 伪指令的作用是:通知汇编程序,本伪指令下伪指令的作用是:通知汇编程序,本伪指令下面的内存变量必需从下一个能被面的内存变量必需从下一个能被Num整除的地址整除的地址开场分配。开场分配。例例: ALIGN 4 ALIGN 2 ; EVEN4.2.7 基数控制伪操作:基数控制伪操作:. RADIX 表达式表达式 ; 规定无标志数的基规定无标志数的基数数MOV BX, 0FFHMOV BX, 178

47、.RADIX 16MOV BX, 0FFMOV BX, 178D 4.3 汇编言语程序格式汇编言语程序格式伪指令语句格式如下:伪指令语句格式如下: 符号名符号名 伪指令符伪指令符 操作数操作数 ;注释;注释 符号名:符号名是伪指令语句的一个可选项。符号名:符号名是伪指令语句的一个可选项。 伪指令符:伪指令符指定汇编程序要完成的详细操作,如伪指令符:伪指令符指定汇编程序要完成的详细操作,如数据定义伪指令数据定义伪指令DBDB、DWDW、DDDD,段定义伪指令,段定义伪指令SEGMENTSEGMENT,假定伪,假定伪指令指令ASSUMEASSUME等。等。 操作数:伪指令后面的操作数可以是常数、字

48、符串、变量、操作数:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由详细的伪指令决议,各个操作数之间必表达式等,其个数由详细的伪指令决议,各个操作数之间必需以需以“逗号分隔。逗号分隔。 注释:伪指令的注释必需以注释:伪指令的注释必需以“;开场,其作用同指令语;开场,其作用同指令语句中的注释部分。如:句中的注释部分。如: DATA DB 10 DATA DB 10,4 4,10H10H;定义一组;定义一组字节操作数字节操作数4.3.1 名字项名字项名字项可以是标号或变量,它们都是用来表示本语句的符号地址。名字项可以是标号或变量,它们都是用来表示本语句的符号地址。 标号:在代码段中定

49、义,后面跟上标号:在代码段中定义,后面跟上“:。它有三种属性,即段、:。它有三种属性,即段、偏移和类型。偏移和类型。 变量:在数据段或附加段中定义,后面不跟冒号,它也有三种属性,变量:在数据段或附加段中定义,后面不跟冒号,它也有三种属性,即段、偏移和类型。即段、偏移和类型。 段属性:标号和名字对应存储单元所在段的段地址。段属性:标号和名字对应存储单元所在段的段地址。 偏移属性:标号和名字对应存储单元所在段的偏移地址。偏移属性:标号和名字对应存储单元所在段的偏移地址。 类型属性:标号、子程序名的类型可以是类型属性:标号、子程序名的类型可以是NEAR近和近和FAR远,分别表示段内或段间;变量名的类

50、型可以是远,分别表示段内或段间;变量名的类型可以是BYTE字字节、节、WORD字和字和DWORD双字等。双字等。4.3.2 操作项操作项 操作项可以是指令、伪指令或宏指令助记符。操作项可以是指令、伪指令或宏指令助记符。对于指令,汇编程序将其翻译成机器指令,对于指令,汇编程序将其翻译成机器指令,对于伪指令汇编程序将根据其所要求的功能进展处置。对于伪指令汇编程序将根据其所要求的功能进展处置。对于宏指令,那么根据定义展开。对于宏指令,那么根据定义展开。4.3.3 操作数项操作数项 操作数项通常是由常数、存放器、标号、变量或表操作数项通常是由常数、存放器、标号、变量或表达式组成。数值表达式是在汇编过程

51、中可以由汇编程序达式组成。数值表达式是在汇编过程中可以由汇编程序计算其值的表达式,其组成部分在汇编时就能完全确定。计算其值的表达式,其组成部分在汇编时就能完全确定。它通常是一些常量的运算组合。它通常是一些常量的运算组合。常量常量 常量是一个立刻数,直接写在汇编言语语句中,在常量是一个立刻数,直接写在汇编言语语句中,在程序的执行过程中,它不能够发生变化。通常,我们用程序的执行过程中,它不能够发生变化。通常,我们用二进制、八进制、十进制或十六进制来书写常量。二进制、八进制、十进制或十六进制来书写常量。 例如:例如:10101011B、324Q、1234D、1234H、0abcdH、AB等都是常量。

52、等都是常量。 v算术运算符算术运算符v 算术运算符包括符号:算术运算符包括符号:+正、正、-负,运算符:负,运算符:+加、加、-减、减、*乘、乘、/除和除和MOD取模。这些运算符和常量、取模。这些运算符和常量、括号可组成数值表达式。括号可组成数值表达式。v如:如:120+321-90mod 3,322*5/32,0abcdH+5,-590等等v 逻辑运算符逻辑运算符v 逻辑运算符包括按位操作符和移位操作符。详细是:逻辑运算符包括按位操作符和移位操作符。详细是:AND逻辑与、逻辑与、OR逻辑或、逻辑或、NOT逻辑非、逻辑非、XOR异或、异或、SHL左移位和左移位和SHR右移位。这些逻辑运算符和常

53、量、括号右移位。这些逻辑运算符和常量、括号可组成数值表达式。可组成数值表达式。v如:如:1 SHL 3,47H AND 0FH,NOT 56H等,它们的计算结果分等,它们的计算结果分别为:别为:8,7和和0A9H。 【例】用算术运算符进展数值表达式运算。【例】用算术运算符进展数值表达式运算。NUM1 EQU25*4 50 ;NUM1=50NUM2 EQUNUM1 / 7 ;NUM2=7NUM3 DBNUM1 MOD 7 ;NUM3=1VAR1DB1,2,3,4,5VAR2DB12345NUM4 EQUVAR2-VAR1 ;NUM4=5NUM5 EQU0FH MOVAL,NUM5 SHL 4;A

54、L=11110000BMOVBL,NUM5 SHR 4; BL=00000000Bv关系运算符关系运算符v关系运算符包括符号:关系运算符包括符号:EQEQ相等、相等、NENE不等、不等、LTLT小于、小于、GTGT大于、大于、LELE小于等于和小于等于和GEGE大于等于。这些关系运算符和常量、括号也可组成数值大于等于。这些关系运算符和常量、括号也可组成数值表达式。该表达式的计算结果规定如下:表达式。该表达式的计算结果规定如下:v 假设关系不成立,那么该数值表达式的计算结果为假设关系不成立,那么该数值表达式的计算结果为0 0;否那么;否那么,其结果为,其结果为0FFFFH0FFFFH。v【例】用

55、关系运算符进展数值表达式运算。【例】用关系运算符进展数值表达式运算。vNUM1NUM1 DBDB10 LT 510 LT 5 ;NUM1=0NUM1=0vNUM2NUM2 DBDB0AAAAH GT 7FFFH 0AAAAH GT 7FFFH ;NUM2=0FFFFHNUM2=0FFFFHv MOV MOVAXAX,A A EQ 41H EQ 41H;0FFFFHAX0FFFFHAXv MOV MOVBXBX,NUM2 LT NUM1NUM2 LT NUM1;0BX0BXv 数值回送运算符数值回送运算符vTYPETYPE运算符运算符v格式:格式:TYPE TYPE 变量或标号变量或标号v功能:

56、分别出其后变量或标号的类型。假设是变量,将前往该变量功能:分别出其后变量或标号的类型。假设是变量,将前往该变量的类型对应字节数;假设是标号,那么前往代表标号类型的数值。它的类型对应字节数;假设是标号,那么前往代表标号类型的数值。它们之间的关系见下表所示。们之间的关系见下表所示。类型值类型值124-1-2类型类型BYTEWORDDWORDNEARFAR变量变量标号标号例:例:ARRAY DW 1,2,3ADD SI,TYPE ARRAY那么加法指令被汇编成:那么加法指令被汇编成:ADD SI,2 LENGTH LENGTH运算符运算符格式:格式:LENGTH LENGTH 变量变量功能:取出变量

57、所含的数据存储单元个数。它前往反复操功能:取出变量所含的数据存储单元个数。它前往反复操作符作符DUPDUP中的反复数。假设有嵌套的中的反复数。假设有嵌套的DUPDUP,那么只前往最外,那么只前往最外层的反复数;假设没有操作符层的反复数;假设没有操作符DUPDUP,那么前往,那么前往1 1。 【例】取出变量占存储单元个数。【例】取出变量占存储单元个数。 DATA DATASEGMENTSEGMENT A A DBDBABCDEFABCDEF B B DWDW10 DUP10 DUP1 1,2DUP2DUP2 2 C C DBDB3 3,2020 DUPDUP0 0 DATA DATAENDSEN

58、DS MOVMOVAXAX,LENGTH ALENGTH A;1AX1AXMOVMOVBXBX,LENGTHLENGTHB B;10BX10BXMOVMOVCXCX,LENGTHLENGTHC C;1CX1CX SIZE SIZE运算符运算符格式:格式:SIZE SIZE 变量变量功能:取出变量所含的数据存储区大小。其前往值为:功能:取出变量所含的数据存储区大小。其前往值为: LENGTH LENGTH 变量变量 * * TYPE TYPE 变量变量例如:上例中例如:上例中A A、B B、C C三变量:三变量: SIZE A = LENGTH A SIZE A = LENGTH A* *TYP

59、E A = 1TYPE A = 1 SIZE B = LENGTH B SIZE B = LENGTH B* *TYPE B = 20TYPE B = 20 SIZE C = LENGTH C SIZE C = LENGTH C* *TYPE C = 1TYPE C = 1 OFFSET OFFSET运算符运算符格式:格式:OFFSET OFFSET 变量或标号变量或标号功能:分别出其后变量或标号的偏移地址。功能:分别出其后变量或标号的偏移地址。 SEG SEG 运算符运算符格式:格式:SEG SEG 变量或标号变量或标号功能:分别出其后变量或标号所在段的段首址。功能:分别出其后变量或标号所在

60、段的段首址。【例】假设有下面变量定义:【例】假设有下面变量定义: FIRST FIRST DD DD12345678H, 012345678H, 0 ; ;数据段的变量定义数据段的变量定义 SCORE SCOREDWDW?, 12H?, 12H NAME NAME DB DB10 DUP10 DUP1010 MOV MOVAXAX,SEG SCORE ;SEG SCORE ;代码段的指令代码段的指令 MOV MOVBXBX,SEG NAMESEG NAME MOV MOVCXCX,OFFSET SCOREOFFSET SCORE MOV MOVDXDX,OFFSET NAMEOFFSET NA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论