在BIRBUF的字单元中存放有一个16位二进制数。编写程序将其转换成4位BCD码 存放在以BCDBUF为地址的
-
正确答案:源程序: DATA SEGMENT BIRBUF DW 006AH BCDBUF DW? TABLE DW 100001000100101 DATA ENDS STACK SEGMENT PARA STACK "STACK" STA DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE.DS:DATA.SS:STACK BTOD PROC FAR START: PUSH DS XOR AX.AX PUSH AX MOV AX.DATA MOV DS.AX MOV AX.STACK MOV SS.AX MOV SIOFFSET TABLE ;取10i次方表首址 MOV AXBIRBUF ;取10位二进制数送AX MOV CH5 ;最大到5位十进制数 XOR BX.BX LOP1: XOR DX.DX LOP2: SUB AX[SI] ;减10i次方 JB NEXT ;不够减时转NEXT INC DX ;够减时计数 JMP LOP2 NEXT: ADD AX[SI] ;不够减时恢复 OR BXDX ;归并转换好的十进制数 MOV CL.4 SHL BX.CL INC SI ;修改10i次方表地址 INC SI DEC CH JNZ LOP1 RET BTOD: ENDP CODE ENDS END START
源程序:DATASEGMENTBIRBUFDW006AHBCDBUFDW?TABLEDW10000,1000,100,10,1DATAENDSSTACKSEGMENTPARASTACK"STACK"STADB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE.DS:DATA.SS:STACKBTODPROCFARSTART:PUSHDSXORAX.AXPUSHAXMOVAX.DATAMOVDS.AXMOVAX.STACKMOVSS.AXMOVSI,OFFSETTABLE;取10i次方表首址MOVAX,BIRBUF;取10位二进制数送AXMOVCH,5;最大到5位十进制数XORBX.BXLOP1:XORDX.DXLOP2:SUBAX,[SI];减10i次方JBNEXT;不够减时,转NEXTINCDX;够减时,计数JMPLOP2NEXT:ADDAX,[SI];不够减时,恢复ORBX,DX;归并转换好的十进制数MOVCL.4SHLBX.CLINCSI;修改10i次方表地址INCSIDECCHJNZLOP1RETBTOD:ENDPCODEENDSENDSTART
