1 DATA SEGMENT 2 STRING DB 'pls input your number(double-digit) to display(binary system)',0DH,0AH,'$' 3 BUF DB 3 DUP('$');緩沖區 4 DATA ENDS 5 CODE SEGMENT 6 ASSUME CS:CODE,DS:DATA 7 MAIN PROC FAR 8 MOV AX,DATA 9 MOV DS,AX 10 11 LEA DX,STRING;輸出字符串 12 MOV AH,09H 13 INT 21H 14 15 MOV AH,0AH;鍵盤輸入 16 LEA DX,BUF 17 INT 21H 18 19 MOV DL,0AH 20 MOV AH,02H 21 INT 21H 22 23 LEA SI,BUF+2;地址最高位 24 MOV BL,[SI] 25 SUB BL,30H 26 MOV AL,10 27 MUL BL 28 MOV BL,[SI+1] 29 ADD AL,BL 30 SUB AL,30H 31 MOV BL,AL;不能對AL左移?為啥 32 MOV CX,08H 33 PRINT: 34 SHL BL,1 35 JC ONE 36 JNC ZERO 37 38 ZERO: 39 MOV DL,30H 40 MOV AH,02H 41 INT 21H 42 LOOP PRINT 43 MOV AH,4CH 44 INT 21H 45 ONE: 46 MOV DL,31H 47 MOV AH,02H 48 INT 21H 49 LOOP PRINT 50 MOV AH,4CH 51 INT 21H 52 MAIN ENDP 53 CODE ENDS 54 END MAIN
將字符ASCII轉化為16進制的數:例如‘12’——(31-30h)*10+32-30h后存入寄存器00001100。
轉換后對此數左移8次,每次檢測進位C標志位,如果有進位,則顯示1,否則0;
另一種方法是,不移動此目標數,另BL=10000000,讓BL右移8次,TEST(與)指令去檢測每一位,為1的話顯示1,否則0。下面是程序
1 DATA SEGMENT 2 STRING DB 'pls input your number(double-digit) to display(binary system)',0DH,0AH,'$' 3 BUF DB 3 DUP('$');緩沖區 4 DATA ENDS 5 CODE SEGMENT 6 ASSUME CS:CODE,DS:DATA 7 MAIN PROC FAR 8 MOV AX,DATA 9 MOV DS,AX 10 11 LEA DX,STRING;輸出字符串 12 MOV AH,09H 13 INT 21H 14 15 MOV AH,0AH;鍵盤輸入 16 LEA DX,BUF 17 INT 21H 18 19 MOV DL,0AH 20 MOV AH,02H 21 INT 21H 22 23 LEA SI,BUF+2;地址最高位 24 MOV BL,[SI] 25 SUB BL,30H 26 MOV AL,10 27 MUL BL 28 MOV BL,[SI+1] 29 ADD AL,BL 30 SUB AL,30H 31 MOV BL,AL;不能對AL左移?為啥 32 MOV CX,08H 33 MOV BH,80H 34 PRINT: 35 TEST BL,BH 36 JNZ ONE 37 JZ ZERO 38 39 ZERO: 40 MOV DL,30H 41 MOV AH,02H 42 INT 21H 43 SHR BH,1 44 LOOP PRINT 45 MOV AH,4CH 46 INT 21H 47 ONE: