1、IBM PC机的指令系统Y80 x86指令系统分成下列六大类:v数据传送指令v算术运算指令v逻辑运算和移位指令vv控制控制控制控制转转移指令移指令移指令移指令v串操作指令vCPU控制指令与标志位处理指令控制转移指令Y无条件转移指令Y条件转移指令Y子程序调用和返回指令Y中断指令无条件转移指令Y格式:JMP 地址表达式Y功能:使程序的流程无条件跳到转移地址所指的地方。v转移目的地址(CS)16+(IP)v段内转移:改变IP的内容,CS的内容不变。v段间转移:IP、CS的内容都改变。Y段内直接寻址:指令中直接给出到达的目标地址v例如:JMP PROG1 ;转移范围:3276832767vJMP SH
2、ORT NEXT ;转移范围:128127Y段内间接寻址:指定某个寄存器的内容或某个字单元的内容作为转移地址的偏移地址。v例如:JMP BX ;(BX)IPvJMP WORD PTR1000H ;(DS:1000H)IPvJMP WORD PTRSI+2 ;(DS:SI+2)IPvJMP TABLEBX ;(DS:TABLE+(BX)IPY段间直接寻址:通过标号直接给出转移地址v例如:JMP FAR PTR NEXTP;NEXTP的段址CS,偏址IPvJMP NEXTP1 ;NEXTP1的段址 CS,偏址 IPY段间间接寻址:指定一个4字节的单元内容作为转移地址,其中低二字节内容IP,高二字节
3、内容CS。v例如:JMP DWORD PTR100HvJMP DWORD PTRBXNotice!Y段内与段间直接寻址v可以有相同的格式v标号前可以有:SHORT、FAR(NEAR)PTR v机器指令中使用的是位移量Y 间接转移v注意类型条件转移指令Y标志位条件转移指令Y二个无符号数比较转移指令Y二个带符号数比较转移指令标志位条件转移指令YJC 标号;当(CF)=1,则转移。vJNC 标号;当(CF)=0,则转移。YJZ/JE 标号;当(ZF)=1,则转移。vJNZ/JNE 标号;当(ZF)=0,则转移。YJS 标号;当(SF)=1,则转移。vJNS 标号;当(SF)=0,则转移。YJO 标号
4、当(OF)=1,则转移。vJNO 标号;当(OF)=0,则转移。YJP 标号;当(PF)=1,则转移。vJNP 标号;当(PF)=0,则转移。二个无符号数比较转移指令Y设A为被减数,B为减数。CMP A,BYJA 标号;当AB时转移;YJAE 标号;当AB时转移;YJB 标号;当AB时转移;YJBE 标号;当AB时转移。CF ZF二个带符号数比较转移指令YJG 标号;当被减数大转移;YJGE 标号;当被减数大于等于减数转移;YJL 标号;当被减数小转移;YJLE 标号;当被减数小于等于减数转移SF OF ZF例子1Y完成分段函数 -1 AL 0JCXZ/JECXZ条件转移指令Y格式:JCXZ
5、/JECXZ 标号v功能:当(CX)/(ECX)0时,转向标号循环控制指令LOOP/LOOPE/LOOPNEY格式:LOOP 标号;v功能:(CX)-1 CX,若(CX)0,则转移v功能等价lDEC CXlJNZ 标号Y格式:LOOPE/LOOPNEv(CX0)and(ZF=1/0)PUSHFPUSHFDEC CXDEC CXJCXZ OVERJCXZ OVERPOPFPOPFJZ JZ 标号标号标号标号OVER:OVER:Notice!Y除无条件转移指令只能使用标号;Y条件转移指令在386前只能是段内直接短转移,即偏移量为-128127;YJCXZ、JECXZ和LOOP只能是段内直接短转移。
6、Y使用LOOP指令,注意初始值是否为0。(不同于rep)JCC labelJNCC skipnextJMP labelSkipnext:习题Y找出100个有符号字节数中间的最大数。过程调用和返回指令Y调用指令 CALLv格式:CALL 子程序/地址表达式v功能:l保护断点将当前断点压入堆栈;l转入子程序将子程序段的入口地址送入IP(/CS);Y段内直接调用vCALL Subx 执行过程:PUSH IP;Subx入口地址IPY段内间接调用:子程序的入口偏移地址存放在Reg或者Mem中vCALL BXvCALL WORD PTR 1000Hv执行过程:PUSH IP;子程序入口地址 IPY段间直接
7、调用vCALL Subfv或CALL FAR PTR Subfv执行过程:PUSH CS;PUSH IP;子程序入口地址 CS,IP Y段间间接调用:子程序入口段地址和偏移地址存在DWORD中vCALL DWORD PTR ADDRv执行过程:PUSH CS;PUSH IP;ADDR IP;ADDR+2 CSY子程序返回指令 RET(N/F)v格式:RET nv功能:返回主程序。根据子程序的属性Near、Far决定:l段内返回:POP IPl段间返回:POP IP;POP CSvRET n:返回;并执行SP=SP+n;vCALL与RET类型必须一致CALL 与与RET指令的模拟指令的模拟YCA
8、LL模拟vPUSH CS;段间需要vMOV AX,OFFSET RETADD;vPUSH AXvJMP 过程名YRET模拟vPOP AX;弹出IPvJMP AX;段内v段间怎么办?中断调用与返回指令Y中断:数据传输方式;软中断和硬中断Y中断服务程序:处理中断的子程序;Y中断向量:中断子程序的入口地址Y中断向量表:存放在00000H地址的四字节表格Y中断类型码:给中断向量的一个编号Y(中断向量表查看:debug)Y中断调用指令 INTv格式:INT nv功能:调用n号中断子程序v操作:lPUSHF;PUSH CS;PUSH IP l取得中断向量,转入Y中断返回指令 IRETv格式:IRETv操作
9、POP IP;POP CS;POPFDOS 中断调用YMS-DOS “API”&System“API”YAH为功能号YDOS INT部分使用AL/AX作为返回值 0-成功;1-失败 IBM PC机硬件系统 基本输入输出系统(BIOS)磁盘操作系统(DOS)高级语言 用户程序 DOS 21H号中断调用Y1.从键盘读入一个字符vMOV AH,1/8 回显/不回显vINT 21H;v键入字符的ASCII存入AL中Y2.显示一个字符到屏幕vMOV AH,2vMOV DL,ASCIIvINT 21H;DOS 21H号中断调用Y3.显示一个字符串到屏幕vMOV AH,9vLEA DX,STRINGvIN
10、T 21H;v;字符串要求以”$”结束Y4.从键盘读入一个字符串到屏幕vMOV AH,0AHvLEA DX,STRINGvINT 21H vSTRING第一个字节为长度;第二个为实际输入的长度。DOS 21H号中断调用Y5.返回DOSvMOV AH,4CHvINT 21HIBM PC机的指令系统Y80 x86指令系统分成下列六大类:v数据传送指令v算术运算指令v逻辑运算和移位指令v控制转移指令v串操作指令vvCPUCPU控制指令与控制指令与控制指令与控制指令与标标志位志位志位志位处处理指令理指令理指令理指令 CLC CF0 CMC CF CF STC CF1 CLD DF0 STD DF1 CLI IF0 STI IF1 注意注意:只影响本指令指定的标志只影响本指令指定的标志 标志处理指令NOPY空操作(机器码:90H)Y与XCHG AX,AX相同Y用途:vTimerl1个时钟周期;DSP,C51vPlace Holderl一个字节;HLTY暂停指令Y功能:v使CPU进入暂停状态,直到系统复位或发生外部中断v应用程序一般不使用LOCKY封锁前缀Y用途:v用于多处理器系统,使当前处理器锁住总线,以保证当前指令为原子操作;v当目的操作数为内存操作数时,为了完成“读-修改-写内存”的操作不被打断;Y示例:Lock add bx,ax






