《第二章32位PC机汇编程序设计环境教学幻灯片》由会员分享,可在线阅读,更多相关《第二章32位PC机汇编程序设计环境教学幻灯片(22页珍藏版)》请在金锄头文库上搜索。
1、第二章 32位PC汇编程序设计环境,32位可编程寄存器体系 实方式下存储器寻址机制 堆栈存储技术 程序汇编连接与调试方法,第二章 32位PC汇编程序设计环境,2.1 32位可编程寄存器体系,一、通用寄存器,2.1 32位可编程寄存器体系,累加器AX:存放算术运算的结果,AL为字节累加器 基址器BX:地址计算时,用作存放基地址的寄存器 计数器CX:某些指令隐含作为计数器 数据寄存器DX:端口地址寄存器,某些输入输出指令用来存放外部设备的I/O地址 源变址器SI / 目的变址器DI:变址寄存器 基址指针BP:作为堆栈数据存取操作的基本地址指针寄存器 栈指针SP:堆栈指针寄存器,指示堆栈的当前偏移地
2、址,2.1 32位可编程寄存器体系,(1)条件标志:反映包含在ALU中算术逻辑运算后的结果特征 符号标志SF:结果为负,SF = 1;否则 SF = 0 零标志ZF:运算操作结果=0,ZF = 1,否则 ZF = 0 辅助进位AF:运算中第三位有进位,AF = 1,否则AF = 0 齐偶标志PF:结果操作数中有偶数个“1”时,PF=1,否则PF=0 进位标志CF:记录运算操作时最高有效位产生的进位值,有进位CF = 1,否则CF = 0 溢出标志OF:操作数结果超出表示范围,OF=1,否则OF=0,2.1 32位可编程寄存器体系,(2)控制标志 方向标志DF:DF=0,处理从低位地址开始,DF
3、=1,处理从高位地址开始 中断允许标志IF:IF=1,CPU允许中断,否则关闭中断 跟踪标志TF:TF=1,机器进入单步工作方式,TF=0,机器处于连续工作方式,2.1 32位可编程寄存器体系,I P,EIP,31 16 15 0,指令指针IP/EIP指出程序执行过程中当前要取出的下条 指令的地址。当取出一条指令后,IP/EIP自动加上该指令的 长度或者形成转移地址,又指向下一条指令的地址,从而可 以控制有序的执行程序。,2.1 32位可编程寄存器体系,15 0,CS,DS,SS,ES,FS,GS,段寄存器,代码段寄存器CS:存放当前正在执行代码的段的起始地址 数据段寄存器DS:存放当前正在执
4、行程序所用数据的段的起始地址 堆栈段寄存器SS:存放当前正在执行程序暂时保留信息的段的起始地址 附加段寄存器ES、FS和GS:存放程序的数据段的起始地址,为程序设计使用多个数据段带来方便,2.2 实地址下的存储器寻址方式,一、存储单元的地址和内容,存储器线性编址,00000H,00001H,FFFFFH,00800H,00801H,98,21,7 6 5 4 3 2 1 0,高位字节,低位字节,21 98,AH,AL,1 MB空间,2.2 实地址下的存储器寻址方式,二、存储器分段寻址 分段寻址允许一个程序可以使用多个代码段、数据段和堆栈段 存储段内的每个单元的物理地址(PA),可以用“段基址:
5、段内偏移地址”来表达 段基址:即段地址(SA),是相应段的起始地址 段内偏移地址:即偏移地址或有效地址(EA),是该单元的物理地址到段地址的相对距离,EA=PA-SA,2.2 实地址下的存储器寻址方式,物理地址的计算与形成,16位段地址,16位偏移量,0000,20位物理地址,00000H,123A0H,157BCH,341CH,123A0H 段地址,341CH 偏移量,157BCH 物理地址,CS段,2.2 实地址下的存储器寻址方式,三、段的分配方式,64KB代码,64KB数据,64KB附加数据,64KB堆栈,0150H,01500H,8C50H,42000H,4200H,8C500H,C0
6、00H,C0000H,CS,DS,ES,SS,每个段占用64KB的分配方式,2.2 实地址下的存储器寻址方式,8KB代码,2KB数据,256B临时数据,CS,DS,SS,ES,0200H,0400H,0480H,段寄存器,存储器,按实际需要的分配方式,2.3 堆栈存储技术,一、堆栈概念 堆栈是由程序在RAM中开辟的一片内存区域,具有主存储器的功能和特性 设置堆栈段寄存器SS,用来指示堆栈起始位置的指针;栈顶寄存器SP用来指示堆栈顶部到堆栈起始位置的距离,即栈顶指针 栈顶是一个动态的概念,用SP来记录堆栈操作时变化的指针,它动态地指向当前可以压入信息到堆栈中的偏移地址,或者从堆栈中当前需要弹出信
7、息的偏移地址,2.3 堆栈存储技术,二、操作原则 “后进先出”或“先进后出” 下推式:从堆栈的高地址先压入内容,再从相邻的低地址压入内容。 堆栈操作指令(PUSH、POP)均是对16位(2个字节)的数据进行操作。 示例:设AX=4130H,BX=2010H,堆栈的初始栈顶SP=100H,分析执行下列指令序列后,SP=? PUSH AX PUSH BX,2.3 堆栈存储技术,若再执行 POP BX POP CX 则 CX=? SP=? 分析过程如下图所示,显然执行 PUSH BX 后, SP = 0FCH 执行 POP CX 后, CX = 4130H SP = 100H,堆栈存取操作过程示意图
8、,RAM,高地址,SP,栈顶,41,栈底,低地址,SS,(1) PUSH AX,41 30,AX,30,(2) PUSH BX,20 10,BX,SP-2 SP,20,10,SP-2 SP,SP,(1) POP BX,20 10,BX,41 30,SP=SP+2,(2) POP CX,CX,SP=SP+2,2.4 程序汇编连接与调试方法,设计、编写源程序(数据结构+算法+编码),汇编语言源程序文件(*.ASM),目标代码程序文件(*.OBJ),可执行程序文件(*.EXE/*.COM),运行正确?,调试运行正确?,结束,否,否,否,是,是,调试DEBUG,编辑EDIT,连接LINK,执 行,汇编
9、MASM,2.4 程序汇编连接与调试方法,一、程序编辑 利用熟悉的文本编辑软件,对汇编语言源程序进行编辑,生成 .ASM文件。 汇编语言使用过程中,生成不同文件后缀名的含义: .ASM 汇编源程序 .OBJ 目标文件 .LST 列表文件 .CRF 交叉引用文件 .MAP 分配图文件 .LIB 库文件 .DEF 定义文件 .EXE / .COM 可执行文件,2.4 程序汇编连接与调试方法,二、程序汇编与连接执行 汇编程序 MASM.EXE MASM / ? 查看命令参数 连接程序 LINK.EXE LINK / ? 查看命令参数 汇编连接程序 ML.EXE ML / ? 查看命令参数 汇编过程:
10、对源程序扫描后生成目标文件 .OBJ 如有语法错误,则显示相应的错误信息,返回修改源程序,2.4 程序汇编连接与调试方法,汇编示例: D:MASM6 masm p1.asm 显示如下: Assembling:p1.asm p1.asm(12):error A2006:undefined symbol:FIVE1 表示:源程序12行有错,未定义符号 FIVE1 源程序一直到修改后汇编无错误,则生成 p1.obj 连接: D:MASM6 link p1 生成执行文件 p1.exe 则可直接运行: D:MASM6 p1,2.4 程序汇编连接与调试方法,三、程序跟踪调试 汇编过程中可以检查程序的语法错误 汇编无误,生成可执行文件后,运行没有达到预期的结果,程序可能存在逻辑错误。需要用调试工具进行跟踪调试,查找程序的逻辑错误。 常用调试工具程序: DEBUG.EXE 提供一个监控程序环境,通过提供命令和相关参数了解程序执行过程中各寄存器和存储单元的值及其变化情况,帮助确定程序中的问题。(全部命令的详细格式参见教材附录),