《微机原理A》 第九讲:寻址方式与指令系统(三) 主讲老师:王克义
《微机原理A》 第九讲:寻址方式与指令系统(三) 主讲老师:王克义
公 本讲主要内容 8086/8088指令系统 ·算术运算与逻辑运算指令 指令的机器语言表示形式
本讲主要内容 • 8086/8088指令系统 • 算术运算与逻辑运算指令 • 指令的机器语言表示形式
公 91运算类指令 ·二进制算术运算指令 ·BCD数运算指令 ·逻辑运算和移位指令
9.1 运算类指令 • 二进制算术运算指令 • BCD数运算指令 • 逻辑运算和移位指令
公 1.算术运算指令 (1)二进制加法和減法指令 名称 格式 操作 加法 ADD DST SRC DST←sRC+DST 带进位加法 ADC DST, SRC DST←SRC+DST+CF 减法 SUB DST. SRC DST+DST- SRC 带借位减法 SBB DST SRC DST← DST-SRO-CF 标志:OD| TSZA PC所有状态标志都受影响
1. 算术运算指令 (1) 二进制加法和减法指令 名称 格式 操作 加法 ADD DST,SRC DST SRC+DST 带进位加法 ADC DST,SRC DST SRC+DST+CF 减法 SUB DST, SRC DST DST-SRC 带借位减法 SBB DST,SRC DST DST-SRC-CF 标志: O D I T S Z A P C 所有状态标志都受影响 ×---×××××
公 Example ·编写实现下列二进制运算的程序段 W·Ⅹ+Y¥+24-z(X,Y,Z均为字变量) MO∨AX,X; ADD AX.Y ADD AX. 24 SUB AX.Z MO∨W,AX:
Example 1 • 编写实现下列二进制运算的程序段 W X+Y+24-Z(X,Y,Z均为字变量) MOV AX, X ; ADD AX, Y ; ADD AX, 24 ; SUB AX, Z; MOV W, AX;
公 Example 2 双倍精度运算(操作数的长度为双字一一两个16位) 2000H 3000H 低16位 低16位 高16位 高16位 把2000H地址开始的两个字(低字在前)和3000H地址开始 的两个字相加,和存放在2000H开始处
• 双倍精度运算(操作数的长度为双字--两个16位) 2000H 3000H 低16位 低16位 高16位 高16位 • 把2000H地址开始的两个字(低字在前)和3000H地址开始 的两个字相加,和存放在2000H开始处。 Example 2
公 程序段 MOVS,2000H;取第一个数的首地址 MO∨AX,[S;将第一个数的低16位送AX MOVD|,3000H;取第二个数的首地址 ADD AX,[D;第一个数的低16位和第2个数的低16位相 ;加(不加CF,但此条指令的执行影响CF MOV[S]AX;存低16位相加结果 MOV AX, ISI+2 ADC AX,[DH+2];两个高16位连同CF(低16位相加形成的相加 MOV[S|+2],AX;存高16位相加结果
程序段 MOV SI , 2000H ;取第一个数的首地址 MOV AX, [SI] ; 将第一个数的低16位送AX MOV DI ,3000H ; 取第二个数的首地址 ADD AX, [DI] ; 第一个数的低16位和第2个数 的低16位相 ;加.(不加CF,但此条指令的执行影响CF) MOV [SI],AX ; 存低16位相加结果 MOV AX, [SI+2] ADC AX,[DI+2] ;两个高16位连同CF(低16位相加形成的)相加. MOV [SI+2],AX ; 存高16位相加结果
公 例3: 假设数的长度(以字计)存放于2500H字节单元, 两个无符号二进制数分别从2000H和3000H开始 存放(低字在前),求两数之和并存放于2000H开始 处,试编程实现
例3: z 假设数的长度(以字计)存放 于2500H字节单元, 两个无符号二进制数分别 从2000H和3000H开始 存放(低字在前),求两数之和并存放于2000H开始 处,试编程实现
公 参考答案 MOV CL, DS: [2500H] MO∨s|,2000H MOV DI, 3000H CLC ;清CF LOOP1: MOVAX, [SI] ADCAⅩ,[D MOV [SI], AX INC SI INC SI INC DI INC DI DEC CL JNZ LOOP1 MO∨AX.0H ADC AX. OH ;处理最高位产生的进位 MOV [SI], AX HLT
参考答案 MOV CL , DS:[2500H] MOV SI , 2000H MOV DI , 3000H CLC ; 清CF LOOP1: MOV AX , [SI] ADC AX , [DI] MOV [SI] , AX INC SI INC SI INC DI INC DI DEC CL JNZ LOOP1 MOV AX , 0H ; ADC AX , 0H ; 处理最高位产生的进位 MOV [SI] , AX ; HLT
公 (2)加1减1和比较指令 名称格式 操作 加1 INC OPR OPR- OPR+ 减1 DEC OPR OPR OPR-1 求补( Negate) NEG OPROPR—OPR 比较 CMP OPR1,OPR2OPR1-OPR2 标志:NC和DEC:OD| T SZAP C NEG和CMP:
(2) 加1 减1和比较指令 名称 格式 操作 加 1 INC OPR OPR OPR+1 减 1 DEC OPR OPR OPR-1 求补(Negate) NEG OPR OPR -OPR 比较 CMP OPR1,OPR2 OPR1-OPR2 标志:INC和DEC: O D I T S Z A P C × --- ×××× - NEG和CMP: × --- ×××××