公 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: × --- ×××××