数值转换中应用数据输入输出时的转换2串操作中应用

上传人:鲁** 文档编号:569171299 上传时间:2024-07-27 格式:PPT 页数:65 大小:389KB
返回 下载 相关 举报
数值转换中应用数据输入输出时的转换2串操作中应用_第1页
第1页 / 共65页
数值转换中应用数据输入输出时的转换2串操作中应用_第2页
第2页 / 共65页
数值转换中应用数据输入输出时的转换2串操作中应用_第3页
第3页 / 共65页
数值转换中应用数据输入输出时的转换2串操作中应用_第4页
第4页 / 共65页
数值转换中应用数据输入输出时的转换2串操作中应用_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《数值转换中应用数据输入输出时的转换2串操作中应用》由会员分享,可在线阅读,更多相关《数值转换中应用数据输入输出时的转换2串操作中应用(65页珍藏版)》请在金锄头文库上搜索。

1、现代微机原理与接口技术现代微机原理与接口技术http:/http:/1、数值转换中应用、数值转换中应用 数据输入数据输入/输出时的转换输出时的转换2、串操作中应用、串操作中应用 串移动、串搜索、串比较、串移动、串搜索、串比较、 串插入、串删除串插入、串删除3、代码转换中应用、代码转换中应用 ASCII码码 BCD码码 二进数二进数 BCD码码 4、算术运算、算术运算 在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在中起来给大家,其中

2、有些程序在中起来给大家,其中有些程序在中起来给大家,其中有些程序在1111章中已经介绍过。章中已经介绍过。章中已经介绍过。章中已经介绍过。汇编语言补充资料汇编语言补充资料(自学自学)1现代微机原理与接口技术现代微机原理与接口技术http:/http:/ASCII码输入设备码输入设备ASCII码表示的码表示的十进制十进制二进制二进制ASCII码表示的码表示的十六进制十六进制二进制二进制ASCII码表示的码表示的二进制二进制二进制二进制机内二进制操作运算机内二进制操作运算二进制二进制ASCII码码表示的十进制表示的十进制二进制二进制ASCII码码表示的十六进制表示的十六进制二进制二进制ASCII码

