汇编:转换功能的实现

汇编:转换功能的实现

要求

完成一个字母或数制之间的转化程序,主程序分别具有 3 种可选择的子功能,按相应的字母(X=>功能 1; Y=>功能 2; Z=>功能 3)可分别进入相应的子功能并在屏幕上显 示结果。3 种可选择的子功能分别为:
(1)实现大写字母向小写字母的转换;
(2)实现十进制数向十六进制数的转换;
(3)实现十六进制数向十进制数的转换。

汇编代码

;-----------------------------------------------------------------------------------------
data  segment

	info1  db        0dh,0ah,'Please input the Hex:$'
	info2  db        0dh,0ah,'Please input the Decimal:$'
	info3  db        0dh,0ah,'Please input Big_char:$'
	info4  db        0dh,0ah,'The result is:$'
	
	select db        0dh,0ah,'*************************************************'             
           db        0dh,0ah,'*      X: Big_char     ->     Small_char        *'
           db        0dh,0ah,'*      Y: Decimal      ->     Hex               *'
           db        0dh,0ah,'*      Z: Hex          ->     Decimal           *'
           db        0dh,0ah,'*************************************************'
           db        0dh,0ah,'*****************************  Please select:   $'
           
    info5  db        0dh,0ah,'--- Select --- Error --- Exit ---$'
    info6  db        0dh,0ah,'--- Input --- Error ---$'

data  ends

;-----------------------------------------------------------------------------------------
code  segment
assume    ds:data,cs:code

start:
	
	mov       ax,data
	mov       ds,ax
     
	lea       dx,select   ;显示功能选择
	mov       ah,09h
	int       21h

	mov       ah,01h    ;输入选择
	int       21h

	cmp       al,'X'
	jz        select1     ;功能1
	cmp       al,'Y'
	jz        select2     ;功能2
	cmp       al,'Z'
	jz        select3     ;功能3
	
	lea       dx,info5    ;输入错误
	mov       ah,09h
	int       21h
	
	jmp       over
           
select1:
	call      big_small    ;功能1子程序
	jmp       start

select2:
	call      decimal_hex_1   ;功能2子程序
	jmp       start

select3:
	call      hex_decimal_1    ;功能3子程序
	jmp       start
      
over:
	mov       ah,4ch
	int       21h


;--------------------------大写字母转化成小写字母--------------------------------------
big_small  proc  near
      
	mov       cl,4
	
	lea       dx,info3
	mov       ah,09h
	int       21h
     
	mov       ah,01h
	int       21h         ;输入一个字母
	
	cmp		  al,41h      ;判断是否为大写字母,即是否在A~Z之间
	jl		  error
	cmp		  al,5ah
	jg		  error
	
	xor       al,20h      ;大小写转换
	mov       bl,al
              
	mov       cl,4
	lea       dx,info4
	mov       ah,9
	int       21h
              
	mov       dl,bl       ;显示小写字母
	mov       ah,02h
	int       21h
	
	jmp       bs

error:
    lea       dx,info6    ;显示输入错误
	mov       ah,09h
	int       21h

bs: 
    ret
    
big_small  endp


;-----------------------------十进制转化为十六进制-----------------------------------
decimal_hex_1  proc  near
	
	mov       bx,0
	mov       cx,0

	lea       dx,info2
	mov       ah,09h
	int       21h
      
dh1:
	mov       ah,01h   ;输入一个字符
	int       21h
	
	sub       al,30h   ;将字符变成10进制的数,并判断输入的字符是否在0~9中
	jl        dh3      ;小于0,则输入结束
	cmp       al,10d   
	jl        dh2      ;小于10则进行保存
	jmp       error    ;否则错误
      
dh2:    ;保存
    mov       ah,0     
	mov       cx,ax
	mov       ax,10
	mul       bx
    mov       bx,ax
	add       bx,cx    ;输入的十进制数存在bx中
	
	jmp       dh1      ;继续输入

dh3:
	decimal_hex_2  proc  near

		lea       dx,info4
		mov       ah,09h
		int       21h
              
		mov       cx,1000h
		call      decimal_hex_3
		mov       cx,100h
		call      decimal_hex_3
		mov       cx,10h
		call      decimal_hex_3
		mov       cx,1h
		call      decimal_hex_3
              
   	 	ret
    
    	decimal_hex_3  proc  near
              
			mov       ax,bx    ;将bx中保存的输入的十进制数复制给ax
			mov       dx,0
		
			div       cx       ;ax/cx
			mov       bx,dx    ;取余数
			mov       dl,al
		
			cmp       dl,10d   ;比较是否在0~9之间
			jl        dh4

			add       dl,27h   ;不在0~9就说明在10~15之间,转换成a~f
		dh4:
			add       dl,30h
		
			mov       ah,02h
			int       21h

			ret  

		decimal_hex_3  endp

	decimal_hex_2  endp 
           
    ret

error:
	lea       dx,info6
	mov       ah,09h
	int       21h
	
	ret
	
decimal_hex_1  endp


;----------------------十六进制转化为十进制-------------------------------------
hex_decimal_1  proc  near
	  
	mov       bx,0

	lea       dx,info1
	mov       ah,09h
	int       21h
      
hd1:
	mov       ah,01h   ;输入一个字符
	int       21h
	
	sub       al,30h   ;将字符变成16进制的数,并判断输入的字符是否在0~9中
	jl        hd3      ;小于0,则输入结束   
	cmp       al,10d
	jl        hd2      ;小于10则进行保存,否则继续转换判断
         
	sub       al,27h   ;将字符变成16进制的数,并判断输入的字符是否在a~f之间
	cmp       al,0ah
	jl        error    ;错误  
	cmp       al,10h
	jl        hd2
	jmp       error
      
hd2: 
	mov       cl,4
	shl       bx,cl
	mov       ah,0
	add       bx,ax
	jmp       hd1      ;继续输入

hd3: 
	hex_decimal_2  proc  near

		lea       dx,info4
		mov       ah,09h
		int       21h
              
		mov       cx,10000d
		call      hex_decimal_3
		mov       cx,1000d
		call      hex_decimal_3
		mov       cx,100d
		call      hex_decimal_3
		mov       cx,10d
		call      hex_decimal_3
		mov       cx,1d
		call      hex_decimal_3
              
    	ret

		hex_decimal_3  proc  near
              
			mov       ax,bx     ;将bx中保存的输入的十进制数复制给ax
			mov       dx,0
		
			div       cx        ;ax/cx
			mov       bx,dx     ;取余数
			mov       dl,al
		
			add       dl,30h
		
			mov       ah,02h
			int       21h

			ret  

		hex_decimal_3  endp

	hex_decimal_2  endp
             
    ret

error:
	lea       dx,info6
	mov       ah,09h
	int       21h
	
	ret
	
hex_decimal_1  endp
   
;-----------------------------------------------------------------------------------
code  ends
end  start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值