第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中