数值转换中应用数据输入输出时的转换串操作中应用课件_第1页
数值转换中应用数据输入输出时的转换串操作中应用课件_第2页
数值转换中应用数据输入输出时的转换串操作中应用课件_第3页
数值转换中应用数据输入输出时的转换串操作中应用课件_第4页
数值转换中应用数据输入输出时的转换串操作中应用课件_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数值转换中应用数据输入/输出时的转换2、串操作中应用串移动、串搜索、串比较、串插入、串删除3、代码转换中应用ASCII码BCD码二进数BCD码4、算术运算在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在11章中已经介绍过。汇编语言在数据处理中应用(自学)11、数值转换中应用在这一部分,我们将汇编语言在数据处理中的应ASCII码输入设备ASCII码表示的十进制二进制ASCII码表示的十六进制二进制ASCII码表示的二进制二进制机内二进制操作运算二进制ASCII码表示的十进制二进制ASCII码表示的十六进制二进制ASCII码表示的二进制ASCII码输出设备2ASCII码输入设备ASCII码表示的ASCII码表示的ASASCII码十进制转换为二进制数设5位十进数从高位到低位依次是d4、d3、d2、d1、d0。可用下列多项式进行计算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII码-30H累加器*10累加器+这一位值修改指令结束NY汇编语言在数值转换中的应用3ASCII码十进制转换为二进制数初始化是0--9ASCII码

CHG_DEC_BIN PROC;SI指向十进制缓冲区首址 MOVDX,0;初始化 MOVCX,10 GET_ASC: MOVAL,[SI] ;取得十进制数 CMPAL,‘0’ JBEXIT CMPAL,‘9’ JAEXIT DEC_BIN: SUBAL,30H MOVAH,0

PUSHAX MOVAX,DX MULCX;*10 MOVDX,AX

POPAX ADDDX,AX INCSI;修改指针 JMPGET_ASC EXIT: RET;转换后的二进数在DX中CHG_DEC_BINENDP4CHG_DEC_BIN PROC二进制数转换为ASCII码十进制5二进制数转换为ASCII码十进BIN_TO_DECPROC;被转换的十进数在AX中 PUSHDI;DI指向存放十进数缓冲区首址 MOVCX,5;初始化CLEAR_BUF: MOVBYTEPTR[DI],‘‘ INCDI LOOPCLEAR_BUF DECDI MOVCX,10CHANGE: MOVDX,0 ;转换 DIVCX;除以10,余数在DX ADDDL,30H ;ASCII码 MOVBYTEPTR[DI],DL ;存储十进制数 DECDI CMPAX,0商是否为0? JNZCHANGE POPDI RETBIN_TO_DEC ENDP6BIN_TO_DECPROCASCII码十六进制数转换为二进制数

十六进制数的字符为0~9和A~F,输入后,ASCII码为30H~39H和41H~46H转换时,若是数字0~9,减30H若是A~F,减去37H

HEX_TO_BINPROC PUSHAX PUSHCX MOVDX,0;转换后结果在DX中GET_CHAR:MOVAX,01H ;键盘输入 INT21H SUBAL,30H JLEXIT CMPAL,0AH JLCHANGE SUBAL,07H7ASCII码十六进制数转换为二进制数7

CMPAL,0AH;是否是大写字母 JLEXIT CMPAL,0FH JLECHANGE CMPAL,2AH;是否是小写字母 JLEXIT CMPAL,2FH JLECHANGE JMPEXIT

CHANGE: MOVCL,4 ;转换 SHLDX,CL MOVAH,0 ADDDX,AX JMPGET_CHAR POPCX POPAX

EXIT: RETHEX_TO_BINENDP

8 CMPAL,0AH;是否是大串移动(数据块移动)串搜索串比较串插入串删除求串长汇编语言在串操作中的应用9串移动(数据块移动)汇编语言在串操作中的应用9

数据块移动1、一般情况S1S2源区目的区2、特殊情况:源区与目的区重叠源区目的区目的区源区

10数据块移动10串搜索例

将串STR中第一个‘I’字符找出,并显示其在串中的位移量 D_SEGSEGMENT STRDB‘THISISACOMPUTER’ STR_LEN=$-STR D_SEGENDS ...... LEADI,STR MOVCX,STR_LEN MOVAL,’I’ CLDFOUND: REPNZSCASB JEOK1 JCXZRETN

