汇编实验——通用代码转换子程序设计


一、实验目的

1、掌握从键盘输入数据的方法,并了解数据输出时须转换为ASCII码的原理;
2、进一步巩固代码转换的知识和方法,并整理成通用子程序供以后使用;
3、学习汇编语言的综合编程。


提示:以下是本篇文章正文内容,下面案例可供参考

二、实验内容

编写一个程序,实现十进制、十六进制和二进制之间的转换。要求从键盘上输入各种进制的数据,回车后,屏幕上就按三种进制进行输出。输入数据的进制按以下规则识别:

  1. 十进制:直接以阿拉伯数字0~9组成的数据,最大不超过65535;
  2. 二进制:以B开头,后接以0、1组成的二进制数据,最大不超过16位;
  3. 十六进制:以H开头,后接以09、AF组成的十六进制数据,最大不超过FFFFH。

程序不要求对输入数据进行合法性判断,因此,在输入数据时,务必保证输入数据字符串合符以上规则。超过最大值的输入,只取钱买你的有效位,后面的位自动舍去。

三、实验程序

	CODE  SEGMENT
  ASSUME    CS:CODE
        STRR  DB        18
       STRRN  DB        ?
       STRRS  DB        18 DUP(?)
               
      START:  PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              CALL      INPUT
              CALL      LFCR
              CALL      LFCR
              MOV       BX,10
              CALL      DSPAXX
              CALL      LFCR
              MOV       BX,16
              CALL      DSPAXX
              CALL      LFCR
              MOV       BX,2
              CALL      DSPAXX
 
              MOV       AH,4CH
              INT       21H

       INPUT  PROC      NEAR
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DI
              PUSH      BP
              PUSHF
              MOV       AH,0AH
              LEA       DX,STRR
              INT       21H
              LEA       SI,STRR
              MOV       CL,[SI+1]
              XOR       CH,CH
              ADD       SI,2
              CMP       BYTE PTR[SI],'B'
              JE        BB
              CMP       BYTE PTR[SI],'H'
              JE        H
              CMP       CX,5
              JBE       @1
              MOV       CX,5
         @1:
              MOV       AX,0
         @2:
              SHL       AX,1
              MOV       BX,AX
              SHL       AX,1
              SHL       AX,1
              ADD       AX,BX
              MOV       BL,[SI]
              AND       BL,0FH
              XOR       BH,BH
              ADD       AX,BX
              INC       SI
              LOOP      @2
              JMP       IEND
         BB:
              DEC       CX
              INC       SI
              CMP       CX,16
              JBE       B1
              MOV       CX,16
        B1:
              MOV       AX,0
        B2:
              SHL       AX,1
              MOV       BL,[SI]
              AND       BL,1
              XOR       BH,BH
              ADD       AX,BX
              INC       SI
              LOOP      B2
              JMP       IEND
         H:
              DEC       CX
              INC       SI
              CMP       CX,4
              JBE       H1
              MOV       CX,4
        H1:
              MOV       AX,0
        H2:
              SHL       AX,1
              SHL       AX,1
              SHL       AX,1
              SHL       AX,1
              MOV       BL,[SI]
              CMP       BL,'9'
              JBE       H3
              SUB       BL,7
        H3:
              AND       BL,0FH
              XOR       BH,BH
              ADD       AX,BX
              INC       SI
              LOOP      H2
      IEND:
              POPF
              POP       BP
              POP       DI
              POP       SI
              POP       DX
              POP       CX
              POP       BX
              RET
       INPUT  ENDP
  
     ; 输出ax的值,输出的进位制在bx中设定,bx=2~16  
      DSPAXX  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSHF
              XOR       CX,CX
              ; MOV       BX,16
 DSPAXX_1:
              XOR       DX,DX
              DIV       BX
              INC       CX
              OR        DX,30H
              PUSH      DX
              CMP       AX,0
              JNE       DSPAXX_1
              MOV       AH,2
 DISPAXX_2:
              POP       DX
              CMP       DL,3AH
              JB        DISPAXX_3
              ADD       DL,7
 DISPAXX_3:
              INT       21H
              LOOP      DISPAXX_2
              MOV       DL,32
              INT       21H
              POPF
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
      DSPAXX  ENDP

        LFCR  PROC      NEAR
              PUSH      AX
              PUSH      DX
              MOV       AH,2
              MOV       DL,13
              INT       21H
              MOV       DL,10
              INT       21H
              POP       DX
              POP       AX
              RET
        LFCR  ENDP
 
       DSPAX  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSHF
              XOR       CX,CX
              MOV       BX,10
    DSPAX1:
              XOR       DX,DX
              DIV       BX
              INC       CX
              OR        DX,30H
              PUSH      DX
              CMP       AX,0
              JNE       DSPAX1
              MOV       AH,2
   DISPAX2:
              POP       DX
              INT       21H
              LOOP      DISPAX2
              MOV       DL,32
              INT       21H
              POPF
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
       DSPAX  ENDP
       
        CODE  ENDS
              END       START

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值