此题算法描述:
十六进制转化为二进制就是每位展开:
如1234H 展开: 0001 0010 0011 0100
1.BX: 0000 0000 0000 0000
2.输入一个合法数,转化为0000B~1001B 或 转换为:1010B~1111B
3.与BX 合并
4.BX 左移四位
;从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数
DATASSEGMENT
STR DB 0DH,0AH,'$'
DATASENDS
CODESSEGMENT
MAINPROCFAR
ASSUMECS: CODES, DS: DATAS
START:
PUSHDS
SUBAX, AX
PUSHAX
MOVAX, DATAS
MOVDS, AX
;---------------------------------------------------------
MOV CH,4 ;四位的十六进制数
MOV CL,4 ;移位次数
MOV BX,0 ;存放16位二进制
INPUT:
SHLBX, CL ;左移四位
MOV AH,01H ;输入0~9,a~f,A~F的数
INT 21H
CMP AL,'0'
JB INPUT
CMP AL,'f'
JA INPUT
CMP AL,'9'
JBE NUM ;输入的数为0~9
CMP AL,'@'
JBE INPUT
CMP AL,'F'
JBE Convert1 ;输入的数为A~F
CMP AL,'a'
JB INPUT
CMP AL,'f'
JBE Convert2 ;输入的数为a~f
NUM:
AND AL,0FH ;0000B~1001B
JMP BINARY
Convert1:
AND AL,0FH
ADDAL, 9
JMP BINARY
Convert2:
SUB AL,20H ;小写转大写 在与操作
AND AL,0FH ;转换为:1010B~1111B
ADDAL, 9
JMP BINARY
BINARY:
ORBL, AL;将键盘输入的数进行组合
DECCH
JNZINPUT
DISPN:
MOVCX, 16;将16位二进制数一位位地转换成ASCII码显示
LEA DX,STR
MOV AH,09H
INT 21H
DISP:
MOVDL, 0
ROLBX, 1 ;注意这两条指令
RCLDL, 1
ORDL, 30H
MOVAH, 2;进行显示
INT21H
LOOPDISP
RET
MAINENDP
CODESENDS
END START
总结:
1.一种新的思想:即移位操作,BX16位分别存放4个十六进制的0000
2.AND AL,0FH ;转换为:1010B~1111B 或 0000B~1001B 或
记十六进制数字与操作转化为相应二进制
3.OR
4. ROLBX, 1 ;循环左移
RCLDL, 1 ;带进位循环左移