3、码表示的二进制表示的二进制ASCII码输出设备码输出设备2现代微机原理与接口技术现代微机原理与接口技术http:/http:/ASCII码十进制转换为二进制数码十进制转换为二进制数设设5位十进数从高位到低位位十进数从高位到低位依次是依次是d4、d3、d2、d1、d0。可用下列多项式进行计算:可用下列多项式进行计算: (0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化初始化是是0-9ASCII码码-30H累加器累加器*10累加器累加器+这一位值这一位值修改指令修改指令结束结束NY汇编语言在数值转换中的应用汇编语言在数值转换中的应用3现代微机原理与接口技术现代微机原理与

4、接口技术http:/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

5、: RET ; 转换后的二进数在转换后的二进数在转换后的二进数在转换后的二进数在DXDX中中中中 CHG_DEC_BIN ENDP4现代微机原理与接口技术现代微机原理与接口技术http:/http:/二进制数转换为二进制数转换为 ASCII码十进制码十进制5现代微机原理与接口技术现代微机原理与接口技术http:/http:/BIN_TO_DEC PROC ;被转换的十进数在被转换的十进数在被转换的十进数在被转换的十进数在AXAX中中中中 PUSH DI ;DI DI 指向存放十进数缓冲区首址指向存放十进数缓冲区首址指向存放十进数缓冲区首址指向存放十进数缓冲区首址MOV CX, 5 ;初始化;初

6、始化 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 商是否为商是否为商是否为商

7、是否为0 0?JNZ CHANGEJNZ CHANGEPOP DIRETBIN_TO_DECENDP6现代微机原理与接口技术现代微机原理与接口技术http:/http:/ASCIIASCII码十六进制数转换为二进制数码十六进制数转换为二进制数码十六进制数转换为二进制数码十六进制数转换为二进制数 十六进制数的字符为十六进制数的字符为09和和AF,输入后,输入后,ASCII码为码为30H39H和和41H46H 转换时,转换时,若是数字若是数字若是数字若是数字0909,减,减,减,减30H30H 若是若是若是若是AFAF,减去,减去,减去,减去37H37H HEX_TO_BIN PROC PUSH

8、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, 07H7现代微机原理与接口技术现代微机原理与接口技术http:/http:/CMP AL, 0AH ;是否是大写字母;是否是大写字母JL EXITCMP AL, 0FHJLE CHANGECMP AL, 2AH ;是否是小写字母;是否是小写字母JL EXITCMP AL, 2FHJLE CHANGEJMP E

9、XIT 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 ENDP8现代微机原理与接口技术现代微机原理与接口技术http:/http:/ 串移动(数据块移动)串移动(数据块移动)串移动(数据块移动)串移动(数据块移动) 串搜索串搜索串搜索串搜索 串比较串比较串比较串比较 串插入串插入串插入串插入 串删除串删除串删除串删除 求串长

10、求串长求串长求串长汇编语言在串操作中的应用汇编语言在串操作中的应用9现代微机原理与接口技术现代微机原理与接口技术http:/http:/ 数据块移动数据块移动数据块移动数据块移动 1、一般情况、一般情况 S1 S2 源区源区 目的区目的区2、特殊情况:、特殊情况:源区与目的区重叠源区与目的区重叠源区与目的区重叠源区与目的区重叠 源区源区 目的区目的区 目的区目的区 源区源区 10现代微机原理与接口技术现代微机原理与接口技术http:/http:/串搜索例串搜索例串搜索例串搜索例 将串将串STR中第一个中第一个I字符找出,并显示其在串中的位移量字符找出,并显示其在串中的位移量D_SEG SEGM

11、ENTSTR 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, DL11现代微机原理与接口技术现代微机原理与接口技术http:/http:/PUSH CXMOV CL,4S

12、HR 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:.12现代微机原理与接口技术现代微机原理与接口技术http:/http:/串比较例串比较例串比较例串比较例 比较串比较串STR1和和STR2是否相等是否相等 D_SEG SEGMENTSTR1DB S

13、TRING1STR2DB STRING2STR_LEN = ($-STR1)/2MSG1DB NOT EQUAL,$MSG2DB EQUAL,$ D_SEG ENDS.LEA SI, STR1MOV DI, OFFSET STR2MOV CX, STR_LENCLD13现代微机原理与接口技术现代微机原理与接口技术http:/http:/REPE CMPSBREPE CMPSBJNZ NO_EQUAEQUA:MOV AH, 09HLEA DX, MSG2INT 21H;提示两个串相等;提示两个串相等JMP CMP_ENDNO_EQUA:MOV AH, 09HLEA DX, MSG1INT 21H

14、;提示两个串不等;提示两个串不等.CMP_END:.14现代微机原理与接口技术现代微机原理与接口技术http:/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

15、105 49 N DW 32 52 65 105 A_END 32 N15现代微机原理与接口技术现代微机原理与接口技术http:/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 COMPAR

16、E INSERT: MOV A_ENDSI+2, AX ;插入;插入;插入;插入 .16现代微机原理与接口技术现代微机原理与接口技术http:/http:/串删除串删除串删除串删除 串删除例串删除例串删除例串删除例 附加段中有一个首地址为附加段中有一个首地址为 LIST的字数组,数组的第一的字数组,数组的第一字中存放该数组长度,数组字中存放该数组长度,数组首地址在首地址在DI中,数中,数X在在AX中,中,现要在数组中查找现要在数组中查找X,若找,若找到则删除。到则删除。17现代微机原理与接口技术现代微机原理与接口技术http:/http:/ CLD PUSH DI MOV CX, ES:DI;

17、数组长度送;数组长度送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

18、 WORD PTR ES:DI ;数组元素个数减数组元素个数减数组元素个数减数组元素个数减1 1EXIT:. 18现代微机原理与接口技术现代微机原理与接口技术http:/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 19现

19、代微机原理与接口技术现代微机原理与接口技术http:/http:/1 1、十进制、十进制、十进制、十进制ASCII ASCII 码转换成码转换成码转换成码转换成BCDBCD码码码码2 2、BCDBCD码转换成十进制数的码转换成十进制数的码转换成十进制数的码转换成十进制数的ASCIIASCII码码码码3 3、二进制数转换为、二进制数转换为、二进制数转换为、二进制数转换为BCDBCD码码码码4 4、BCDBCD码转换为二进制数码转换为二进制数码转换为二进制数码转换为二进制数汇编语言在代码转换中的应用汇编语言在代码转换中的应用20现代微机原理与接口技术现代微机原理与接口技术http:/http:/十

20、进制十进制十进制十进制ASCII ASCII 码转换成码转换成码转换成码转换成BCDBCD码例码例码例码例 令令ASC_BUF开始的缓冲区开始的缓冲区内存放着若干个内存放着若干个ASCII码表示码表示 ASC_BUF 31H 的十进制数,的十进制数,(每个单元存放一每个单元存放一 32H个十进制数个十进制数),要求将其转换成,要求将其转换成 33HBCD码,并把两个相邻单元的码,并把两个相邻单元的 34HBCD码合并在一个存储单元中码合并在一个存储单元中 35H 若若ASCII码的个数为奇数,码的个数为奇数,则将首地址单元的十进制数对则将首地址单元的十进制数对 应的应的BCD码单独存放一个单元

21、码单独存放一个单元, 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码存放在码存放在码存放在码

22、存放在BCD_BUFBCD_BUF为首地址的缓冲区内为首地址的缓冲区内为首地址的缓冲区内为首地址的缓冲区内 21现代微机原理与接口技术现代微机原理与接口技术http:/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

23、;ASCIIASCII码转换成码转换成码转换成码转换成BCDBCD码码码码 STOSB STOSB ;存储;存储;存储;存储BCDBCD码码码码 DEC CX DEC CX ROR CX,1 ROR CX,1 ;奇数个时单独处理完;奇数个时单独处理完;奇数个时单独处理完;奇数个时单独处理完22现代微机原理与接口技术现代微机原理与接口技术http:/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 S

24、AL 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 23现代微机原理与接口技术现代微机原理与接口技术http:/http:/BCDBCD码转换成十进制数的码转换成十进制数的码转换成十进制数的码转换成十进制数的ASCIIASCII码例码例码例码例 将

25、数据段字节变量将数据段字节变量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缓冲区缓冲区缓冲区缓冲区 出口参数:出口参数:出口参数:出口参数:

26、 正常结束,正常结束,正常结束,正常结束,DH=0FFHDH=0FFH 24现代微机原理与接口技术现代微机原理与接口技术http:/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

27、 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 ;标准设备输出;标准设备输出25现代微机原理与接口技术现代微机原理与接口技术http:/http:/ CHG_OUT2: POP CX CMP CX, 1 JNZ CHG_OUT3 MOV DH, 0FFH CHG_OUT3: PUSH CX MOV AL,

28、 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 26现代微机原理与接口技术现代微机原理与接口技术http:/http:/STD_OUT PROC NEAR ;标准设备输出;标准设备输出 PUSH D

29、X PUSH AX MOV DL, AL MOV AH, 2 INT 21H POP AX POP DX RET STD_OUT ENDP27现代微机原理与接口技术现代微机原理与接口技术http:/http:/二进制数转换为二进制数转换为二进制数转换为二进制数转换为BCDBCD码例码例码例码例 DX寄存器中为一个十六位无符号二进制数寄存器中为一个十六位无符号二进制数(0-65535),将其将其转换为压缩的转换为压缩的BCD码码,保存保存在在BCD_BUF缓冲区缓冲区 DX BCD_BUFBIN_TO_BCD PROC FAR 15678 78 PUSH AX 56 PUSH CX 1 PUSH

30、 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_BUF28现代微机原理与接口技术现代微机原理与接口技术http:/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

31、 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 29现代微机原理与接口技术现代微机原理与接口技术http:/http:/BCDBCD码转换为二进制数例码转换为二进制数例码转换为二进制数例码转换为二进制数例 将将AX寄存器中的四位压缩型寄存器中的四位压缩型BCD码转换为二进制数码转换为二进制数 BCD_TO_BIN PROC PUSH CX PUSH SI PUSH DI M

32、OV 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码码码码30现代微机原理与接口技术现代微机原理与接口技术http:/http:/ MOV CX,10 MUL CX

33、 ;乘;乘10 ADD AX, DI POP CX LOOP AGAIN1 MOV DX, AX ;转换后的二进数在;转换后的二进数在DX中中 POP DI POP SI POP CX RET BCD_TO_BIN ENDP31现代微机原理与接口技术现代微机原理与接口技术http:/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

34、 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)算术运算算术运算32现代微机原理与接口技术现代微机原理与接口技术http:/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

