程序完成功能:输入任意进制数字,自动判断进制并输出2,10,16进制(范围0-65535)
实现:
首先判断最后一个字符,如果为B是二进制,为D或数字是十进制,为H是十六进制
输入1010B,就(((1*2)+0)*2+1)*2+0这样
输入123,就(1*10+2)*10+3
输入123H,就(1*16+2)*16+3
输出就除以2/10/16,压栈余数的ASCII码,判断是否为0,不为0继续除。再出栈输出。
其中,乘2用左移位等效,除以2用右移位等效,余数是CF。
乘16用左移4位等效,除以16用右移4等效,余数是右移前的数AND 000FH
乘10就只能乘了。
另外就是做些字符正确性判断的错误处理。输入越界判断我懒得做了。
其实完全可以做成输入N进制和输出N进制的函数,调用传参2,10,16。实现功能。虽然速度没移位快,因为没几个数,所以无所谓。算了就这样吧。
;程序完成功能:输入任意进制数字,自动判断进制并输出2,10,16进制(数字范围0-65535)
;如输入2H或2D或2或10B,输出 10B,2,2D
;Q/q退出
STACK SEGMENT
DB 255 DUP(?)
STACK ENDS
DATA SEGMENT
HELLO DB 'Input a number as 2H,2D,2,10B: $'
KEYBUF1 DB 20H
DB ?
KEYBUF2 DB 20H DUP(?)
THENUM DW ?
INPUTERROR DB '