OK1: MOVDX,DI DECDL ;第一个'I'字符距串头位移量 MOVBL,DL11串搜索例11

PUSHCX MOVCL,4 SHRDL,CL POPCX CMPDL,0AH JBOK2 ADDDL,7 OK2: ADDDL,30H MOVAH,02H INT21H ;显示位移量高位 MOVDL,BL ANDDL,0FH CMPDL,0AH JBOK3 0K3: ADDDL,30H MOVAH,02H INT21H ;显示位移量低位 MOVDL,'H' INT21HRETN: ......12 PUSHCX12串比较例比较串STR1和STR2是否相等D_SEGSEGMENT STR1 DB'STRING1' STR2 DB'STRING2' STR_LEN=($-STR1)/2 MSG1 DB'NOTEQUAL','$' MSG2 DB'EQUAL','$'D_SEGENDS ...... LEASI,STR1 MOVDI,OFFSETSTR2 MOVCX,STR_LEN CLD13串比较例13

REPECMPSB JNZNO_EQUAEQUA: MOVAH,09H LEADX,MSG2 INT21H ;提示两个串相等 JMPCMP_END NO_EQUA: MOVAH,09H LEADX,MSG1 INT21H ;提示两个串不等 ...... CMP_END:...... 14 REPECMPSB14串插入串插入分三种情况:1、在目的串首插入2、在目的串尾插入3、在目的串中指定的位置插入串插入例将正数N插入一个升序的字数组中,数组的首地址和末地址为A_HEAD和A_ENDX3A_HEADXDW?5A_HEADDW3,5,23,49,52,6523A_ENDDW10549NDW325265105A_END32N15串插入15MOVAX,N

MOVA_HEAD-2,-1MOVSI,0COMPARE:CMPA_END[SI],AX

;从最后一个元素开始比较JLEINSERTMOVBX,A_END[SI]MOVA_END[SI+2],BX

;元素后移一个位置SUBSI,2JMPCOMPAREINSERT:MOVA_END[SI+2],AX;插入

.....16MOVAX,串删除

串删除例附加段中有一个首地址为LIST的字数组,数组的第一字中存放该数组长度,数组首地址在DI中,数X在AX中,现要在数组中查找X,若找到则删除。17串删除17

CLD PUSHDI MOVCX,ES:[DI] ;数组长度送CX ADDDI,2 ;DI指向第一个元素

REPNESCASW ;串扫描 JEDELETE ;如找到则删除 POPDI ;否则,退出 JMPEXITDELET:JCXZDEC_CNT ;若CX=0,X为最后一个元素NEXT_EL:MOVBX,ES:[DI] MOVES:[DI-2],BX ;元素向前移动一个位置 ADDDI,2 LOOPNEXT_ELDEC_CNT:POPDI DECWORDPTRES:[DI] ;数组元素个数减1EXIT: ......18CLD18

求串长求串长例求字符串的长度送入LEN,假定串以‘$’结束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]

CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL19求串长191、十进制ASCII码转换成BCD码2、BCD码转换成十进制数的ASCII码3、二进制数转换为BCD码4、BCD码转换为二进制数汇编语言在代码转换中的应用201、十进制ASCII码转换成BCD码汇编语言在代码转换中的十进制ASCII码转换成BCD码例令ASC_BUF开始的缓冲区内存放着若干个ASCII码表示ASC_BUF31H的十进制数,(每个单元存放一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为首地址的缓冲区内21十进制ASCII码转换成BCD码例21DEC_ASC_BCDPROCFARPUSHSI;保护现场PUSHDIPUSHAXPUSHBXPUSHCX

RORCX,1JNCNEXT

;ASCII码为偶数个转移

ROLCXLODSB;取ASCII码到ALANDAL,0FH;ASCII码转换成BCD码STOSB;存储BCD码DECCXRORCX,1;奇数个时单独处理完22DEC_ASC_BCDPROCFAR22

NEXT:LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CLPOPCXADDAL,BL;合并BCD码STOSB;存储BCD码LOOPNEXTPOPCX;恢复现场POPBXPOPAXPOPDIPOPSIRETDEC_ASC_BCDENDP23NEXT:LODSB2BCD码转换成十进制数的ASCII码例将数据段字节变量BCD_BUF为首地址的缓冲区中一个八位十进制数对应的压缩BCD码转换成ASCII码,并显示BCD_BUF12345678显示:78563412子程序名:BCD_DEC_ASC

入口参数:一个八位十进制数对应的压缩BCD码存储在BCD_BUF缓冲区

出口参数:正常结束,DH=0FFH

24BCD码转换成十进制数的ASCII码例24BCD_DEC_ASCPROCNEARPUSHSI;保护现场PUSHAXPUSHCXMOVCX,4LEASI,BCD_BUF

ADDSI,3MOVDH,0CHG_OUT1:PUSHCX

MOVAL,[SI];取压缩BCD码DECSI;修改指针MOVDL,ALMOVCL,4RORAL,4ANDAL,0FH;取高半字节BCD码ADDAL,30H;生成ASCII码CALLSTD_OUT;标准设备输出25BCD_DEC_ASCPROCNEAR25

CHG_OUT2:POPCXCMPCX,1JNZCHG_OUT3MOVDH,0FFHCHG_OUT3:PUSHCX

MOVAL,DLANDAL,0FH;取低半字节BCD码ADDAL,30H;生成ASCII码CALLSTD_OUT;标准设备输出CHG_OUT4:POPCXLOOPCHG_OUT1POPCXPOPAXPOPSIRETBCD_DEC_ASCENDP

26CHG_OUT2:POPCX26STD_OUTPROCNEAR;标准设备输出PUSHDXPUSHAXMOVDL,ALMOVAH,2INT21HPOPAXPOPDXRETSTD_OUTENDP27STD_OUTPROCNEAR二进制数转换为BCD码例

DX寄存器中为一个十六位无符号二进制数(0-65535),将其转换为压缩的BCD码,保存在BCD_BUF缓冲区

DXBCD_BUFBIN_TO_BCDPROCFAR1567878PUSHAX56PUSHCX1PUSHDX0PUSHDI0LEADI,BCD_BUFMOVAL,0MOVCX,5CLEAR_BUF:MOV[DI],AL;初始化缓冲区INCDILOOPCLEAR_BUFLEADI,BCD_BUF28二进制数转换为BCD码例28

CHG_BCD1:MOVAX,DX;转换开始MOVDX,0MOVCX,10DIVCXXCHGAX,DX;交换余数和商MOVBL,AL;余数送ALMOVAX,DXMOVDX,0MOVCX,10DIVCXXCHGAX,DXMOVCL,4ROLAL,CLANDAL,0F0HORAL,BL;组合BCD码MOV[DI],AL;存储BCD码INCDICMPDX,0JNZCHG_BCD1

POPDI……29CHG_BCD1:MOVAX,DXBCD码转换为二进制数例将AX寄存器中的四位压缩型BCD码转换为二进制数BCD_TO_BINPROCPUSHCXPUSHSIPUSHDIMOVSI,AXXORAX,AXMOVCX,4AGAIN1:MOVDI,0PUSHCXMOVCX,4AGAIN2:SHLSI,1;左移1位,最高位-->CFRCLDI,1;CF移入DI中LOOPAGAIN2;重复4次得到1位BCD码30BCD码转换为二进制数例30

MOVCX,10MULCX;乘10ADDAX,DIPOPCXLOOPAGAIN1MOVDX,AX;转换后的二进数在DX中POPDIPOPSIPOPCXRETBCD_TO_BINENDP3131多精度加法运算例如,两个无符号四字节二进数相加:346B7F7AH+2ABC8548H5F2804C2H计算步骤为:第一步第二步7AF74885ADC0ADC0C2(CF=0)04(CF=1)第三步第四步6B34BC2AADC1ADC128(CF=1)5F(CF=0)算术运算32多精度加法运算算术运算32ADR1DB7AH,7FH,6BH,34HADR2DB48H,85H,0BCH,2AHSUMDB0,0,0,0……MOVSI,OFFSETADR1MOVBX,OFFSETADR2MOVDI,OFFSETSUMMOVCL,4CLC;CF<--0AGAIN:MOVAL,[SI]ADCAL,[BX];字节加MOV[DI],ALINCSI;修改地址INCBXINCDILOOPAGAIN33ADR1DB7AH,7FH,6BH,34H33设在单元A、B和C存放有三个数,若三个数都不为0,则求出三个数之和存入D中;若有一个为0,则将其他两个单元也清0。MOVAX,ACMPAX,0JZP1MOVAX,BCMPAX,0JZP1MOVAX,CCMPAX,0JZP1ADDAX,A

ADCAX,B

MOVD,AX

JMPDONEP1:MOVA,0MOVB,0MOVC,0DONE:….34设在单元A、B和C存放有三个数,若三个数都不为数据区DATA1和DATA2分别存放N个字节数据,检查它们的数据是否相同。若完全一致,则将FLAG置FFH,否则置0,并将第一次出现的不同数据的地址分别存入D1和D2中。(1)用一般比较指令CMP实现

LEASI,DATA1LEADI,DATA2MOVCX,NM2:MOVAL,[SI]CMPAL,[DI]JNZM1INCSIINCDILOOPM2

MOVFLAG,0FFH

JMPDONEM1:MOVFLAG,0MOVD1,SIMOVD2,DIDONE:……35数据区DATA1和DATA2分别存放N个字节数据,检查它们的(2)用串操作指令CMPS实现

LEASI,DATA1LEADI,DATA2MOVCX,NCLDREPZCMPSB

JNZM3

MOVFLAG,0FFH

JMPDONEM3:

MOVFLAG,0DECSIDECDIMOVD1,SIMOVD2,DIDONE:……36(2)用串操作指令CMPS实现LEASI,1、利用高档机32位字长特性有两个4字长数分别存放在DATA1和DATA2中,求它们的和,结果存放于DATA3中。DATA1DQ123456789ABCDEFHDATA2DQ0FEDCBA987654321HDATA3DQ?在实模式下发挥80386及其后继机的优势371、利用高档机32位字长特性有两个4字长数分别存放在DATA

CLCLEASI,DATA1LEADI,DATA2LEABX,DATA3

MOVCX,4BACK:

MOVAX,[SI]ADCAX,[DI]MOV[BX],AX

8086中实现:

INCSIINCSIINCDIINCDIINCBX

INCBX

LOOPBACK38CLC8086中实现386及其后继机中实现:

CLCLEASI,DATA1LEADI,DATA2LEABX,DATA3

MOVCX,2BACK:MOVEAX,[SI]ADCEAX,[DI]MOV[BX],EAX

PUSHF;保存CFADDSI,4ADDDI,4ADDBX,4POPFLOOPBACK39386及其后继机中实现:386及其后继机中实现:MOVEAX,DWORDPTRDATA1ADDEAX,DWORDPTRDATA2MOVEDX,DWORDPTRDATA+4ADCEDX,DWORDPTRDATA2+4MOVDWORDPTRDATA3,EAXMOVDWORDPTRDATA3+4,EDX

40386及其后继机中实现:MOVEAX,DWORDPT2、通用寄存器可作为指针寄存器使用32位寻址时,32位通用寄存器可作为基址或变址寄存器使用例:MOVEAX,[BX]MOVEAX,[EDX]MOVAX,WORDPTR[ECX]MOVAX,[EBX][EBX]

注意:实模式下,段的大小限制于64KB,32位通用寄存器作为指针寄存器时,高16位应为0412、通用寄存器可作为指针寄存器使用32位寻址时,32位通用寄3、与比例因子有关的寻址方式把5个双字相加并保存结果ARRAYDD234556H,0F983F5H,6754AE2H,0C5231239H,0AF34ACB4HRESULTDQ?

SUBEBX,EBXMOVEDX,EBXMOVEAX,EBXMOVCX,5BACK:ADDEAX,ARRAY[EBX*4]ADCEDX,0

INCEBXDECCXJNZBACKMOVDWORDPTRRESULT,EAXMOVDWORDPTRRESULT+4,EDX423、与比例因子有关的寻址方式把5个双字相加并保存结果ARRA数据段中有一个20个字节的表和一个20个字的表,把字节表中每个数据作为表中的高位字节部分移入字表中。

XORSI,SIXORDI,DINEXT:MOVAX,WORD_TABLE[DI]MOVAH,BYTE_TABLE[SI]MOVWORD_TABLE[DI],AX

INCSIADDDI,2CMPSI,20JLNEXTBYTE_TABLEDB20DUP(?)WORD_TABLEDW20DUP(?)方法1:用一般寻址方式43数据段中有一个20个字节的表和一个20个字的表,把字节表中每

XORESI,ESINEXT:MOVAX,WORD_TABLE[ESI*2]MOVAH,BYTE_TABLE[ESI]MOVWORD_TABLE[ESI*2],AXINCESICMPESI,20JLNEXT方法2:用比例变址寻址方式44XORESI,ESI方1、数值转换中应用数据输入/输出时的转换2、串操作中应用串移动、串搜索、串比较、串插入、串删除3、代码转换中应用ASCII码BCD码二进数BCD码4、算术运算在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在11章中已经介绍过。汇编语言在数据处理中应用(自学)451、数值转换中应用在这一部分,我们将汇编语言在数据处理中的应ASCII码输入设备ASCII码表示的十进制二进制ASCII码表示的十六进制二进制ASCII码表示的二进制二进制机内二进制操作运算二进制ASCII码表示的十进制二进制ASCII码表示的十六进制二进制ASCII码表示的二进制ASCII码输出设备46ASCII码输入设备ASCII码表示的ASCII码表示的ASASCII码十进制转换为二进制数设5位十进数从高位到低位依次是d4、d3、d2、d1、d0。可用下列多项式进行计算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII码-30H累加器*10累加器+这一位值修改指令结束NY汇编语言在数值转换中的应用47ASCII码十进制转换为二进制数初始化是0--9ASCII码

CHG_DEC_BIN PROC;SI指向十进制缓冲区首址 MOVDX,0;初始化 MOVCX,10 GET_ASC: MOVAL,[SI] ;取得十进制数 CMPAL,‘0’ JBEXIT CMPAL,‘9’ JAEXIT DEC_BIN: SUBAL,30H MOVAH,0

PUSHAX MOVAX,DX MULCX;*10 MOVDX,AX

POPAX ADDDX,AX INCSI;修改指针 JMPGET_ASC EXIT: RET;转换后的二进数在DX中CHG_DEC_BINENDP48CHG_DEC_BIN PROC二进制数转换为ASCII码十进制49二进制数转换为ASCII码十进BIN_TO_DECPROC;被转换的十进数在AX中 PUSHDI;DI指向存放十进数缓冲区首址 MOVCX,5;初始化CLEAR_BUF: MOVBYTEPTR[DI],‘‘ INCDI LOOPCLEAR_BUF DECDI MOVCX,10CHANGE: MOVDX,0 ;转换 DIVCX;除以10,余数在DX ADDDL,30H ;ASCII码 MOVBYTEPTR[DI],DL ;存储十进制数 DECDI CMPAX,0商是否为0? JNZCHANGE POPDI RETBIN_TO_DEC ENDP50BIN_TO_DECPROCASCII码十六进制数转换为二进制数

十六进制数的字符为0~9和A~F,输入后,ASCII码为30H~39H和41H~46H转换时,若是数字0~9,减30H若是A~F,减去37H

HEX_TO_BINPROC PUSHAX PUSHCX MOVDX,0;转换后结果在DX中GET_CHAR:MOVAX,01H ;键盘输入 INT21H SUBAL,30H JLEXIT CMPAL,0AH JLCHANGE SUBAL,07H51ASCII码十六进制数转换为二进制数7

CMPAL,0AH;是否是大写字母 JLEXIT CMPAL,0FH JLECHANGE CMPAL,2AH;是否是小写字母 JLEXIT CMPAL,2FH JLECHANGE JMPEXIT

CHANGE: MOVCL,4 ;转换 SHLDX,CL MOVAH,0 ADDDX,AX JMPGET_CHAR POPCX POPAX

EXIT: RETHEX_TO_BINENDP

52 CMPAL,0AH;是否是大串移动(数据块移动)串搜索串比较串插入串删除求串长汇编语言在串操作中的应用53串移动(数据块移动)汇编语言在串操作中的应用9

数据块移动1、一般情况S1S2源区目的区2、特殊情况:源区与目的区重叠源区目的区目的区源区

54数据块移动10串搜索例

将串STR中第一个‘I’字符找出,并显示其在串中的位移量 D_SEGSEGMENT STRDB‘THISISACOMPUTER’ STR_LEN=$-STR D_SEGENDS ...... LEADI,STR MOVCX,STR_LEN MOVAL,’I’ CLDFOUND: REPNZSCASB JEOK1 JCXZRETN

OK1: MOVDX,DI DECDL ;第一个'I'字符距串头位移量 MOVBL,DL55串搜索例11

PUSHCX MOVCL,4 SHRDL,CL POPCX CMPDL,0AH JBOK2 ADDDL,7 OK2: ADDDL,30H MOVAH,02H INT21H ;显示位移量高位 MOVDL,BL ANDDL,0FH CMPDL,0AH JBOK3 0K3: ADDDL,30H MOVAH,02H INT21H ;显示位移量低位 MOVDL,'H' INT21HRETN: ......56 PUSHCX12串比较例比较串STR1和STR2是否相等D_SEGSEGMENT STR1 DB'STRING1' STR2 DB'STRING2' STR_LEN=($-STR1)/2 MSG1 DB'NOTEQUAL','$' MSG2 DB'EQUAL','$'D_SEGENDS ...... LEASI,STR1 MOVDI,OFFSETSTR2 MOVCX,STR_LEN CLD57串比较例13

REPECMPSB JNZNO_EQUAEQUA: MOVAH,09H LEADX,MSG2 INT21H ;提示两个串相等 JMPCMP_END NO_EQUA: MOVAH,09H LEADX,MSG1 INT21H ;提示两个串不等 ...... CMP_END:...... 58 REPECMPSB14串插入串插入分三种情况:1、在目的串首插入2、在目的串尾插入3、在目的串中指定的位置插入串插入例将正数N插入一个升序的字数组中,数组的首地址和末地址为A_HEAD和A_ENDX3A_HEADXDW?5A_HEADDW3,5,23,49,52,6523A_ENDDW10549NDW325265105A_END32N59串插入15MOVAX,N

MOVA_HEAD-2,-1MOVSI,0COMPARE:CMPA_END[SI],AX

;从最后一个元素开始比较JLEINSERTMOVBX,A_END[SI]MOVA_END[SI+2],BX

;元素后移一个位置SUBSI,2JMPCOMPAREINSERT:MOVA_END[SI+2],AX;插入

.....60MOVAX,串删除

串删除例附加段中有一个首地址为LIST的字数组,数组的第一字中存放该数组长度,数组首地址在DI中,数X在AX中,现要在数组中查找X,若找到则删除。61串删除17

CLD PUSHDI MOVCX,ES:[DI] ;数组长度送CX ADDDI,2 ;DI指向第一个元素

REPNESCASW ;串扫描 JEDELETE ;如找到则删除 POPDI ;否则,退出 JMPEXITDELET:JCXZDEC_CNT ;若CX=0,X为最后一个元素NEXT_EL:MOVBX,ES:[DI] MOVES:[DI-2],BX ;元素向前移动一个位置 ADDDI,2 LOOPNEXT_ELDEC_CNT:POPDI DECWORDPTRES:[DI] ;数组元素个数减1EXIT: ......62CLD18

求串长求串长例求字符串的长度送入LEN,假定串以‘$’结束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]

CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL63求串长191、十进制ASCII码转换成BCD码2、BCD码转换成十进制数的ASCII码3、二进制数转换为BCD码4、BCD码转换为二进制数汇编语言在代码转换中的应用641、十进制ASCII码转换成BCD码汇编语言在代码转换中的十进制ASCII码转换成BCD码例令ASC_BUF开始的缓冲区内存放着若干个ASCII码表示ASC_BUF31H的十进制数,(每个单元存放一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为首地址的缓冲区内65十进制ASCII码转换成BCD码例21DEC_ASC_BCDPROCFARPUSHSI;保护现场PUSHDIPUSHAXPUSHBXPUSHCX

RORCX,1JNCNEXT

;ASCII码为偶数个转移

ROLCXLODSB;取ASCII码到ALANDAL,0FH;ASCII码转换成BCD码STOSB;存储BCD码DECCXRORCX,1;奇数个时单独处理完66DEC_ASC_BCDPROCFAR22

NEXT:LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论