35、AGAIN: MOV AL, SI ADC AL, BX ;字节加;字节加 MOV DI, AL INC SI ;修改地址;修改地址 INC BX INC DI LOOP AGAIN 33现代微机原理与接口技术现代微机原理与接口技术http:/http:/ 设在单元设在单元A、B和和C存放有三个数,若三个数都不为存放有三个数,若三个数都不为0,则,则求出三个数之和存入求出三个数之和存入D中;若有一个为中;若有一个为0,则将其他两个单元,则将其他两个单元也清也清0。MOV AX, ACMP AX, 0JZ P1JZ P1MOV AX, BCMP AX, 0JZ P1JZ P1MOV AX, CC

36、MP AX, 0JZ P1JZ P1ADD AX, A ADC AX, B MOV D, AX JMP DONEJMP DONEP1: MOV A, 0 MOV B, 0 MOV C, 0DONE: . 34现代微机原理与接口技术现代微机原理与接口技术http:/http:/数据区数据区DATA1和和DATA2分别存放分别存放N个字节数据,检查它们的数据个字节数据,检查它们的数据是否相同。若完全一致,则将是否相同。若完全一致,则将FLAG置置FFH,否则置,否则置0,并将第,并将第一次出现的不同数据的地址分别存入一次出现的不同数据的地址分别存入D1和和D2中。中。(1) 用一般比较指令用一般比

