⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20073237-3.txt

📁 用汇编语言实现2进制向十进制的转换
💻 TXT
字号:


STACK_SEG     SEGMENT   STACK
    STACK_BUF DW        120 DUP(?)
    TOP       EQU       $-STACK_BUF
STACK_SEG     ENDS
DATA_SEG      SEGMENT   PARA
outNum       DB ?;              
TInput       DB 0ah,0dh,'please input the num end with B.',0ah,0dh,'eg(1010B)---:$' 
TEnd         DB 0ah,0dh,'again?(Press N or n TO OUT)...$'            
DATA_SEG      ENDS
CODE_SEG      SEGMENT   PARA
;------------------------------------------------------
MAIN          PROC      FAR
              ASSUME    CS:CODE_SEG,DS:DATA_SEG
              ASSUME    SS:STACK_SEG
START:
              MOV       AX,STACK_SEG
              MOV       SS,AX
              MOV       SP,TOP
              MOV       AX,DATA_SEG
              MOV       DS,AX
              
              MOV       AX,0 
agn:          LEA       DX,TInput 
              CALL      TPRINTF 
              MOV       outNum,0 
              CALL      input 
              MOV 	DL,0ah 
              MOV 	AH,2 
              INT 	21h 
              MOV 	DL,0dH
              MOV 	AH,2 
              INT 	21h 
              CALL      cout 
              LEA       DX,TEnd 
              CALL      TPRINTF
              MOV       AH,1 
              INT       21H
              CMP       AL,6EH
              JE        agnn
              CMP       AL,4EH
              JE        agnn
              JMP       agn
agnn:         MOV       AX,4C00H
              INT       21H
MAIN          ENDP 

TPRINTF PROC 
              MOV 	AH,9 
              INT 	21h 
              RET 
TPRINTF ENDP 


out10B PROC 
              ADD 	DL,30H 
              MOV 	AH,2 
              INT 	21h 
              RET 
out10B ENDP 


check PROC 
              MOV 	CL,0 
              CMP 	AL,'0' 
              JB        back   
              CMP	AL,'1' 
              JA 	back 
              MOV 	CL,1 
back:	      RET 
check ENDP 

 
C2to10 PROC 
              MOV 	CL,0 
              CMP 	outNum,40H
              JA 	Dback 
              SHL 	outNum,1 
              ADD 	outNum,AL 
              MOV 	CL,1 
Dback: 	      RET 
C2to10 ENDP 

 
cout PROC 
              MOV 	CL,0 
              MOV 	BL,0 
L100: 	      CMP 	outNum,100 
              JB 	L100Nt 
              ADD 	CL,1 
              MOV 	BL,1 
              SUB 	outNum,100 
              JMP 	L100 
L100Nt:	      CMP 	CL,0 
              JE 	L10 
              MOV 	DL,CL 
              MOV 	CL,0 
              CALL 	out10B 
L10:  	      CMP 	outNum,10 
              JB	L10Nt 
              ADD 	CL,1 
              MOV 	BL,1 
              SUB 	outNum,10 
              JMP 	L10 
L10Nt: 	      CMP 	BL,1 
              JE	L10out 
              CMP 	CL,0 
              JE 	L1 
L10out:       MOV 	DL,CL 
              MOV 	CL,0               
              CALL 	out10B 
L1: 	      MOV 	DL,outNum 
              CALL 	out10B 
              RET 
cout ENDP 


input PROC 
again: 
              MOV 	AL,0 
              MOV 	AH,1 
              INT 	21H
              CMP 	AL,'B' 
              JE 	inRet 
              CMP 	AL,'b' 
              JE 	inRet 
              CMP 	AL,13 
              JE 	inRet 
              CALL 	check 
              CMP 	CL,0 
              JE 	backsk 
              SUB 	AL,30H
              CALL 	C2to10 
              CMP 	CL,1 
              JE 	again 
inRet: 	  RET 
backsk:       MOV 	DL,08H 
              MOV 	AH,2 
              INT 	21h 
              JMP 	again 
input ENDP 
;------------------------------------------------------
CODE_SEG      ENDS
              END       START







;
结果:
please input the num end with B.
eg(1010B)---:1000100B
68
again?(Press N or n TO OUT)...
please input the num end with B.
eg(1010B)---:10000B
16
again?(Press N or n TO OUT)...
please input the num end with B.
eg(1010B)---:11111111
127
again?(Press N or n TO OUT)...1
please input the num end with B.
eg(1010B)---:111011
59
again?(Press N or n TO OUT)...

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -