第二章8088指令系统题稿.ppt
文本预览下载声明
(1) 段内直接调用 指令格式:CALL near_proc 操作:SP←SP-2, ([SP+1]: [SP])←IP IP ←IP+rel 其中rel为CALL的下一条指令于被调用过程入口地址之间的16相对位移量 * (2)段内间接调用 指令格式:CALL reg16/mem16 操作:SP←SP-2, ([SP+1]: [SP])←IP IP ←reg16/mem16 例如: CALL AX;IP ←AX, 子程序的入口地址由AX给出 CALL WORD PTR[BX] ; IP ←([BX+1]:[BX]), 子程序的入口地 址为[BX+1]和[BX]单元的字内容 * (3) 段间直接调用 指令格式:CALL far_proc 操作: SP←SP-2, ([SP+1]: [SP])←CS CS ←SEG far_proc SP←SP-2, ([SP+1]: [SP])←IP IP ←OFFSET far_proc * (4)段间间接调用 指令格式:CALL mem32 操作:先把CALL指令的下一条指令的地址,即CS和IP的内容压入堆栈,然后把指令中指定的连续4个存储单元的内容送入IP和CS,低地址的两个单元内容为偏移地址,送入IP;地址的两个单元内容为段基址,送入CS * 例如:设DS=6000H, SI=560H, 单元60560H开始存放的字节数据为:10H, 20H, 30H, 40H. SS=2000H,SP=50H,则: 执行指令CALL DWORD PTR[SI]后: SP=4CH,IP=2010H,CS=4030H * 2、RET( Return from procedure) 指令格式及操作: (1)从近过程返回 RET ;IP← ([SP+1], [SP]) , SP←SP+2 (1)从远过程返回 RET ; IP← ([SP+1], [SP]) , SP←SP+2 ; CS← ([SP+1], [SP]) , SP←SP+2 近过程返回和远过程返回指令形式相同,但底层操作不同 CALL和RET指令不影响标志位 * (二)转移指令 1、JMP(Jump):无条件转移 (1) 段内直接转移 指令格式及操作: JMP near_label ; IP ←IP+rel16/rel8 其中rel16/rel8 为JMP的下一条指令到目标地址之间的16位或8位的相对位移量。若为8位,转移范围为-128~+127;若为16位,转移范围为-32768~+32767; * 转移指令与过程调用指令的区别:过程调用需要从子程序中返回,而转移指令不需要 (3) 段内间接转移 指令格式及操作: JMP reg16 ; IP ←reg16 JMP mem16; IP ←mem16 (4) 段间直接转移 指令格式及操作: JMP far_label ;IP ←OFFSET far_label ; CS ←SEG far_label (5) 段间间接转移 指令格式及操作: JMP mem32; IP ←(mem32) ;CS ←(mem32+2) * 2、条件转移指令(Conditional jumps) 条件转移指令根据前一条指令执行后标志位的状态来决定程序是否转移:若满足条件,则程序转移到指令指定的地址去执行从那里开始的指令;否则,则顺序执行下一条指令。 所有的条件转移都是直接寻址方式的短转移,即只能在以当前IP值为中心的-128~+127字节范围内转移。 条件转移不影响标志位 * 表2.2.1 条件转移指令 * 表2.2.1(续) 条件转移指令 * 例 在内存的数据段中存放了100个8位带符号数,首地址为TABLE,试统计其中正元素、负元素及零元素的个数,分别存入PLUS、MINUS和ZERO单元中 * XOR AL, AL MOV PLUS, AL MOV MINUS, AL MOV ZERO, AL LEA SI, TABLE MOV CX, 100 CLD GOON: LODSB OR AL, AL JS X1 JZ X2 INC PLUS JMP AGN X1: INC MINUS JMP AGN X2: INC ZERO AGN: LOOP GOON HLT (三)循环控制指令(Iteration control) 循环控制指令转向的目标地址是以当前IP内容为中心的-128~+127范围内。循环次数必须预先送入CX中。一般情况下,循环控制指令放在循环程序的开始或结尾。 1、LOOP 指令格式: LOOP short_la
显示全部