37、较指令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: 35现代微机原理与接口技术现代微机原理与接口技术http:/http:/(2)用串操作指令)用串操作指令CMPS实现实现 LEA SI, DATA1 LEA DI, DATA2 MOV CX, N

38、 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: 36现代微机原理与接口技术现代微机原理与接口技术http:/http:/1、利用高档机、利用高档机32位字长特性位字长特性有两个有两个4字长数分别存放在字长数分别存放在DATA1和和DATA2中,求它中,求它们的和,结果存放于们的和,结果存放于DATA3中中。DATA1 DQ 123456789ABCDEFHDAT

39、A2 DQ 0FEDCBA987654321HDATA3 DQ ?在实模式下发挥在实模式下发挥80386及其后继机的优势及其后继机的优势37现代微机原理与接口技术现代微机原理与接口技术http:/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

40、INC DI INC BX INC BX INC BXINC BX LOOP BACKLOOP BACK38现代微机原理与接口技术现代微机原理与接口技术http:/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

41、, 4 POPF POPF LOOP BACK39现代微机原理与接口技术现代微机原理与接口技术http:/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, ED

42、XMOV DWORD PTR DATA3+4, EDX 40现代微机原理与接口技术现代微机原理与接口技术http:/http:/2、通用寄存器可作为指针寄存器、通用寄存器可作为指针寄存器使用使用使用使用3232位寻址时,位寻址时,位寻址时,位寻址时,3232位通用寄存器可作为基址位通用寄存器可作为基址位通用寄存器可作为基址位通用寄存器可作为基址或变址寄存器使用或变址寄存器使用或变址寄存器使用或变址寄存器使用例:例:MOV EAX, BX MOV EAX, EDX MOV AX, WORD PTR ECX MOV AX, EBXEBX 注意:注意:注意:注意: 实模式下,段的大小限制于实模式下,

43、段的大小限制于实模式下,段的大小限制于实模式下,段的大小限制于64KB64KB,3232位通用位通用位通用位通用寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高1616位应为位应为位应为位应为0 041现代微机原理与接口技术现代微机原理与接口技术http:/http:/3、与比例因子有关的寻址方式、与比例因子有关的寻址方式把把5个双字相加并保存结果个双字相加并保存结果ARRAY DD 234556H,0F983F5H,6754AE2H, 0C5231239H,0AF34ACB4HRESULT DQ ? SUB EBX, EBX MOV E

44、DX, 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, EDX42现代微机原理与接口技术现代微机原理与接口技术http:/http:/数据段中有一个数据段中有一个20个字节的表和一个个字节的表和一个20个字的表,把字节表中每个字的表,把字节表中每个数据作为表中的高位字

45、节部分移入字表中。个数据作为表中的高位字节部分移入字表中。 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:用一般寻址方式:用一般寻址方式:用一般寻址方式

46、:用一般寻址方式43现代微机原理与接口技术现代微机原理与接口技术http:/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现代微机原理与接口技术现代微机原理

47、与接口技术http:/http:/宏定义、宏调用与宏展开宏定义、宏调用与宏展开宏定义是源程序中一段有独立功能的程序代码。将这宏定义是源程序中一段有独立功能的程序代码。将这一段程序定义为一条宏指令,并具有一个相应的宏指一段程序定义为一条宏指令,并具有一个相应的宏指令名,在程序中就可以多次调用它,调用时只需要引令名,在程序中就可以多次调用它,调用时只需要引用一个宏指令名来代替这一段程序就可以了。在汇编用一个宏指令名来代替这一段程序就可以了。在汇编的时候,汇编程序会自动将这个宏指令扩展成整段程的时候,汇编程序会自动将这个宏指令扩展成整段程序。序。45现代微机原理与接口技术现代微机原理与接口技术htt

