汇编语言在数据处理中的应用.ppt
http:/http:/现代微机原理与接口技术现代微机原理与接口技术1、数值转换中应用、数值转换中应用 数据输入数据输入/输出时的转换输出时的转换2、串操作中应用、串操作中应用 串移动、串搜索、串比较、串移动、串搜索、串比较、串插入、串删除串插入、串删除3、代码转换中应用、代码转换中应用 ASCII码码 BCD码码 二进数二进数 BCD码码 4、算术运算、算术运算 在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在中起来给大家,其中有些程序在中起来给大家,其中有些程序在中起来给大家,其中有些程序在1111章中已经介绍过。章中已经介绍过。章中已经介绍过。章中已经介绍过。汇编语言在数据处理中应用汇编语言在数据处理中应用(自学自学)1http:/http:/现代微机原理与接口技术现代微机原理与接口技术ASCII码输入设备码输入设备ASCII码表示的码表示的十进制十进制二进制二进制ASCII码表示的码表示的十六进制十六进制二进制二进制ASCII码表示的码表示的二进制二进制二进制二进制机内二进制操作运算机内二进制操作运算二进制二进制ASCII码码表示的十进制表示的十进制二进制二进制ASCII码码表示的十六进制表示的十六进制二进制二进制ASCII码码表示的二进制表示的二进制ASCII码输出设备码输出设备2http:/http:/现代微机原理与接口技术现代微机原理与接口技术ASCII码十进制转换为二进制数码十进制转换为二进制数设设5位十进数从高位到低位位十进数从高位到低位依次是依次是d4、d3、d2、d1、d0。可用下列多项式进行计算:可用下列多项式进行计算:(0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化初始化是是0-9ASCII码码-30H累加器累加器*10累加器累加器+这一位值这一位值修改指令修改指令结束结束NY汇编语言在数值转换中的应用汇编语言在数值转换中的应用3http:/http:/现代微机原理与接口技术现代微机原理与接口技术 CHG_DEC_BIN PROC ;SI SI 指向十进制缓冲区首址指向十进制缓冲区首址指向十进制缓冲区首址指向十进制缓冲区首址MOV DX,0 ;初始化;初始化MOV CX,10GET_ASC:MOV AL,SI;取得十进制数;取得十进制数CMP AL,0JB EXITCMP AL,9JA EXITDEC_BIN:SUB AL,30HMOV AH,0PUSH AXPUSH AXMOV AX,DXMUL CX ;*10MOV DX,AXPOP AXPOP AXADD DX,AXINC SI ;修改指针;修改指针JMP GET_ASCEXIT:RET ;转换后的二进数在转换后的二进数在转换后的二进数在转换后的二进数在DXDX中中中中 CHG_DEC_BIN ENDP4http:/http:/现代微机原理与接口技术现代微机原理与接口技术二进制数转换为二进制数转换为 ASCII码十进制码十进制5http:/http:/现代微机原理与接口技术现代微机原理与接口技术BIN_TO_DEC PROC ;被转换的十进数在被转换的十进数在被转换的十进数在被转换的十进数在AXAX中中中中 PUSH DI ;DI DI 指向存放十进数缓冲区首址指向存放十进数缓冲区首址指向存放十进数缓冲区首址指向存放十进数缓冲区首址MOV CX,5 ;初始化;初始化 CLEAR_BUF:MOV BYTE PTRDI,INC DILOOP CLEAR_BUFDEC DIMOV CX,10 CHANGE:MOV DX,0MOV DX,0;转换;转换;转换;转换DIV CX DIV CX ;除以;除以;除以;除以1010,余数在,余数在,余数在,余数在DXDXADD DL,30HADD DL,30H;ASCIIASCII码码码码MOV BYTE PTRDI,DLMOV BYTE PTRDI,DL;存储十进制数;存储十进制数;存储十进制数;存储十进制数DEC DIDEC DICMP AX,0 CMP AX,0 商是否为商是否为商是否为商是否为0 0?JNZ CHANGEJNZ CHANGEPOP DIRETBIN_TO_DECENDP6http:/http:/现代微机原理与接口技术现代微机原理与接口技术ASCIIASCII码十六进制数转换为二进制数码十六进制数转换为二进制数码十六进制数转换为二进制数码十六进制数转换为二进制数 十六进制数的字符为十六进制数的字符为09和和AF,输入后,输入后,ASCII码为码为30H39H和和41H46H 转换时,转换时,若是数字若是数字若是数字若是数字0909,减,减,减,减30H30H 若是若是若是若是AFAF,减去,减去,减去,减去37H37H HEX_TO_BIN PROC PUSH AX PUSH CX MOV DX,0 ;转换后结果在转换后结果在转换后结果在转换后结果在DXDX中中中中 GET_CHAR:MOV AX,01H ;键盘输入;键盘输入 INT 21H SUB AL,30H JL EXIT CMP AL,0AH JL CHANGE SUB AL,07H7http:/http:/现代微机原理与接口技术现代微机原理与接口技术CMP AL,0AH ;是否是大写字母;是否是大写字母JL EXITCMP AL,0FHJLE CHANGECMP AL,2AH ;是否是小写字母;是否是小写字母JL EXITCMP AL,2FHJLE CHANGEJMP EXIT CHANGE:CHANGE:MOV CL,4MOV CL,4 ;转换;转换;转换;转换SHL DX,CLSHL DX,CLMOV AH,0MOV AH,0ADD DX,AXADD DX,AXJMP GET_CHARJMP GET_CHARPOP CXPOP AX EXIT:RET HEX_TO_BIN ENDP8http:/http:/现代微机原理与接口技术现代微机原理与接口技术 串移动(数据块移动)串移动(数据块移动)串移动(数据块移动)串移动(数据块移动)串搜索串搜索串搜索串搜索 串比较串比较串比较串比较 串插入串插入串插入串插入 串删除串删除串删除串删除 求串长求串长求串长求串长汇编语言在串操作中的应用汇编语言在串操作中的应用9http:/http:/现代微机原理与接口技术现代微机原理与接口技术 数据块移动数据块移动数据块移动数据块移动 1、一般情况、一般情况 S1 S2 源区源区 目的区目的区2、特殊情况:、特殊情况:源区与目的区重叠源区与目的区重叠源区与目的区重叠源区与目的区重叠 源区源区 目的区目的区 目的区目的区 源区源区 10http:/http:/现代微机原理与接口技术现代微机原理与接口技术串搜索例串搜索例串搜索例串搜索例 将串将串STR中第一个中第一个I字符找出,并显示其在串中的位移量字符找出,并显示其在串中的位移量D_SEG SEGMENTSTR DB THIS IS A COMPUTERSTR_LEN=$-STRD_SEG ENDS.LEA DI,STRMOV CX,STR_LENMOV AL,ICLD FOUND:REPNZ SCASBREPNZ SCASBJE OK1JCXZ RETNOK1:OK1:MOV DX,DIMOV DX,DIDEC DLDEC DL ;第一个;第一个;第一个;第一个II字符距串头位移量字符距串头位移量字符距串头位移量字符距串头位移量MOV BL,DLMOV BL,DL11http:/http:/现代微机原理与接口技术现代微机原理与接口技术PUSH CXMOV CL,4SHR DL,CLPOP CXCMP DL,0AHJB OK2ADD DL,7OK2:ADD DL,30HMOV AH,02HINT 21H;显示位移量高位;显示位移量高位MOV DL,BLAND DL,0FHCMP DL,0AHJB OK30K3:ADD DL,30HMOV AH,02HINT 21H;显示位移量低位;显示位移量低位MOV DL,HINT 21H RETN:.12http:/http:/现代微机原理与接口技术现代微机原理与接口技术串比较例串比较例串比较例串比较例 比较串比较串STR1和和STR2是否相等是否相等 D_SEG SEGMENTSTR1DB STRING1STR2DB STRING2STR_LEN=($-STR1)/2MSG1DB NOT EQUAL,$MSG2DB EQUAL,$D_SEG ENDS.LEA SI,STR1MOV DI,OFFSET STR2MOV CX,STR_LENCLD13http:/http:/现代微机原理与接口技术现代微机原理与接口技术REPE CMPSBREPE CMPSBJNZ NO_EQUAEQUA:MOV AH,09HLEA DX,MSG2INT 21H;提示两个串相等;提示两个串相等JMP CMP_ENDNO_EQUA:MOV AH,09HLEA DX,MSG1INT 21H;提示两个串不等;提示两个串不等.CMP_END:.14http:/http:/现代微机原理与接口技术现代微机原理与接口技术串插入串插入串插入串插入串插入分三种情况:串插入分三种情况:1、在目的串首插入、在目的串首插入 2、在目的串尾插入、在目的串尾插入 3、在目的串中指定的位置插入、在目的串中指定的位置插入串插入例串插入例串插入例串插入例 将正数将正数N插入一个升序的字数组中,插入一个升序的字数组中,数组的首地址和末地址为数组的首地址和末地址为 A_HEAD和和A_END X 3 A_HEAD X DW?5 A_HEAD DW 3,5,23,49,52,65 23 A_END DW 105 49 N DW 32 52 65 105 A_END 32 N15http:/http:/现代微机原理与接口技术现代微机原理与接口技术 MOV AX,N MOV A_HEAD-2,-1MOV A_HEAD-2,-1 MOV SI,0 COMPARE:CMP A_ENDSI,AX ;从最后一个元素开始比较;从最后一个元素开始比较;从最后一个元素开始比较;从最后一个元素开始比较 JLE INSERT MOV BX,A_ENDSI MOV A_ENDSI+2,BX ;元素后移一个位置;元素后移一个位置;元素后移一个位置;元素后移一个位置 SUB SI,2 JMP COMPARE INSERT:MOV A_ENDSI+2,AX ;插入;插入;插入;插入 .16http:/http:/现代微机原理与接口技术现代微机原理与接口技术串删除串删除串删除串删除 串删除例串删除例串删除例串删除例 附加段中有一个首地址为附加段中有一个首地址为 LIST的字数组,数组的第一的字数组,数组的第一字中存放该数组长度,数组字中存放该数组长度,数组首地址在首地址在DI中,数中,数X在在AX中,中,现要在数组中查找现要在数组中查找X,若找,若找到则删除。到则删除。17http:/http:/现代微机原理与接口技术现代微机原理与接口技术 CLD PUSH DI MOV CX,ES:DI;数组长度送;数组长度送CX ADD DI,2;DI指向第一个元素指向第一个元素 REPNE SCASWREPNE SCASW;串扫描;串扫描 JE DELETE;如找到则删除;如找到则删除 POP DI;否则,退出;否则,退出 JMP EXITDELET:JCXZ DEC_CNTJCXZ DEC_CNT;若;若CX=0,X为最后一个元素为最后一个元素NEXT_EL:MOV BX,ES:DI MOV ES:DI-2,BX;元素向前移动一个位置元素向前移动一个位置元素向前移动一个位置元素向前移动一个位置 ADD DI,2 LOOP NEXT_ELDEC_CNT:POP DI DEC WORD PTR ES:DI;数组元素个数减数组元素个数减数组元素个数减数组元素个数减1 1EXIT:.18http:/http:/现代微机原理与接口技术现代微机原理与接口技术 求串长求串长求串长例求串长例求串长例求串长例 求字符串的长度送入求字符串的长度送入LEN,假定串以,假定串以$结束结束 STRING DB Hello,How are you!,$.MOV SI,OFFSET STRING XOR BL,BLLOP:MOV AL,SI CMP AL,$CMP AL,$JZ DONE INC BL INC SI JMP LOPDONE:MOV LEN,BL 19http:/http:/现代微机原理与接口技术现代微机原理与接口技术1 1、十进制、十进制、十进制、十进制ASCII ASCII 码转换成码转换成码转换成码转换成BCDBCD码码码码2 2、BCDBCD码转换成十进制数的码转换成十进制数的码转换成十进制数的码转换成十进制数的ASCIIASCII码码码码3 3、二进制数转换为、二进制数转换为、二进制数转换为、二进制数转换为BCDBCD码码码码4 4、BCDBCD码转换为二进制数码转换为二进制数码转换为二进制数码转换为二进制数汇编语言在代码转换中的应用汇编语言在代码转换中的应用20http:/http:/现代微机原理与接口技术现代微机原理与接口技术十进制十进制十进制十进制ASCII ASCII 码转换成码转换成码转换成码转换成BCDBCD码例码例码例码例 令令ASC_BUF开始的缓冲区开始的缓冲区内存放着若干个内存放着若干个ASCII码表示码表示 ASC_BUF 31H 的十进制数,的十进制数,(每个单元存放一每个单元存放一 32H个十进制数个十进制数),要求将其转换成,要求将其转换成 33HBCD码,并把两个相邻单元的码,并把两个相邻单元的 34HBCD码合并在一个存储单元中码合并在一个存储单元中 35H 若若ASCII码的个数为奇数,码的个数为奇数,则将首地址单元的十进制数对则将首地址单元的十进制数对 应的应的BCD码单独存放一个单元码单独存放一个单元,BCD_BUF 1其余的按统一方法处理其余的按统一方法处理 32 子程序名:子程序名:DEC_ASC_BCD 54入口参数:入口参数:入口参数:入口参数:DS:SIDS:SI指向指向指向指向ASCIIASCII码首地址码首地址码首地址码首地址ASC_BUFASC_BUF ES:DI ES:DI指向指向指向指向BCDBCD码首地址码首地址码首地址码首地址BCD_BUFBCD_BUF CX=CX=串长度串长度串长度串长度,DS,ES,DS,ES指向同一个段指向同一个段指向同一个段指向同一个段 出口参数:出口参数:出口参数:出口参数:BCDBCD码存放在码存放在码存放在码存放在BCD_BUFBCD_BUF为首地址的缓冲区内为首地址的缓冲区内为首地址的缓冲区内为首地址的缓冲区内 21http:/http:/现代微机原理与接口技术现代微机原理与接口技术DEC_ASC_BCD PROC FAR PUSH SI ;保护现场;保护现场 PUSH DI PUSH AX PUSH BX PUSH CX ROR CX,1ROR CX,1 JNC NEXT JNC NEXT ;ASCII码为偶数个转移码为偶数个转移 ROL CXROL CX LODSB LODSB ;取;取;取;取ASCIIASCII码到码到码到码到ALAL AND AL,0FH AND AL,0FH ;ASCIIASCII码转换成码转换成码转换成码转换成BCDBCD码码码码 STOSB STOSB ;存储;存储;存储;存储BCDBCD码码码码 DEC CX DEC CX ROR CX,1 ROR CX,1 ;奇数个时单独处理完;奇数个时单独处理完;奇数个时单独处理完;奇数个时单独处理完22http:/http:/现代微机原理与接口技术现代微机原理与接口技术 NEXT:LODSBNEXT:LODSB AND AL,0FH AND AL,0FH MOV BL,AL MOV BL,AL LODSB LODSB PUSH CX PUSH CX MOV CL,4 MOV CL,4 SAL AL,CL SAL AL,CL POP CX POP CX ADD AL,BL ADD AL,BL ;合并;合并;合并;合并BCDBCD码码码码 STOSB STOSB ;存储;存储;存储;存储BCDBCD码码码码 LOOP NEXT LOOP NEXT POP CX ;恢复现场;恢复现场 POP BX POP AX POP DI POP SI RET DEC_ASC_BCD ENDP 23http:/http:/现代微机原理与接口技术现代微机原理与接口技术BCDBCD码转换成十进制数的码转换成十进制数的码转换成十进制数的码转换成十进制数的ASCIIASCII码例码例码例码例 将数据段字节变量将数据段字节变量BCD_BUF为首地址的缓冲区中一个为首地址的缓冲区中一个八位十进制数对应的压缩八位十进制数对应的压缩BCD码转换成码转换成ASCII码,并显示码,并显示 BCD_BUF 12 34 56 78 显示:显示:7 8 5 6 3 4 1 2 子程序名:子程序名:BCD_DEC_ASC 入口参数:一个八位十进制数对应的压缩入口参数:一个八位十进制数对应的压缩入口参数:一个八位十进制数对应的压缩入口参数:一个八位十进制数对应的压缩BCDBCD码存储码存储码存储码存储 在在在在BCD_BUFBCD_BUF缓冲区缓冲区缓冲区缓冲区 出口参数:出口参数:出口参数:出口参数:正常结束,正常结束,正常结束,正常结束,DH=0FFHDH=0FFH 24http:/http:/现代微机原理与接口技术现代微机原理与接口技术BCD_DEC_ASC PROC NEAR PUSH SI ;保护现场;保护现场 PUSH AX PUSH CX MOV CX,4 LEA SI,BCD_BUF ADD SI,3ADD SI,3 MOV DH,0 CHG_OUT1:PUSH CX MOV AL,SI MOV AL,SI ;取压缩;取压缩;取压缩;取压缩BCDBCD码码码码 DEC SI DEC SI ;修改指针;修改指针;修改指针;修改指针 MOV DL,AL MOV DL,AL MOV CL,4 MOV CL,4 ROR AL,4 ROR AL,4 AND AL,0FH AND AL,0FH ;取高半字节;取高半字节;取高半字节;取高半字节BCDBCD码码码码 ADD AL,30H ADD AL,30H ;生成;生成;生成;生成ASCIIASCII码码码码 CALL STD_OUT ;标准设备输出;标准设备输出25http:/http:/现代微机原理与接口技术现代微机原理与接口技术 CHG_OUT2:POP CX CMP CX,1 JNZ CHG_OUT3 MOV DH,0FFH CHG_OUT3:PUSH CX MOV AL,DLMOV AL,DL AND AL,0FH AND AL,0FH ;取低半字节;取低半字节;取低半字节;取低半字节BCDBCD码码码码 ADD AL,30H ADD AL,30H ;生成;生成;生成;生成ASCIIASCII码码码码 CALL STD_OUT ;标准设备输出;标准设备输出 CHG_OUT4:POP CX LOOP CHG_OUT1 POP CX POP AX POP SI RET BCD_DEC_ASC ENDP 26http:/http:/现代微机原理与接口技术现代微机原理与接口技术STD_OUT PROC NEAR ;标准设备输出;标准设备输出 PUSH DX PUSH AX MOV DL,AL MOV AH,2 INT 21H POP AX POP DX RET STD_OUT ENDP27http:/http:/现代微机原理与接口技术现代微机原理与接口技术二进制数转换为二进制数转换为二进制数转换为二进制数转换为BCDBCD码例码例码例码例 DX寄存器中为一个十六位无符号二进制数寄存器中为一个十六位无符号二进制数(0-65535),将其将其转换为压缩的转换为压缩的BCD码码,保存保存在在BCD_BUF缓冲区缓冲区 DX BCD_BUFBIN_TO_BCD PROC FAR 15678 78 PUSH AX 56 PUSH CX 1 PUSH DX 0 PUSH DI 0 LEA DI,BCD_BUF MOV AL,0 MOV CX,5CLEAR_BUF:MOV DI,AL ;初始化缓冲区;初始化缓冲区 INC DI LOOP CLEAR_BUF LEA DI,BCD_BUF28http:/http:/现代微机原理与接口技术现代微机原理与接口技术 CHG_BCD1:MOV AX,DX ;转换开始;转换开始 MOV DX,0 MOV CX,10 DIV CX XCHG AX,DX ;交换余数和商;交换余数和商 MOV BL,AL ;余数送;余数送AL MOV AX,DX MOV DX,0 MOV CX,10 DIV CX XCHG AX,DX MOV CL,4 ROL AL,CL AND AL,0F0H OR AL,BL ;组合;组合BCD码码 MOV DI,AL ;存储;存储BCD码码 INC DI CMP DX,0 JNZ CHG_BCD1 POP DI 29http:/http:/现代微机原理与接口技术现代微机原理与接口技术BCDBCD码转换为二进制数例码转换为二进制数例码转换为二进制数例码转换为二进制数例 将将AX寄存器中的四位压缩型寄存器中的四位压缩型BCD码转换为二进制数码转换为二进制数 BCD_TO_BIN PROC PUSH CX PUSH SI PUSH DI MOV SI,AX XOR AX,AX MOV CX,4 AGAIN1:MOV DI,0 PUSH CX MOV CX,4 AGAIN2:SHL SI,1 SHL SI,1 ;左移;左移;左移;左移1 1位,最高位位,最高位位,最高位位,最高位-CF-CF RCL DI,1 RCL DI,1 ;CFCF移入移入移入移入DIDI中中中中 LOOP AGAIN2 LOOP AGAIN2 ;重复;重复;重复;重复4 4次得到次得到次得到次得到1 1位位位位BCDBCD码码码码30http:/http:/现代微机原理与接口技术现代微机原理与接口技术 MOV CX,10 MUL CX ;乘;乘10 ADD AX,DI POP CX LOOP AGAIN1 MOV DX,AX ;转换后的二进数在;转换后的二进数在DX中中 POP DI POP SI POP CX RET BCD_TO_BIN ENDP31http:/http:/现代微机原理与接口技术现代微机原理与接口技术多精度加法运算多精度加法运算多精度加法运算多精度加法运算 例如,两个无符号四字节二进数相加:例如,两个无符号四字节二进数相加:3 4 6 B 7 F 7 A H +2A BC 8 5 4 8 H 5 F 2 8 0 4 C 2 H 计算步骤为:计算步骤为:第一步第一步 第二步第二步 7 A F 7 4 8 8 5 ADC 0 ADC 0 C 2 (CF=0)0 4 (CF=1)第三步第三步 第四步第四步 6 B 3 4 B C 2 A ADC 1 ADC 1 2 8 (CF=1)5 F (CF=0)算术运算算术运算32http:/http:/现代微机原理与接口技术现代微机原理与接口技术ADR1 DB 7AH,7FH,6BH,34HADR2 DB 48H,85H,0BCH,2AHSUM DB 0,0,0,0 MOV SI,OFFSET ADR1 MOV BX,OFFSET ADR2 MOV DI,OFFSET SUM MOV CL,4 CLC ;CF-0 AGAIN:MOV AL,SI ADC AL,BX ;字节加;字节加 MOV DI,AL INC SI ;修改地址;修改地址 INC BX INC DI LOOP AGAIN 33http:/http:/现代微机原理与接口技术现代微机原理与接口技术 设在单元设在单元A、B和和C存放有三个数,若三个数都不为存放有三个数,若三个数都不为0,则,则求出三个数之和存入求出三个数之和存入D中;若有一个为中;若有一个为0,则将其他两个单元,则将其他两个单元也清也清0。MOV AX,ACMP AX,0JZ P1JZ P1MOV AX,BCMP AX,0JZ P1JZ P1MOV AX,CCMP AX,0JZ P1JZ P1ADD AX,A ADC AX,B MOV D,AX JMP DONEJMP DONEP1:MOV A,0 MOV B,0 MOV C,0DONE:.34http:/http:/现代微机原理与接口技术现代微机原理与接口技术数据区数据区DATA1和和DATA2分别存放分别存放N个字节数据,检查它们的数据个字节数据,检查它们的数据是否相同。若完全一致,则将是否相同。若完全一致,则将FLAG置置FFH,否则置,否则置0,并将第,并将第一次出现的不同数据的地址分别存入一次出现的不同数据的地址分别存入D1和和D2中。中。(1)用一般比较指令用一般比较指令CMP实现实现 LEA SI,DATA1 LEA DI,DATA2 MOV CX,NM2:MOV AL,SI CMP AL,DI JNZ M1 INC SI INC DI LOOP M2 MOV FLAG,0FFHMOV FLAG,0FFH JMP DONEJMP DONEM1:MOV FLAG,0MOV FLAG,0 MOV D1,SI MOV D2,DIDONE:35http:/http:/现代微机原理与接口技术现代微机原理与接口技术(2)用串操作指令)用串操作指令CMPS实现实现 LEA SI,DATA1 LEA DI,DATA2 MOV CX,N CLD REPZ CMPSB JNZ M3JNZ M3 MOV FLAG,0FFHMOV FLAG,0FFH JMP DONEJMP DONEM3:MOV FLAG,0MOV FLAG,0 DEC SI DEC DI MOV D1,SI MOV D2,DIDONE:36http:/http:/现代微机原理与接口技术现代微机原理与接口技术1、利用高档机、利用高档机32位字长特性位字长特性有两个有两个4字长数分别存放在字长数分别存放在DATA1和和DATA2中,求它中,求它们的和,结果存放于们的和,结果存放于DATA3中中。DATA1 DQ 123456789ABCDEFHDATA2 DQ 0FEDCBA987654321HDATA3 DQ?在实模式下发挥在实模式下发挥80386及其后继机的优势及其后继机的优势37http:/http:/现代微机原理与接口技术现代微机原理与接口技术 CLC LEA SI,DATA1 LEA DI,DATA2 LEA BX,DATA3 MOV CX,4MOV CX,4BACK:MOV AX,SIMOV AX,SI ADC AX,DI ADC AX,DI MOV BX,AX MOV BX,AX 8086中实现中实现:INC SIINC SI INC SI INC SI INC DI INC DI INC DI INC DI INC BX INC BX INC BXINC BX LOOP BACKLOOP BACK38http:/http:/现代微机原理与接口技术现代微机原理与接口技术386及其后继机中实现及其后继机中实现:CLC LEA SI,DATA1 LEA DI,DATA2 LEA BX,DATA3 MOV CX,2MOV CX,2BACK:MOV EAX,SI ADC EAX,DI MOV BX,EAX PUSHF PUSHF ;保存;保存;保存;保存CFCF ADD SI,4 ADD SI,4 ADD DI,4 ADD DI,4 ADD BX,4 ADD BX,4 POPF POPF LOOP BACK39http:/http:/现代微机原理与接口技术现代微机原理与接口技术386及其后继机中实现:及其后继机中实现:MOV EAX,DWORD PTR DATA1MOV EAX,DWORD PTR DATA1ADD EAX,DWORD PTR DATA2ADD EAX,DWORD PTR DATA2MOV EDX,DWORD PTR DATA+4ADC EDX,DWORD PTR DATA2+4MOV DWORD PTR DATA3,EAXMOV DWORD PTR DATA3,EAXMOV DWORD PTR DATA3+4,EDXMOV DWORD PTR DATA3+4,EDX 40http:/http:/现代微机原理与接口技术现代微机原理与接口技术2、通用寄存器可作为指针寄存器、通用寄存器可作为指针寄存器使用使用使用使用3232位寻址时,位寻址时,位寻址时,位寻址时,3232位通用寄存器可作为基址位通用寄存器可作为基址位通用寄存器可作为基址位通用寄存器可作为基址或变址寄存器使用或变址寄存器使用或变址寄存器使用或变址寄存器使用例:例:MOV EAX,BX MOV EAX,EDX MOV AX,WORD PTR ECX MOV AX,EBXEBX 注意:注意:注意:注意:实模式下,段的大小限制于实模式下,段的大小限制于实模式下,段的大小限制于实模式下,段的大小限制于64KB64KB,3232位通用位通用位通用位通用寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高1616位应为位应为位应为位应为0 041http:/http:/现代微机原理与接口技术现代微机原理与接口技术3、与比例因子有关的寻址方式、与比例因子有关的寻址方式把把5个双字相加并保存结果个双字相加并保存结果ARRAY DD 234556H,0F983F5H,6754AE2H,0C5231239H,0AF34ACB4HRESULT DQ?SUB EBX,EBX MOV EDX,EBX MOV EAX,EBX MOV CX,5BACK:ADD EAX,ARRAYEBX*4ADD EAX,ARRAYEBX*4 ADC EDX,0 ADC EDX,0 INC EBXINC EBX DEC CX DEC CX JNZ BACK JNZ BACK MOV DWORD PTR RESULT,EAX MOV DWORD PTR RESULT+4,EDX42http:/http:/现代微机原理与接口技术现代微机原理与接口技术数据段中有一个数据段中有一个20个字节的表和一个个字节的表和一个20个字的表,把字节表中每个字的表,把字节表中每个数据作为表中的高位字节部分移入字表中。个数据作为表中的高位字节部分移入字表中。XOR SI,SI XOR DI,DINEXT:MOV AX,WORD_TABLEDIMOV AX,WORD_TABLEDI MOV AH,BYTE_TABLESI MOV AH,BYTE_TABLESI MOV WORD_TABLEDI,AX MOV WORD_TABLEDI,AX INC SI ADD DI,2 CMP SI,20 JL NEXT BYTE_TABLE DB 20 DUP(?)WORD_TABLE DW 20 DUP(?)方法方法方法方法1 1:用一般寻址方式:用一般寻址方式:用一般寻址方式:用一般寻址方式43http:/http:/现代微机原理与接口技术现代微机原理与接口技术 XOR ESI,ESINEXT:MOV AX,WORD_TABLEESI*2MOV AX,WORD_TABLEESI*2 MOV AH,BYTE_TABLEESI MOV AH,BYTE_TABLEESI MOV WORD_TABLEESI*2,AX MOV WORD_TABLEESI*2,AX INC ESI CMP ESI,20 JL NEXT 方法方法方法方法2 2:用比例变址寻址方式:用比例变址寻址方式:用比例变址寻址方式:用比例变址寻址方式44