西安邮电大学8086指令系统表
注:1)影响标志位的指令已作特殊说明,没作特殊说明的均不影响标志位。
2)附录中各缩写或符号含义如下
地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断(INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例:MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src)比较指令:CMP dst,src(相减但不送回目的操作数,结果都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量)段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回:RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD
CPU:中央处理器,是一台计算机的运算核心和控制核心 EU:执行部件,负责指令的译码、执行和数据的运算 BIU:总线接口部件,管理CPU与系统总线的接口,负责CPU对存储器和外设进行访问 IP:指令指针寄存器,指示主存储器指令的位置 SP:堆栈指示寄存器,指示堆栈栈顶的位置(偏移地址) CS:代码段寄存器,指示当前代码段的起始位置 DS:数据段寄存器,指示当前数据段的起始位置 SS:堆栈段寄存器,指示当前对战短的起始位置 时钟周期:CLK时钟信号的周期,是CPU的最小时间单位,也叫T状态 总线周期:CPU通过系统总线对存储器或接口进行一次访问的时间 指令周期:完整执行一条指令所用时间 段寄存器:是因为对内存的分段管理而设置的,8086/8088具有4个16位段寄存器:CS、DS、SS、ES 字节:相邻八位二进制数 物理地址:1MB存储区域中某一单元的实际地址 逻辑地址:由段基地址和偏移地址(偏移量)组成,存储单元的地址可以用段基地址和段内偏移量来表示,段基地址确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表 示方式称为逻辑地址 BCD码:用四位二进制数表示一位十进制的编码 ASCII码:由8位二进制数组成,用来表示26个英文大小写字母以及一些特殊符号,便于计算机的识别的一种编码 堆栈:一种数据项按序排列的数据结构,采用“先进后出”或“后进先出”的存取操作方式 汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序 指示性语句:不可执行语句,汇编时不产生目标代码,用于指示汇编程序如何编译源程序 指令性语句:可执行语句,在汇编中要产生相应的目标代码,CPU根据这些代码执行相应操作 伪指令:即指示性语句 OFFSET:返回变量或标号的偏移地址 ASSUME:明确段寄存器与逻辑段之间的关系 SEGMENT:定义一个逻辑段,并给逻辑段赋予一个段名 ORG:控制位置计数器,把表达式的值赋给当前位置计数器$ RAM:随机存取存储器,CPU可对RAM的内容进行随机的读写访问 ROM:只读存储器,存储器的内容只能随机的读出而不能写入 EPROM:用紫外光擦除,擦除后可编程,允许用户多次擦除和编程的只读存储器 接口:CPU和存储器、外部设备或者两种外部设备,或者两种机器之间通过系统总线进行连接的逻辑部件(或称电路),它是CPU与外界进行信息交换的中转站,是CPU与外界交换信息的通道 I/O 端口:输入输出端口,用于CPU和外部设备连接和数据交换的接口,能被指令直接寻址的输入输出口 I/O 端口独立编址:从存储空间划出一部分地址空间给I/O设备,把I/O接口中的端口当作存储器单元一样进行访问,不设置专门的I/O指令的编址方式,也称存储器映射编址 I/O 端口统一编址:对接口中的端口单独编址而不占用存储空间,使用专门的I/O指令对端口进行操作的编址方式,也叫I/O映射编址 总线:连接两个以上数字系统元器件的信息通路,是传递信息的一组共用信号线(导线) 中断:指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。 中断源:引起中断的原因或发出中断申请的来源 软件中断:CPU执行指令引起的中断
一.机械码,又称机器码. ultraedit打开,编辑exe文件时你会看到 许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码 就是机器码. 修改程序时必须通过修改机器码来修改exe文件. 二.需要熟练掌握的全部汇编知识(只有这么多) 不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了 cmp a,b 比较a与b mov a,b 把b的值送给a ret 返回主程序 nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面 (解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop) call 调用子程序 je 或jz 若相等则跳(机器码74 或0F84) jne或jnz 若不相等则跳(机器码75或0F85) jmp 无条件跳(机器码EB) jb 若小于则跳 ja 若大于则跳 jg 若大于则跳 jge 若大于等于则跳 jl 若小于则跳 jle 若小于等于则跳 pop 出栈 push 压栈 三.常见修改(机器码) 74=>75 74=>90 74=>EB 75=>74 75=>90 75=>EB jnz->nop 75->90(相应的机器码修改) jnz -> jmp 75 -> EB(相应的机器码修改) jnz -> jz 75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改) 四.两种不同情况的不同修改方法 1.修改为jmp je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
类别指 令 类 型 指令名称指令缩写指令功能影响标志格式格式含义源操作数目的操作数 传送指令通 用 传 输 指 令 基本传输 指令 MOV 将源操作数中的数据传送至目的操 作数,以实现寄存器与寄存器、寄 存器与存储器之间数据传送以及立 即数送往寄存器或存储器 无 1.MOV WORD PTR [2000],AX 将AX送2000和 2001单元(低位 在低地址,高位 在高地址,下同) 至少有一个是寄存器 (除立即数送存储器 外); 不能在两个存储单元之 间直接传送数据; 不能在两个段寄存器之 间直接传送数据; 不能将立即数直接送至 段寄存器;SS和SP赋 值必须紧邻 指令指针IP既不作目 的操作数也不做源操作 数 2.MOV AX,ES:[BX+SI+50] 将ES段 (BX+SI+50)字 单元内容送AX 3.MOV SS,BX 将BX内容送SS 4.MOV ES,SS:[DI+200] 将SS段(DI+200) 字单元内容送ES 5.MOV BX,CX 将CS内容送BX 6.MOV WORD PTR [BX+DI],SS 将SS内容送 (BX+DI)字单元 CS不能作目 的操作数; 立即数不能 作目的操作 数 7.MOV CL,DH 将DH内容送CL 8.MOV DI,[SI+100] 将(SI+100)字 单元内容送DI 9.MOV WORD PTR [DI],DX 将DX内容送(DI) 字单元 10.MOV CX,3330 立即数3330送 微机原理指令整理 1
微机原理指令整理 2 CX 11.MOV BYTE PTR [DI],0 立即数0送(DI) 字节单元 堆栈操作 指令 PUSH 将来自通用寄存器、段寄存器或存储单元的一个字(16位)内容压入堆栈(SP 指向的栈顶个单元) 无 1.PUSH AX AX 内容进栈 通用寄存器、段寄存器、存储单元的一个字 CS 不能作目的操作数; 2.PUSH SI SI 内容进栈 3.PUSH ES ES 内容进栈 4.PUSH CS CS 内容进栈 5.PUSH WORD PTR [BX] (BX)和(BX+1)单元内容进栈 6.PUSH WORD PTR BETA [BX] (BX+BETA)字单元内容进栈 不能使用8位源或目的操作数 POP 将栈顶个单元的内容退出(弹出)到通用寄存器、段寄存器或存储单元 无 1.POP BX 栈顶2个字节出栈到BX 不能使用8位源或目的操作数 2.POP DX 栈顶2个字节出栈到DX 通用寄存器、段寄存器、存储单元的一个字节; CS 不能作目的操作数 3.POP ES 栈顶2个字节出栈到ES 4.POP SS 栈顶2个字节出栈到SS 5.POP [BX+50] 栈顶2个字节出栈到(BX+50)字单元 6.POP [BP+DI] 栈顶2个字节出栈到(BP+DI )字单元
8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式
寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H
1.一般微处理器内部结构由哪三部分组成?P6 运算器(算术逻辑单元),控制器,内部寄存器 2.接口按功能可分为那几类?P242 通用接口和专用接口 3.3.接口的主要功能有那几种?P243 缓冲锁存数据,地址译码,传送命令,码制转换,电平转换 4.典型的微机硬件结构是用什么将各部位连接起来的? 总线 5.什么是计算机的位长?P8 计算机数据总线上一次能处理的信息的位数即位长 6.什么是CPU总线的带宽?P23 总线的带宽是指总线能同时传输的数据位数量 7.什么是CPU总线的工作频率?P23 用于协调总线上各种操作的时钟频率 8.什么是Intel8086指令的直接寻址方式?P77 指令中以位移量方式直接给出操作数的有效地址EA 9.64*1bit的DRAM芯片通常有多少个地址线引脚和数据线引脚? 6地址线引脚和1数据线引脚 10.Intel8086系统中条件转移指令的转移范围有什么限制? -128—127 11.中断向量表: 也称中断入口地址表。该表说明了中断类型号和中断服务程序的入口地址之间的联系。P235 12.中断:就是使CPU暂停运行原来的程序,按照更为急迫事件的需要转去执行为中断源服务的程序,待该程序处理完后,再返回运行原程序,此即中断。P223 13.总线:是用来传送信息的公共导线,可分为数据总线,地址总线,控制总线。P4??? 14.有效地址:表示所寻址的地址单元距离段起地址的之间的偏移字节的多少,也称偏移地址。P69 15.指令周期:指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。百度百科。P10
8086指令系统总结 学习微处理器及其程序设计,必须掌握微处理器的指令系统。本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。 下面我们分别进行总结: 一.8086寻址方式 (1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义 (2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX (3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H] MOV AX,ES:[1234H] (4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX] MOV AX,ES:[SI] MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统 1.数据传送指令 (一)通用传送指令 (1)MOV指令 指令格式:MOV 目,源 功能:将源操作数传送给目标操作数。 (2)堆栈操作指令 进栈指令:PUSH 格式:PUSH 源 功能:将源操作数压入堆栈。 例:用堆栈指令完成上例的功能。 MOV AX,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H
第一章 1.辨析三个概念:微处理器、微型计算机、微型计算机系统 微处理器:简称μP或MP(Microprocessor)是指由一片或几片大规模集成电路组成的具有运算器和控制器功能的中央处理器部件,又称为微处理机。 微型计算机: 简称μC或MC,是指以微处理器为核心,配上存储器、输入/输出接口电路及系统总线所组成的计算机(又称主机或微电脑)。 微型计算机系统(主机+外设+软件配置)(Microcomputer system) 简称μCS或MCS,是指以微型计算机为中心, 以相应的外围设备、电源和辅助电路(统称硬件)以及指挥微型计算机工作的系统软件所构成的系统。 2.微机系统结构(三种总线结构):数据总线,地址总线,控制总线 第三章 内部结构 由两部分组成:总线接口单元BIU(Bus Interface Unit); 执行单元EU(Execution Unit). (1).总线接口单元BIU 组成:4个16位的段寄存器(CS、DS、ES、SS); 1个16位的指令指针寄存器IP; 1个20位的地址加法器; 1个指令队列(长度为6个字节); I/O控制电路(总线控制逻辑); 内部暂存器。 BIU的功能:根据EU的请求负责CPU与内存或I/O端口传送指令或数据。 ①BIU从内存取指令送到指令队列 ②当EU执行指令时,BIU要配合EU从指定的内存单元或I/O端口中读取数据,或者把EU的操作结果送到指定的内存单元或I/O端口去。 (2)执行单元EU(Execution Unit) 组成:①ALU(算术逻辑单元); ②通用寄存器组AX,BX,CX,DX(4个数据寄存器) BP(基址指针寄存器) SP(堆栈指针寄存器) SI(源变址寄存器) DI(目的变址寄存器) ③数据暂存寄存器 ④标志寄存器FR ⑤EU控制电路 作用:负责执行指令,执行的指令从BIU的指令队列中取得;运算结果和所需数据,则由EU向BIU发出请求,经总线访问内存或I/O端口进行存取。
一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。 1. 通用数据传送指令 MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. ── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
第一讲 第三章 指令系统--寻址方式 回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过 程。 重点和纲要:指令系统--寻址方式。有关寻址的概念;6种基本的寻址方式及 有效地址的计算。 教学方法、实施步骤 时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等 讲 授 40” ×2 提 问 3” ×2 小 结 2” ×2 讲授内容: 3.1 8086/8088寻址方式 首先,简单讲述一下指令的一般格式: 操作码 操作数 …… 操作数 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中。如图所示。 例如:MOV AX ,3000H
立即数可以是8位的,也可以是16位的。若是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如: MOV AX,DS:[2000H]; 图2-2 (对DS来讲可以省略成 MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄
第一次课外作业题参考答案 1微型计算机由哪5个主要部件组成?微型计算机系统包含哪些部分 答:微型计算机的5个主要组成部分:运算器、控制器、存储器、输入设备、输出设备。微型计算机系统包含:硬件和软件,其中硬件包括微型计算机和外设,软件包括系统软件和应用软件。 2微机总线包括哪几类总线? 答:地址总线AB, 数据总线DB,控制总线CB。 3请简要描述数据总线、地址总线和控制总线的基本特点。 答:地址总线AB:单向,用来传送CPU输出的地址信号,确定被访问的存储单元、I/O端口,地址总线的条数决定CPU的寻址能力。 数据总线DB:双向,用来在CPU与存储器、I/O接口之间进行数据传送,其条数决定一次可最多传送数据的宽度。 控制总线CB:双向,用于传送各种控制信号。 1.CPU内部由哪几个主要功能部件构成?各自的主要作用是什么? 答:CPU是微机的核心芯片,它包括运算器、控制器和寄存器。 运算器的功能是完成数据的算术和逻辑运算。 控制器一般由指令寄存器、指令译码器和控制电路组成。控制器的功能是根据指令的要求,对微型计算机各部件发出相应的控制信息,使它们协调工作,从而完成对整个计算机系统的控制。 CPU内部的寄存器是用来存放经常使用的数据的。 2.指令译码器起什么作用? 答:指令译码器对指令寄存器中的操作码字段进行分析,识别该指令规定的操作,向操作控制器发出具体操作的特定信号。 3.请简述诺依曼计算机的工作原理(指令执行过程或计算机是如何执行一条指 令的)。 答:先由指令寄存器IP给出指令所在内存的地址,地址经地址寄存器—地址总线—地址译码器,选中指令所在的内存的单元,CPU发出内存读控制信