48、p:/http:/宏定义宏定义宏定义有两种格式宏定义有两种格式: 1、简单宏定义、简单宏定义 宏名宏名宏名宏名 MACRO MACRO ;宏体;宏体;宏体;宏体 ;宏体;宏体;宏体;宏体 ENDM ENDM 简单宏定义示例简单宏定义示例CRLFCRLF MACRO MACRO MOV AH, 02H MOV DL, 0DH ;回车;回车 INT 21H MOV DL, 0AH ;换行;换行 MOV AH, 02H INT 21HENDMENDM46现代微机原理与接口技术现代微机原理与接口技术http:/http:/带形参的宏定义示例带形参的宏定义示例 MULTIPLY MACRO OPR1,

49、OPR2, RESULTMULTIPLY MACRO OPR1, OPR2, RESULT PUSH DX PUSH AX MOV AX, OPR1OPR1 IMUL OPR2OPR2 MOV RELUSTRELUST, AX MOV RESULT+2RESULT+2, DX POP AX POP DX ENDM ENDM 2、带形参的宏定义、带形参的宏定义 宏名宏名宏名宏名 MACRO MACRO ;宏体;宏体;宏体;宏体 ;宏体;宏体;宏体;宏体 ENDM ENDM 47现代微机原理与接口技术现代微机原理与接口技术http:/http:/宏调用宏调用宏调用有两种格式:宏调用有两种格式:1、

50、对简单的宏定义的调用:、对简单的宏定义的调用:宏名宏名宏名宏名2、带形参的宏定义的调用:、带形参的宏定义的调用:宏名宏名宏名宏名 宏调用示例宏调用示例 CRLF MULTIPLY CX, VAR, XYZBX MULTIPLY 240, BX, SAVE 48现代微机原理与接口技术现代微机原理与接口技术http:/http:/宏扩展(宏展开)宏扩展(宏展开)宏扩展宏扩展宏扩展宏扩展汇编程序对汇编源程序汇编时将宏体汇编程序对汇编源程序汇编时将宏体汇编程序对汇编源程序汇编时将宏体汇编程序对汇编源程序汇编时将宏体 插入到宏调用处插入到宏调用处插入到宏调用处插入到宏调用处MULTIPLY宏扩展示例宏扩

51、展示例+ PUSH DX + PUSH AX +MOV AX, CXCX +IMUL VARVAR +MOV XYZBXXYZBX,AX ;实参替换形参;实参替换形参 +MOV XYZBX+2XYZBX+2,DX +POP AX +POP DX 说明:说明:说明:说明: 汇编程序在所展开的指令前加汇编程序在所展开的指令前加汇编程序在所展开的指令前加汇编程序在所展开的指令前加+号以示区别号以示区别号以示区别号以示区别 49现代微机原理与接口技术现代微机原理与接口技术http:/http:/宏指令与子程序的区别宏指令与子程序的区别 子程序子程序 宏指令宏指令 程序执行期间程序执行期间 在汇编期间展

52、开在汇编期间展开 由主程序调用由主程序调用 它只占有自身它只占有自身它只占有自身它只占有自身 与调用次数有关,每调用一次与调用次数有关,每调用一次与调用次数有关,每调用一次与调用次数有关,每调用一次 大小的空间大小的空间大小的空间大小的空间 就把宏定义体展开一次就把宏定义体展开一次就把宏定义体展开一次就把宏定义体展开一次 执行时需增加时间执行时需增加时间 直接执行宏体直接执行宏体 上的额外开销上的额外开销50现代微机原理与接口技术现代微机原理与接口技术http:/http:/51现代微机原理与接口技术现代微机原理与接口技术http:/http:/宏定义的进一步讨论:宏定义的进一步讨论:1 1、

53、宏定义可以无变元、宏定义可以无变元、宏定义可以无变元、宏定义可以无变元2 2、变元可以是操作码、变元可以是操作码、变元可以是操作码、变元可以是操作码宏定义:宏定义:宏定义:宏定义: FOO MACRO P1, P2P2, P3 MOV AX, P1 P2 P2 P3 ENDM 宏调用:宏调用:宏调用:宏调用: FOO WORD_VAR, INCINC, AX 宏展开:宏展开:宏展开:宏展开: + MOV AX, WORD_VAR + INCINC AX52现代微机原理与接口技术现代微机原理与接口技术http:/http:/3 3、变元可以是操作码的一部分,必须用、变元可以是操作码的一部分,必须

