第4章佑指令及汇编语言源程序结构 第4章指令及汇編语言源程序结构 41汇编程序结构 42汇编语言语句格式 43伪指令语句 44标号、变量和表达式 45段的组织 46程序段前缀 BACK
第4章 伪指令及汇编语言源程序结构 第4章 伪指令及汇编语言源程序结构 4.1 汇编程序结构 4.2 汇编语言语句格式 4.3 伪指令语句 4.4 标号、变量和表达式 4.5 段的组织 4.6 程序段前缀
第4章佑指令及汇编语言源程序结构 4.1汇编程序结构 4.1.1寄存器组和语法元素 1.80x86的可编程的寄存器组 1)通用寄存器组 EAX、EBX、ECX、EDX、ESⅠ、EDI、EB和ESP是32位可编程 的通用寄存器,即程序员编程可以使用的寄存器。其中低16位 用AX、BX、CX、DX、SⅠ、DⅠ、BP或SP表示。AX、BX、CX、DX还 可以分成两个8位寄存器,即低8位为AL、BL、CL、DL;高8位为 AH、BH、CH、DH
第4章 伪指令及汇编语言源程序结构 4.1 汇编程序结构 4.1.1 寄存器组和语法元素 1.80x86的可编程的寄存器组 1) 通用寄存器组 EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP是32位可编程 的通用寄存器,即程序员编程可以使用的寄存器。其中低16位 用AX、BX、CX、DX、SI、DI、BP或SP表示。AX、BX、CX、DX还 可以分成两个8位寄存器,即低8位为AL、BL、CL、DL;高8位为 AH、BH、CH、DH
第4章佑指令及汇编语言源程序结构 2)段寄存器 8086有4个16位的段寄存器:CS、SS、DS、ES,而80486有 六个16位的段寄存器:CS、SS、DS、ES、FS和GS。在实地址方 式下,段寄存器的内容左移4位而得到段基地址。在保护方式下, 段寄存器存放的是描述符的选择符 3)指令计数器 指令计数器保存下一条指令相对于CS段基地址的偏移值, 它可作16位用,也可作32位用。指令计数器采用16位段时用IP, 采用32位段时用EIP。调试程序时,(E)IP的值显示的是下条要 执行的指令在CS段中的偏移地址
第4章 伪指令及汇编语言源程序结构 2) 段寄存器 8086有4个16位的段寄存器:CS、SS、DS、ES,而80486有 六个16位的段寄存器:CS、SS、DS、ES、FS和GS。在实地址方 式下,段寄存器的内容左移4位而得到段基地址。在保护方式下, 段寄存器存放的是描述符的选择符。 3) 指令计数器 指令计数器保存下一条指令相对于CS段基地址的偏移值, 它可作16位用,也可作32位用。指令计数器采用16位段时用IP, 采用32位段时用EIP。调试程序时,(E)IP的值显示的是下条要 执行的指令在CS段中的偏移地址
第4章佑指令及汇编语言源程序结构 4)标志寄存器 EFLAGS是一个32位的标志寄存器,可用指令 PUSHFD压入堆 栈,指令 POPFD从堆栈弹出。可对 EFLAGS的低16位 FLAGS单独进 行操作,通过 PUSHF将其压入堆栈,POPF从堆栈弹出 5)控制寄存器 4个32位控制寄存器CRO、CR1、CR2、CR3中的3个,即CRO、 CR2、CR3为程序员使用。Inte公司保留了CR1。使用MOV指令传 送控制寄存器CRO、CR2、CR3中的内容。例如,指令 MOV CR0, EBX实现的功能就是将EBX的内容送到CRO中
第4章 伪指令及汇编语言源程序结构 4) 标志寄存器 EFLAGS是一个32位的标志寄存器,可用指令PUSHFD压入堆 栈,指令POPFD从堆栈弹出。可对EFLAGS的低16位FLAGS单独进 行操作,通过PUSHF将其压入堆栈,POPF从堆栈弹出。 5) 控制寄存器 4个32位控制寄存器CR0、CR1、CR2、CR3中的3个,即CR0、 CR2、CR3为程序员使用。Intel公司保留了CR1。使用MOV指令传 送控制寄存器CR0、CR2、CR3中的内容。例如,指令MOV CR0, EBX实现的功能就是将EBX的内容送到CR0中
第4章佑指令及汇编语言源程序结构 6)调试寄存器 DR4和DR5为 Intel公司保留,程序员编程时不能使用DR4和 DR5,其余的调试寄存器的内容可通过MOV指令传送。例如,指 令 MOV EAX,DR6是将调试寄存器DR6中的内容送到EAX中。 7)测试寄存器 程序员编程时能使用的测试寄存器只有TR6和TR7,其他为 Intel公司保留,则不能使用。例如,指令 MOV ECX,TR7实现 的功能就是将TR7的内容送到ECX中
第4章 伪指令及汇编语言源程序结构 6) 调试寄存器 DR4和DR5为Intel公司保留,程序员编程时不能使用DR4和 DR5,其余的调试寄存器的内容可通过MOV指令传送。例如,指 令MOV EAX,DR6是将调试寄存器DR6中的内容送到EAX中。 7) 测试寄存器 程序员编程时能使用的测试寄存器只有TR6和TR7,其他为 Intel公司保留,则不能使用。例如,指令MOV ECX,TR7实现 的功能就是将TR7的内容送到ECX中
第4章佑指令及汇编语言源程序结构 8)系统地址寄存器 80486用4个寄存器把在保护模式中常用的数据结构基地址、 限制和其他属性保存起来,以确保其快速性。这4个寄存器是: 全局描述符寄存器GDTR、局部描述符寄存器LDTR、中断描述符 寄存器IDTR和任务寄存器TR。与这4个寄存器有关的指令是LGDT LIDT、LLDT、LTR、LGDT或LIDT,实现的功能就是将内存中六个 字节的内容装入GDTR或IDTR中。LLDT或LTR把寄存器或内存中两 个字节的内容装入LDTR或TR中,与上述4条指令传送方向相反的 指令是SGDT、SIDT、SGDT、STR。注意这里任务寄存器TR与测试 寄存器TR6、TR7的区别
第4章 伪指令及汇编语言源程序结构 8) 系统地址寄存器 80486用4个寄存器把在保护模式中常用的数据结构基地址、 限制和其他属性保存起来,以确保其快速性。这4个寄存器是: 全局描述符寄存器GDTR、局部描述符寄存器LDTR、中断描述符 寄存器IDTR和任务寄存器TR。与这4个寄存器有关的指令是LGDT、 LIDT、LLDT、LTR、LGDT或LIDT,实现的功能就是将内存中六个 字节的内容装入GDTR或IDTR中。LLDT或LTR把寄存器或内存中两 个字节的内容装入LDTR或TR中,与上述4条指令传送方向相反的 指令是SGDT、SIDT、SGDT、STR。注意这里任务寄存器TR与测试 寄存器TR6、TR7的区别
第4章佑指令及汇编语言源程序结构 ,,,气, 2.语法规则和语法要素 )字符集 汇编语言字符集是 ASCII字符集的一个子集,源文件中的每 个字符都应该是下列字符之一: (1)字母26个英文大小写字母; (2)数字0~9 (3)特殊字符+-×/( ?@$&: (4)定界符空格符、制表符、回车符(CR)、换行符(LF)
第4章 伪指令及汇编语言源程序结构 2.语法规则和语法要素 1) 字符集 汇编语言字符集是ASCII字符集的一个子集,源文件中的每 一个字符都应该是下列字符之一: (1) 字母 26个英文大小写字母; (2) 数字 0~9; (3) 特殊字符 + - × / ( ) [ ] ; ’ 。 ” - : ? @ $ &; (4) 定界符 空格符、制表符、回车符(CR)、换行符(LF)
第4章佑指令及汇编语言源程序结构 程序中出现不在上列字符集中的字符,汇编系统把该字符 当作一个逻辑空格符来处理。逻辑空格符就是把多个连续的空 格符或制表符当作一个空格符来处理。 在程序中,字母的大小写是无关的,可以互换。但是字符 串中的字母大小写是不能互换的,如‘XYZ与‘xyz,是不相 等的字符串
第4章 伪指令及汇编语言源程序结构 程序中出现不在上列字符集中的字符,汇编系统把该字符 当作一个逻辑空格符来处理。逻辑空格符就是把多个连续的空 格符或制表符当作一个空格符来处理。 在程序中,字母的大小写是无关的,可以互换。但是字符 串中的字母大小写是不能互换的,如‘XYZ’与‘ xyz’,是不相 等的字符串
第4章佑指令及汇编语言源程序结构 2)标识符 个标识符是程序员用来定义段、变量、标号或常量等项目 的名字。一个有效的标识符应遵循以下规则: (1)标识符的首位字符必须是一个字母或下述3个特殊字符之 ?(问号)、@(AT符号)、(下划线符号) (2)其余的字符可以是字母、数字或是上面3个特殊字符,标 识符中间不能有分隔符(逻辑空格或定界符); (3)一个标识符可有长达255个字符,系统只识别前31个字符; (4)一个程序模块内的每一个标识符只代表而且仅仅代表一 个项,在模块的任何地方都可以通过标识符访问它所表示的项
第4章 伪指令及汇编语言源程序结构 2) 标识符 一个标识符是程序员用来定义段、变量、标号或常量等项目 的名字。一个有效的标识符应遵循以下规则: (1) 标识符的首位字符必须是一个字母或下述3个特殊字符之 一: ? (问号)、@ (AT符号)、_ (下划线符号) (2) 其余的字符可以是字母、数字或是上面3个特殊字符,标 识符中间不能有分隔符(逻辑空格或定界符); (3) 一个标识符可有长达255个字符,系统只识别前31个字符; (4) 一个程序模块内的每一个标识符只代表而且仅仅代表一 个项,在模块的任何地方都可以通过标识符访问它所表示的项
第4章佑指令及汇编语言源程序结构 )关键字和保留字 汇编语言的关键字和保留字都是系统自己预定义的标识符 关键字指的是指令助记符,如加法指令ADD、中断返回指令 IRET等。保留字指的是伪指令或其他功能符号,如 ISEGMENT DWORD等
第4章 伪指令及汇编语言源程序结构 3) 关键字和保留字 汇编语言的关键字和保留字都是系统自己预定义的标识符。 关键字指的是指令助记符,如加法指令ADD、中断返回指令 IRET等。保留字指的是伪指令或其他功能符号,如SEGMENT、 DWORD等