汇编语言在数据处理中的应用1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

、数值转换中应用数据输入/输出时的转换2、串操作中应用串移动、串搜索、串比较、串插入、串删除3、代码转换中应用ASCII码BCD码二进数BCD码4、算术运算在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在11章中已经介绍过。汇编语言在数据处理中应用(自学)码表示的十进制二进制ASCII码表示的十六进制二进制ASCII码表示的二进制二进制机内二进制操作运算二进制ASCII码表示的十进制二进制ASCII码表示的十六进制二进制ASCII码表示的二进制ASCII码输出设备、d3、d2、d1、d0。可用下列多项式进行计算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII码-30H累加器*10累加器+这一位值修改指令结束NY汇编语言在数值转换中的应用;SI指向十进制缓冲区首址MOVDX,0;初始化MOVCX,10GET_ASC:MOVAL,[SI];取得十进制数CMPAL,‘0’JBEXITCMPAL,‘9’JAEXITDEC_BIN:SUBAL,30HMOVAH,0PUSHAXMOVAX,DXMULCX;*10MOVDX,AXPOPAXADDDX,AXINCSI;修改指针JMPGET_ASCEXIT:RET;转换后的二进数在DX中CHG_DEC_BINENDP现代微机原理与接口技术6BIN_TO_DECPROC;被转换的十进数在AX中PUSHDI;DI指向存放十进数缓冲区首址MOVCX,5;初始化CLEAR_BUF:MOVBYTEPTR[DI],‘‘INCDILOOPCLEAR_BUFDECDIMOVCX,10CHANGE:MOVDX,0;转换DIVCX;除以10,余数在DXADDDL,30H;ASCII码MOVBYTEPTR[DI],DL;存储十进制数DECDICMPAX,0商是否为0?JNZCHANGEPOPDIRETBIN_TO_DECENDP~9和A~F,输入后,ASCII码为30H~39H和41H~46H转换时,若是数字0~9,减30H若是A~F,减去37HHEX_TO_BINPROCPUSHAXPUSHCXMOVDX,0;转换后结果在DX中GET_CHAR:MOVAX,01H;键盘输入INT21HSUBAL,30HJLEXITCMPAL,0AHJLCHANGESUBAL,07H;是否是大写字母JLEXITCMPAL,0FHJLECHANGECMPAL,2AH;是否是小写字母JLEXITCMPAL,2FHJLECHANGEJMPEXITCHANGE:MOVCL,4;转换SHLDX,CLMOVAH,0ADDDX,AXJMPGET_CHARPOPCXPOPAXEXIT:RETHEX_TO_BINENDP串移动(数据块移动)串搜索串比较串插入串删除求串长汇编语言在串操作中的应用、一般情况S1S2源区目的区2、特殊情况:源区与目的区重叠源区目的区目的区源区中第一个‘I’字符找出,并显示其在串中的位移量D_SEGSEGMENTSTRDB‘THISISACOMPUTER’STR_LEN=$-STRD_SEGENDS......LEADI,STRMOVCX,STR_LENMOVAL,’I’CLDFOUND:REPNZSCASBJEOK1JCXZRETNOK1:MOVDX,DIDECDL;第一个'I'字符距串头位移量MOVBL,DL:ADDDL,30HMOVAH,02HINT21H;显示位移量高位MOVDL,BLANDDL,0FHCMPDL,0AHJBOK30K3:ADDDL,30HMOVAH,02HINT21H;显示位移量低位MOVDL,'H'INT21HRETN:......=($-STR1)/2MSG1DB'NOTEQUAL','$'MSG2DB'EQUAL','$'D_SEGENDS......LEASI,STR1MOVDI,OFFSETSTR2MOVCX,STR_LENCLD;提示两个串相等JMPCMP_ENDNO_EQUA:MOVAH,09HLEADX,MSG1INT21H;提示两个串不等......CMP_END:......串插入串插入分三种情况:1、在目的串首插入2、在目的串尾插入3、在目的串中指定的位置插入串插入例将正数N插入一个升序的字数组中,数组的首地址和末地址为A_HEAD和A_ENDX3A_HEADXDW?5A_HEADDW3,5,23,49,52,6523A_ENDDW10549NDW325265105A_END32N:CMPA_END[SI],AX;从最后一个元素开始比较JLEINSERTMOVBX,A_END[SI]MOVA_END[SI+2],BX;元素后移一个位置SUBSI,2JMPCOMPAREINSERT:MOVA_END[SI+2],AX;插入.....的字数组,数组的第一字中存放该数组长度,数组首地址在DI中,数X在AX中,现要在数组中查找X,若找到则删除。:[DI];数组长度送CXADDDI,2;DI指向第一个元素REPNESCASW;串扫描JEDELETE;如找到则删除POPDI;否则,退出JMPEXITDELET:JCXZDEC_CNT;若CX=0,X为最后一个元素NEXT_EL:MOVBX,ES:[DI]MOVES:[DI-2],BX;元素向前移动一个位置ADDDI,2LOOPNEXT_ELDEC_CNT:POPDIDECWORDPTRES:[DI];数组元素个数减1EXIT:......,假定串以‘$’结束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL、十进制ASCII码转换成BCD码2、BCD码转换成十进制数的ASCII码3、二进制数转换为BCD码4、BCD码转换为二进制数汇编语言在代码转换中的应用的十进制数,(每个单元存放一32H个十进制数),要求将其转换成33HBCD码,并把两个相邻单元的34HBCD码合并在一个存储单元中35H若ASCII码的个数为奇数,则将首地址单元的十进制数对应的BCD码单独存放一个单元,BCD_BUF1其余的按统一方法处理32子程序名:DEC_ASC_BCD54入口参数:DS:SI指向ASCII码首地址ASC_BUFES:DI指向BCD码首地址BCD_BUFCX=串长度,DS,ES指向同一个段出口参数:BCD码存放在BCD_BUF为首地址的缓冲区内;保护现场PUSHDIPUSHAXPUSHBXPUSHCXRORCX,1JNCNEXT;ASCII码为偶数个转移ROLCXLODSB;取ASCII码到ALANDAL,0FH;ASCII码转换成BCD码STOSB;存储BCD码DECCXRORCX,1;奇数个时单独处理完;合并BCD码STOSB;存储BCD码LOOPNEXTPOPCX;恢复现场POPBXPOPAXPOPDIPOPSIRETDEC_ASC_BCDENDP码,并显示BCD_BUF12345678显示:78563412子程序名:BCD_DEC_ASC入口参数:一个八位十进制数对应的压缩BCD码存储在BCD_BUF缓冲区出口参数:正常结束,DH=0FFH;保护现场PUSHAXPUSHCXMOVCX,4LEASI,BCD_BUFADDSI,3MOVDH,0CHG_OUT1:PUSHCXMOVAL,[SI];取压缩BCD码DECSI;修改指针MOVDL,ALMOVCL,4RORAL,4ANDAL,0FH;取高半字节BCD码ADDAL,30H;生成ASCII码CALLSTD_OUT;标准设备输出:PUSHCXMOVAL,DLANDAL,0FH;取低半字节BCD码ADDAL,30H;生成ASCII码CALLSTD_OUT;标准设备输出CHG_OUT4:POPCXLOOPCHG_OUT1POPCXPOPAXPOPSIRETBCD_DEC_ASCENDP;标准设备输出PUSHDXPU

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功