资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
第11页 / 共44页
第12页 / 共44页
第13页 / 共44页
第14页 / 共44页
第15页 / 共44页
第16页 / 共44页
第17页 / 共44页
第18页 / 共44页
第19页 / 共44页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,http:/,现代微机原理与接口技术,1、数值转换中应用,数据输入/输出时的转换,2、串操作中应用,串移动、串搜索、串比较、,串插入、串删除,3、代码转换中应用,ASCII码 BCD码,二进数 BCD码,4、算术运算,在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在11章中已经介绍过。,汇编语言在数据处理中应用(自学),1,1、数值转换中应用在这一部分,我们将汇编语言在数据处理中的应,ASCII码输入设备,ASCII码表示的,十进制,二进制,ASCII码表示的,十六进制,二进制,ASCII码表示的,二进制,二进制,机内二进制操作运算,二进制,ASCII码,表示的十进制,二进制,ASCII码,表示的十六进制,二进制,ASCII码,表示的二进制,ASCII码输出设备,2,ASCII码输入设备ASCII码表示的ASCII码表示的AS,ASCII码十进制转换为二进制数,设5位十进数从高位到低位,依次是,d4、d3、d2、d1、d0。,可用下列多项式进行计算:,(0*10+d4)*10+d3)*10,+d2)*10+d1)*10+d0,初始化,是0-9,ASCII码-30H,累加器*10,累加器+这一位值,修改指令,结束,N,Y,汇编语言在数值转换中的应用,3,ASCII码十进制转换为二进制数初始化是0-9ASCII码,CHG_DEC_BINPROC ;,SI 指向十进制缓冲区首址,MOV DX,0 ;初始化,MOV CX,10,GET_ASC:MOV AL,SI;取得十进制数,CMP AL,0,JB EXIT,CMP AL,9,JA EXIT,DEC_BIN:SUB AL,30H,MOV AH,0,PUSH AX,MOV AX,DX,MUL CX ;*10,MOV DX,AX,POP AX,ADD DX,AX,INC SI ;修改指针,JMP GET_ASC,EXIT:RET ;,转换后的二进数在DX中,CHG_DEC_BIN ENDP,4,CHG_DEC_BINPROC,二进制数转换为 ASCII码十进制,5,二进制数转换为 ASCII码十进,BIN_TO_DEC PROC ;,被转换的十进数在AX中,PUSH DI ;,DI 指向存放十进数缓冲区首址,MOV CX,5 ;初始化,CLEAR_BUF:MOV BYTE PTRDI,INC DI,LOOP CLEAR_BUF,DEC DI,MOV CX,10,CHANGE:,MOV DX,0;转换,DIV CX ;除以10,余数在,DX,ADD DL,30H;ASCII码,MOV BYTE PTRDI,DL;存储十进制数,DEC DI,CMP AX,0,商是否为0?,JNZ CHANGE,POP DI,RET,BIN_TO_DECENDP,6,BIN_TO_DEC PROC,ASCII码十六进制数转换为二进制数,十六进制数的字符为09和AF,输入后,ASCII码为30H39H和41H46H,转换时,,若是数字09,减30H,若是AF,减去37H,HEX_TO_BIN PROC,PUSH AX,PUSH CX,MOV DX,0 ;,转换后结果在DX中,GET_CHAR:MOV AX,01H ;键盘输入,INT 21H,SUB AL,30H,JL EXIT,CMP AL,0AH,JL CHANGE,SUB AL,07H,7,ASCII码十六进制数转换为二进制数 7,CMP AL,0AH ;是否是大写字母,JL EXIT,CMP AL,0FH,JLE CHANGE,CMP AL,2AH ;是否是小写字母,JL EXIT,CMP AL,2FH,JLE CHANGE,JMP EXIT,CHANGE:MOV CL,4 ;转换,SHL DX,CL,MOV AH,0,ADD DX,AX,JMP GET_CHAR,POP CX,POP AX,EXIT:RET,HEX_TO_BIN ENDP,8,CMP AL,0AH ;是否是大,串移动(数据块移动),串搜索,串比较,串插入,串删除,求串长,汇编语言在串操作中的应用,9,串移动(数据块移动)汇编语言在串操作中的应用9,数据块移动,1、一般情况,S1 S2,源区 目的区,2、特殊情况:,源区与目的区重叠,源区 目的区,目的区 源区,10,数据块移动10,串搜索例,将串STR中第一个I字符找出,并显示其在串中的位移量,D_SEG SEGMENT,STR DB THIS IS A COMPUTER,STR_LEN=$-STR,D_SEG ENDS,.,LEA DI,STR,MOV CX,STR_LEN,MOV AL,I,CLD,FOUND:,REPNZ SCASB,JE OK1,JCXZ RETN,OK1:MOV DX,DI,DEC DL ;第一个I字符距串头位移量,MOV BL,DL,11,串搜索例 11,PUSH CX,MOV CL,4,SHR DL,CL,POP CX,CMP DL,0AH,JB OK2,ADD DL,7,OK2:ADD DL,30H,MOV AH,02H,INT 21H;显示位移量高位,MOV DL,BL,AND DL,0FH,CMP DL,0AH,JB OK3,0K3:ADD DL,30H,MOV AH,02H,INT 21H;显示位移量低位,MOV DL,H,INT 21H,RETN:.,12,PUSH CX12,串比较例,比较串STR1和STR2是否相等,D_SEG SEGMENT,STR1DB STRING1,STR2DB STRING2,STR_LEN=($-STR1)/2,MSG1DB NOT EQUAL,$,MSG2DB EQUAL,$,D_SEG ENDS,.,LEA SI,STR1,MOV DI,OFFSET STR2,MOV CX,STR_LEN,CLD,13,串比较例 13,REPE CMPSB,JNZ NO_EQUA,EQUA:MOV AH,09H,LEA DX,MSG2,INT 21H;提示两个串相等,JMP CMP_END,NO_EQUA:MOV AH,09H,LEA DX,MSG1,INT 21H;提示两个串不等,.,CMP_END:.,14,REPE CMPSB14,串插入,串插入分三种情况:,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 N,15,串插入15,MOV AX,N,MOV 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,;插入,.,16,MOV AX,串删除,串删除例,附加段中有一个首地址为,LIST的字数组,数组的第一,字中存放该数组长度,数组,首地址在DI中,数X在AX中,,现要在数组中查找X,若找,到则删除。,17,串删除 17,CLD,PUSH DI,MOV CX,ES:DI;数组长度送CX,ADD DI,2;DI指向第一个元素,REPNE SCASW,;串扫描,JE DELETE;如找到则删除,POP DI;否则,退出,JMP EXIT,DELET:,JCXZ DEC_CNT,;若CX=0,X为最后一个元素,NEXT_EL:MOV BX,ES:DI,MOV ES:DI-2,BX;,元素向前移动一个位置,ADD DI,2,LOOP NEXT_EL,DEC_CNT:POP DI,DEC WORD PTR ES:DI;,数组元素个数减1,EXIT:.,18,CLD18,求串长,求串长例,求字符串的长度送入,LEN,假定串以$结束,STRING DB Hello,How are you!,$,.,MOV SI,OFFSET STRING,XOR BL,BL,LOP:MOV AL,SI,CMP AL,$,JZ DONE,INC BL,INC SI,JMP LOP,DONE:MOV LEN,BL,19,求串长19,1、十进制ASCII 码转换成BCD码,2、BCD码转换成十进制数的ASCII码,3、二进制数转换为BCD码,4、BCD码转换为二进制数,汇编语言在代码转换中的应用,20,1、十进制ASCII 码转换成BCD码汇编语言在代码转换中的,十进制ASCII 码转换成BCD码例,令ASC_BUF开始的缓冲区,内存放着若干个ASCII码表示 ASC_BUF 31H,的十进制数,(每个单元存放一 32H,个十进制数),要求将其转换成 33H,BCD码,并把两个相邻单元的 34H,BCD码合并在一个存储单元中 35H,若ASCII码的个数为奇数,,则将首地址单元的十进制数对,应的BCD码单独存放一个单元,BCD_BUF 1,其余的按统一方法处理 32,子程序名:DEC_ASC_BCD 54,入口参数:DS:SI指向ASCII码首地址ASC_BUF,ES:DI指向BCD码首地址BCD_BUF,CX=串长度,DS,ES指向同一个段,出口参数:BCD码存放在BCD_BUF为首地址的缓冲区内,21,十进制ASCII 码转换成BCD码例21,DEC_ASC_BCD PROC FAR,PUSH SI ;保护现场,PUSH DI,PUSH AX,PUSH BX,PUSH CX,ROR CX,1,JNC NEXT,;ASCII码为偶数个转移,ROL CX,LODSB ;取ASCII码到AL,AND AL,0FH ;ASCII码转换成BCD码,STOSB ;存储BCD码,DEC CX,ROR CX,1 ;奇数个时单独处理完,22,DEC_ASC_BCD PROC FAR22,NEXT:LODSB,AND AL,0FH,MOV BL,AL,LODSB,PUSH CX,MOV CL,4,SAL AL,CL,POP CX,ADD AL,BL ;合并BCD码,STOSB ;存储BCD码,LOOP NEXT,POP CX ;恢复现场,POP BX,POP AX,POP DI,POP SI,RET,DEC_ASC_BCD ENDP,23,NEXT:LODSB2,BCD码转换成十进制数的ASCII码例,将数据段字节变量BCD_BUF为首地址的缓冲区中一个,八位十进制数对应的压缩BCD码转换成ASCII码,并显示,BCD_BUF 12,34,56,78,显示:7 8 5 6 3 4 1 2,子程序名:BCD_DEC_ASC,入口参数:一个八位十进制数对应的压缩BCD码存储,在BCD_BUF缓冲区,出口参数:正常结束,DH=0FFH,24,BCD码转换成十进制数的ASCII码例24,BCD_DEC_ASC PROC NEAR,PUSH SI ;保护现场,PUSH AX,PUSH CX,MOV CX,4,LEA SI,BCD_BUF,ADD SI,3,MOV DH,0,CHG_OUT1:PUSH CX,MOV AL,SI ;取压缩BCD码,DEC SI ;修改指针,MOV DL,AL,MOV CL,4,ROR AL,4,AND AL,0FH ;取高半字节BCD码,ADD AL,30H ;生成ASCII码,CALL STD_OUT ;标准设备输出,25,BCD_DEC_ASC PROC NEAR25,CHG_OUT2:POP CX,CMP CX,1,JNZ CHG_OUT3,MOV DH,0FFH,CHG_OUT3:PUSH CX,MOV AL,DL,
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6