本文共 1498 字,大约阅读时间需要 4 分钟。
十进制转化为二进制数的方法:从十进制数的最高位开始做乘10加次高位的操作,依次类推,即可求出二进制数的结果,这里二进制的意思是在内存中的存储形式。
文章中的例子是在缓冲区中有5个十进制数的ASCII码值,然后将这5个十进制数转化成一个字大小的二进制数,最后转化成16进制形式输出在屏幕上。
DDATA SEGMENTMES DB 'The ascii code of decimal code are:$'BUF DB 30H,30H,39H,31H,32H DB 10H DUP(0)DDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DDATASTART: MOV AX,DDATA MOV DS,AX MOV SI,OFFSET BUF MOV BL,0AH ;送被乘数 MOV CX,0004H ;送转换位数 MOV AH,00H MOV AL,[SI] ;取第一位ASCII码 SUB AL,30HA1: INC SI IMUL BL ;乘10 ADD AL,[SI] SUB AL,30H LOOP A1 MOV BX,AX MOV DX,OFFSET MES ;显示提示信息 MOV AH,09H INT 21H MOV AX,BX ;显示结果 MOV CX,4A3: PUSH CX MOV CL,4 ROL AX,CL POP CX MOV BX,AX ;用BX保存AX移位之后的结果,之后再将保存的结果回送给AX,AX经过四次移位,四次分别处理16位,依次输出16进制的4位 AND AL,0FH CMP AL,0AH JB A2 ADD AL,07H A2: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AX,BX ;将存在BX中AX移位结果回送给AX, LOOP A3 MOV AH,4CH INT 21HCODE ENDS END START
16-20行代码的功能是将十进制数串转化成二进制,用的就是文章开头讲的那个方法。
21行代码 用BX寄存器作先将AX的值保存一下。
25-41行的代码就是将已经转化成二进制的十进制数转化成16进制的形式输出在屏幕上。 整个转化过程分一共循环四次,因为AX是16位寄存器,存了一个字大小的数据,要将这个数据转化成16进制,每4位一组,所以16进制是4位表示。每一次循环,AX左移4位,并用BX将移位的结果保存下来,然后一次循环处理完之后,再将BX中存的值回送给AX,转换成16进制后输出显示;下一次循环的时候,AX又右移4位,BX保存,以此循环,四次操作之后,AX的值被处理成了4位表示的16进制。
33-36行的代码作用:其中0H~ 9H之间的数加30H,即可得0H~ 9H的ASCII码,而AH~FH的ASCII码,则需再加7H。
测试结果,十进制912对应的16进制数就是0390.
转载地址:http://rgqai.baihongyu.com/