54、用、变元可以是操作码的一部分,必须用、变元可以是操作码的一部分,必须用&作为分隔符作为分隔符作为分隔符作为分隔符宏定义:宏定义:宏定义:宏定义: LEAP MACRO CONDCOND, LAB J&CONDJ&COND LAB ENDM 宏调用:宏调用:宏调用:宏调用: LEAP C C, THERE宏展开:宏展开:宏展开:宏展开: + JCJC THERE53现代微机原理与接口技术现代微机原理与接口技术http:/http:/4 4、变元是、变元是、变元是、变元是ASCIIASCII串串串串宏定义:宏定义:宏定义:宏定义: MSGGEN MACRO LAB, NUM, XYZXYZ LAB

55、&NUM DB HELLO MR.&XYZXYZ ENDM宏调用:宏调用:宏调用:宏调用: MSGGEN MSG, 1, TAYLORTAYLOR宏展开:宏展开:宏展开:宏展开: + MSG1 DB HELLO MR.TAYLORTAYLOR54现代微机原理与接口技术现代微机原理与接口技术http:/http:/5 5、宏定义体内允许使用标号、宏定义体内允许使用标号、宏定义体内允许使用标号、宏定义体内允许使用标号, , 此时,须使用此时,须使用此时,须使用此时,须使用LOCALLOCAL伪操作伪操作伪操作伪操作 宏定义:宏定义:宏定义:宏定义: ABSOL MACRO OPER LOCAL N

56、EXTLOCAL NEXT CMP OPER, 0 JGE NEXTNEXT NEG OPER NEXT:NEXT: ENDM宏调用:宏调用:宏调用:宏调用: ABSOL VAR ABSOL BX 宏展开:宏展开:宏展开:宏展开: + CMP VAR, 0 + JGE ?0000?0000 + NEG VAR + ?0000?0000: + CMP BX, 0 + JGE ?0001?0001 + NEG BX + ?0001?0001: 55现代微机原理与接口技术现代微机原理与接口技术http:/http:/6 6、宏定义中可以使用宏调用,(必须先定义后调用)、宏定义中可以使用宏调用,(必须

57、先定义后调用)、宏定义中可以使用宏调用,(必须先定义后调用)、宏定义中可以使用宏调用,(必须先定义后调用)宏定义:宏定义:宏定义:宏定义: DIF MACRO X, YDIF MACRO X, Y MOV AX, X MOV AX, X SUB AX, Y SUB AX, Y ENDM ENDM DIFSQR MACRO OPR1, OPR2, RESULT PUSH DX PUSH AX DIF OPR1, OPR2DIF OPR1, OPR2 IMUL AX MOV RESULT, AX POP AX POP DX ENDM 56现代微机原理与接口技术现代微机原理与接口技术http:/ht

58、tp:/在在VC+中嵌入汇编语言指令中嵌入汇编语言指令本节类容适合在本节类容适合在本节类容适合在本节类容适合在Visual C+5.0/60Visual C+5.0/60中使用中使用中使用中使用格式格式格式格式1 1:_asm_asm 汇编语言指令汇编语言指令汇编语言指令汇编语言指令 格式格式格式格式2 2:_asm _asm 汇编语言指令汇编语言指令汇编语言指令汇编语言指令说明说明:1)格式)格式1中中 内可以是内可以是1条也可以是多条汇编指令条也可以是多条汇编指令 2)格式)格式2只能跟一条汇编语言指令只能跟一条汇编语言指令 3)有些版本的)有些版本的VC需要使用需要使用_asm(两个下划

59、线)(两个下划线)57现代微机原理与接口技术现代微机原理与接口技术http:/http:/嵌入汇编示例嵌入汇编示例1_asm_asm mov eax, 01h mov dx, 0xD007 out dx, eax 嵌入汇编示例嵌入汇编示例2_asm_asm mov eax, 01h_asm_asm mov dx, 0xD007_asm_asm out dx, eax58现代微机原理与接口技术现代微机原理与接口技术http:/http:/在在在在_asm_asm中使用汇编语言的注意事项:中使用汇编语言的注意事项:中使用汇编语言的注意事项:中使用汇编语言的注意事项:1.嵌入式汇编支持嵌入式汇编支持

