汇编语言(二十九)之数值的二进制和十进制

汇编语言(二十九)之数值的二进制和十进制

给定一个数,输出该数的二进制和十进制数

程序运行:

www.zeeklog.com  - 汇编语言(二十九)之数值的二进制和十进制

代码:


datas segment

      VAL1 dw 156

datas ends

stacks segment stack

    db  100h dup(?)

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks
BANDO   proc  far
start:
       push ds
	   mov ax,0h
	   push ax
       mov ax,datas          ;初始化ds
	   mov ds,ax
       
       push VAL1
	   call PAIRS
       
       
       ret
	   
BANDO endp

PAIRS proc near 

     mov bp,sp
	 add bp,2
     mov ax,[bp]
	 call OUTBIN        ;输出二进制数
	 call OUTOCT        ;输出十进制数
	 
     ret 2

PAIRS endp

codes ends

codes1 segment
  assume cs:codes1,ds:datas,ss:stacks
  
OUTBIN proc far  uses ax bx cx
       
	    mov bx,2                ;除数
		mov cx,0                ;计数器,记录数的位数
	  bin:
        xor dx,dx 
        div bx 
	    push dx                 ;保存余数
	    inc cx 
		cmp ax,0h               ;判断被除数是否为0
		jnz bin                 ;若不为0,则循环继续
		
	  bin1:
        pop dx
        add dl,30h 
        mov ah,2                ;输出各位数字 
        int 21h 
        loop bin1	
		
		push ds                 ;输出8个空格
        push cs		
		pop ds 
		lea dx,space
		mov ah,9
		int 21h 
		pop ds 
		
		ret
	   
	   space  db '        $'
OUTBIN endp
   
OUTOCT proc far uses ax bx cx dx 

         
	    mov bx,8           ;除数
		mov cx,0           ;计数器,记录数的位数
	  oct:
        xor dx,dx 
        div bx 
	    push dx             ;保存余数
	    inc cx 
		cmp ax,0h           ;判断被除数是否为0
		jnz oct             ;若不为0,则循环继续
		
	  oct1:
        pop dx
        add dl,30h           ;输出各位数字 
        mov ah,2 
        int 21h 
        loop oct1		
		;输出换行
		call next_line        
		
		ret
	   
OUTOCT endp

next_line proc far uses ax dx
     
	 mov dl,0dh
	 mov ah,2
	 int 21h
	 
	 mov dl,0ah
	 mov ah,2
	 int 21h 
	 	 
next_line endp 
codes1 ends

end BANDO