1、汇编语言程序设计,第一章:预备知识,临时代课教师:赵杰,1.1 汇编语言概述,1、什么是汇编语言?,1.1 汇编语言概述,3、汇编语言的设计过程,执行程序,1.2 8086 CPU 编程结构,PC机单总线结构,8086 CPU 编程结构,1.2 8086 CPU 编程结构,1.2 8086 CPU 编程结构,通用寄存器,1.2 8086 CPU 编程结构,段寄存器,CS DS ES SS,一、主存储器相关知识 1、存储单元 2、地址概念 3、数据字长 4、机器字长,1.3 存储器知识,00000H,00001H,00002H,FFFFFH,内存,12H,15H,34H,1MB,1.3 存储器知
2、识,二、物理地址的形成 PA=段地址16+偏移量,64KB16=1MB,PA=(CS ) 16+(IP)PA=(SS ) 16+(SP)PA=(DS ) 16+(DSP)PA=(ES ) 16+(DSP),1.4 标志寄存器(Flag、PSW),1、用途-条件转移、串操作、中断、跟踪2、状态标志代表的含义3、控制位作用4、运算对状态标志的影响,IF(Interrupt enable Flag)中断允许标志位:用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则不响应外部中断。注意:IF的状态不影响非屏蔽中断请求(NMI)和CPU内部中断请求。,AF(Auxili
3、ary carry Flag)辅助进位标志位:当执行一个加法(或减法)运算使结果的低4位向高4位有进位(或借位)时,AF为1;否则为0。,ZF(Zero Flag)零标志位:若当前的运算结果为零,ZF为1;否则为0。,OF(Overflow Flag)溢出标志位:当补码运算(有符号数运算)有溢出时,OF为1;否则为0。 OF=CnCn-1,DF(Direction Flag)方向标志位:用以指定字符串处理时的方向,当该位置“1”时,字符串以递减顺序处理,即地址以从高到低顺序递减。反之,则以递增顺序处理。,TF(Trap Flag)跟踪标志位:是为调试程序而设定的陷阱控制位。当该位置“1”时,8
4、086CPU处于单步状态,此时CPU每执行完一条指令就自动产生一次内部中断。当该位复位后,CPU恢复正常工作。,CF(Carry Flag)进位标志位:当执行一个加法(或减法)运算使最高位产生进位(或借位)时,CF为1;否则为0。,PF(Prity Flag)奇偶标志位:该标志位反映运算结果低8位中1的个数是偶数个还是奇数个。当指令执行结果的低8位中含有偶数个1时,PF为1;否则为0。,SF(Sign Flag)符号标志位:它和运算结果的最高位(D7)相同。SF=0表示正数;SF=1表示负数。,标志寄存器举例:,0101 0100 0011 1001 + 0100 0101 0110 1010
5、 1001 1001 1010 0011,最高位=1,SF=1低8位中有偶数个1,PF=1运算结果不为0,ZF=0低4位向前有进位,AF=1最高位向前没有进位,CF=0次高位向前有进位,C15=0,C14=1, OF=CnCn-1=1,?,标志寄存器操作指令,读取标志指令 LAHF(Load AH with Flags) 指令格式为: LAHF 执行的操作: AH(FLAG中低字节) 功能: 将标志寄存器中的低位传送到AH中。,标志寄存器操作指令,存标志指令 SAHF(Store AH into Flag) 指令格式为: SAHF 执行的操作: FLAG 低字节 (AH) 功能:该指令的操作与
6、 LAHF 相反,是将 AH 寄存器中 的内容传送到标志寄存器的低位。,一、堆栈知识采用“先进后出”的存储方式,1.5 堆栈知识,设(AX)1234H,(SP)= 0064H,执行PUSH AX,堆栈段中0063H单元内容为12H,0062H单元内容为34H,(SP)0062H。,栈底,1.5 堆栈知识,若 (SP)=0062H,如图所示, 执行 POP DX后: (SP)=0064H (DL)34H (DH)12H,标志寄存器操作指令,1、标志寄存器内容入栈指令 PUSHF(Push Flag)指令格式为: PUSHF执行的操作: SP(SP) FLAG 中的高字节(SP) SP ( SP
7、) FLAG 中的低字节( SP ) 功能: 把标志寄存器推入堆栈指针所指的堆栈顶部,同时 ( SP ) SP 。此指令的执行不影响标志位。,2、标志出栈指令 POPF(Pop Flag),指令格式为: POPF执行的操作: (SP)FLAG 的低字节 SP ( SP ) ( SP ) FLAG的高字节 SP ( SP )功能: 把堆栈指指针所指的一个字传送给标志寄存器,同时( SP ) SP 。这条指令执行后标志寄存器的标志位就取决于原堆栈顶部单元的内容。在指令系统中,没有直接改变跟踪标志TF的指令,故要改变TF标志,须将标志寄存器压入堆栈,在堆栈中改变TF内容,然后再从堆栈中弹出标志。 PUSHF 和 POPF 指令一般用于子程序和中断处理程序的首尾,分别起保存主程序标志和恢复主程序标志的作用。,1.6 ASCII码与BCD码,1、ASCII码-美国标准信息交换代码 1-31H, 2-32H , 9-39H “A”-41H, “B”-42H, a-61H2、BCD码-二进制表示的十进制数 压缩BCD码 1234-0001 0010 0011 0100 非压缩BCD码 123-00000001 00000010 00000011,