60、嵌入式汇编支持嵌入式汇编支持8048680486的全部指令系统。的全部指令系统。的全部指令系统。的全部指令系统。VC+5/6VC+5/6还还还还支持支持支持支持MMXMMX指令集。指令集。指令集。指令集。2.对于不支持的指令,对于不支持的指令,对于不支持的指令,对于不支持的指令,VCVC提供提供提供提供_emit_emit伪指令进行扩展伪指令进行扩展伪指令进行扩展伪指令进行扩展 #define #define cpi_idcpi_id _ _asmasm _emit 0x0F _ _emit 0x0F _asmasm _emit 0XA2 _emit 0XA2 _ _asmasm cpu_id

61、cpu_id / /使用使用使用使用C+C+的宏的宏的宏的宏3.嵌入式汇编代码可以使用嵌入式汇编代码可以使用嵌入式汇编代码可以使用嵌入式汇编代码可以使用MASMMASM的表达式来产生一的表达式来产生一的表达式来产生一的表达式来产生一个数值或地址个数值或地址个数值或地址个数值或地址4.嵌入式汇编行可以采用嵌入式汇编行可以采用嵌入式汇编行可以采用嵌入式汇编行可以采用C+C+或或或或MASMMASM的注释风格的注释风格的注释风格的注释风格5.嵌入式汇编可以使用嵌入式汇编可以使用嵌入式汇编可以使用嵌入式汇编可以使用C+C+的数据类型和数据对象,的数据类型和数据对象,的数据类型和数据对象,的数据类型和数

62、据对象,但是不能使用但是不能使用但是不能使用但是不能使用MASMMASM的伪指令和操作符定义数据,的伪指令和操作符定义数据,的伪指令和操作符定义数据,的伪指令和操作符定义数据,如如如如DB, DW, DUPDB, DW, DUP等等等等59现代微机原理与接口技术现代微机原理与接口技术http:/http:/6.嵌入式汇编不支持嵌入式汇编不支持嵌入式汇编不支持嵌入式汇编不支持MASMMASM的宏指令,也不支持大部的宏指令,也不支持大部的宏指令,也不支持大部的宏指令,也不支持大部分分分分MASMMASM伪伪伪伪指令指令指令指令7.用汇编语言编写的函数中,不必保存用汇编语言编写的函数中,不必保存用汇

63、编语言编写的函数中,不必保存用汇编语言编写的函数中,不必保存EAX/EBX/ECX/EDX/ESIEAX/EBX/ECX/EDX/ESI和和和和EDIEDI寄存器,但是必须寄存器,但是必须寄存器,但是必须寄存器,但是必须保存函数中使用的其他寄存器保存函数中使用的其他寄存器保存函数中使用的其他寄存器保存函数中使用的其他寄存器8.嵌入式汇编代码可以使用嵌入式汇编代码可以使用嵌入式汇编代码可以使用嵌入式汇编代码可以使用LENGTHLENGTH(返回数组元素返回数组元素返回数组元素返回数组元素个数)个数)个数)个数)、 TYPETYPE(返回返回返回返回 C+C+类型或变量的大小)类型或变量的大小)类

64、型或变量的大小)类型或变量的大小)、 SIZESIZE(LENGTHTYPELENGTHTYPE)操作符。操作符。操作符。操作符。对于数据对于数据对于数据对于数据 int iarray8 int iarray8(intint类型是类型是类型是类型是3232位位位位,4 ,4字节),则:字节),则:字节),则:字节),则:LENGTH iarray LENGTH iarray 返回返回返回返回8 8 TYPE iarray TYPE iarray 返回返回返回返回4 4SIZE iarray SIZE iarray 返回返回返回返回323260现代微机原理与接口技术现代微机原理与接口技术http

65、:/http:/在在在在_asm_asm中使用中使用中使用中使用C+C+语言的注意事项:语言的注意事项:语言的注意事项:语言的注意事项:1.嵌入式汇编代码可以使用嵌入式汇编代码可以使用嵌入式汇编代码可以使用嵌入式汇编代码可以使用C+C+的符号(包括标号、的符号(包括标号、的符号(包括标号、的符号(包括标号、变量、函数名)、常量(包括符号常量、枚举成员)变量、函数名)、常量(包括符号常量、枚举成员)变量、函数名)、常量(包括符号常量、枚举成员)变量、函数名)、常量(包括符号常量、枚举成员)、宏和预处理指令、注释、类型名及结构、联合的、宏和预处理指令、注释、类型名及结构、联合的、宏和预处理指令、注

66、释、类型名及结构、联合的、宏和预处理指令、注释、类型名及结构、联合的成员。成员。成员。成员。2.每一个汇编语句只能包含一个每一个汇编语句只能包含一个每一个汇编语句只能包含一个每一个汇编语句只能包含一个C+C+符号,且不能使符号,且不能使符号,且不能使符号,且不能使用和用和用和用和MASMMASM保留字相同的保留字相同的保留字相同的保留字相同的C+C+符号,也不识别符号,也不识别符号,也不识别符号,也不识别structstruct和和和和unionunion关键字关键字关键字关键字3._ _asmasm中引用函数前必须在程序说明其原型中引用函数前必须在程序说明其原型中引用函数前必须在程序说明其原

67、型中引用函数前必须在程序说明其原型4.嵌入式汇编语句中可以使用汇编语言格式表示整数嵌入式汇编语句中可以使用汇编语言格式表示整数嵌入式汇编语句中可以使用汇编语言格式表示整数嵌入式汇编语句中可以使用汇编语言格式表示整数常量,也可以采用常量,也可以采用常量,也可以采用常量,也可以采用C+C+的格式(如的格式(如的格式(如的格式(如0x37a0x37a)61现代微机原理与接口技术现代微机原理与接口技术http:/http:/5.嵌入式汇编语言中不能使用嵌入式汇编语言中不能使用嵌入式汇编语言中不能使用嵌入式汇编语言中不能使用C+C+专用操作符,如专用操作符,如专用操作符,如专用操作符,如,可以使用两种语

68、言都有的操作符,可以使用两种语言都有的操作符,可以使用两种语言都有的操作符,可以使用两种语言都有的操作符6.嵌入式汇编中可以引用包含该嵌入式汇编中可以引用包含该嵌入式汇编中可以引用包含该嵌入式汇编中可以引用包含该_ _asmasm作用范围内的任作用范围内的任作用范围内的任作用范围内的任何符号(包括变量),它通过使用变量名引用何符号(包括变量),它通过使用变量名引用何符号(包括变量),它通过使用变量名引用何符号(包括变量),它通过使用变量名引用C+C+的变量的变量的变量的变量7.嵌入式会变中的标号的作用范围为定义它的函数中嵌入式会变中的标号的作用范围为定义它的函数中嵌入式会变中的标号的作用范围为

69、定义它的函数中嵌入式会变中的标号的作用范围为定义它的函数中有效,汇编转移指令和有效,汇编转移指令和有效,汇编转移指令和有效,汇编转移指令和C+C+的的的的gotogoto指令都可以跳到指令都可以跳到指令都可以跳到指令都可以跳到_ _asmasm块内或块外的标号块内或块外的标号块内或块外的标号块内或块外的标号8._ _asmasm块中块中块中块中定义的标号对大小写不敏感,汇编语言指定义的标号对大小写不敏感,汇编语言指定义的标号对大小写不敏感,汇编语言指定义的标号对大小写不敏感,汇编语言指令跳转到令跳转到令跳转到令跳转到C+C+中的标号也大小写不敏感,但中的标号也大小写不敏感,但中的标号也大小写不

70、敏感,但中的标号也大小写不敏感,但C+C+的的的的gotogoto语句跳转的标号大小写敏感语句跳转的标号大小写敏感语句跳转的标号大小写敏感语句跳转的标号大小写敏感62现代微机原理与接口技术现代微机原理与接口技术http:/http:/int array6struct first_type char *carray; int same_name; ftype;struct second_type int same_name; stype _asm mov array6, dx mov ebx,OFFSET ftype mov ecx, ebx.carray mov esi, ebxftype.s

71、ame_name使用使用C+数据举例数据举例63现代微机原理与接口技术现代微机原理与接口技术http:/http:/嵌入式汇编举例:嵌入式汇编举例:#include int power2(int, int);void main(void) cout2的的6次方乘次方乘5等于等于:t; coutpower2(5,6)endl;int power2(int num, int power) _asm mov eax, num ; 取第一个参数取第一个参数 mov ecx, power ; 取第二个参数取第二个参数 shl eax, cl ; 计算计算EAX=EAX(2CL) / 返回值存于返回值存于EAX64现代微机原理与接口技术现代微机原理与接口技术http:/http:/汇编语言通过参数名就可以引用参数,采用汇编语言通过参数名就可以引用参数,采用return返回返回出口参数,也可以不写出口参数,也可以不写return,编译时可能有警告。,编译时可能有警告。返回值的约定返回值的约定返回值的约定返回值的约定:32位的数据扩展到位的数据扩展到32位,存放在位,存放在EAX中返回中返回48字节的返回值存放在字节的返回值存放在EDX.EAX中返回中返回更大的字节数据将它的地址指针存放在更大的字节数据将它的地址指针存放在EAX中返回中返回65

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号