汇编-ASCⅡ码转二进制码

一、实习题目:ASC码转二进制码程序实验


二、实习目的:掌握码制转换的基本原理及相应的转换程序的编写方法。


三、实习内容:ASCⅡ码数据转换成二进制数据。要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储,并二进制形式输出。

四、编程思想:

          由于汇编语言中,初始时,没有直接输入多位十进制数的命令,所以,需要将输入的多位十进制数用一字节来表示一

        位,即用五个字节将之保存,然后编写程序将之转化为用二进制表示。以下几步为程序编写步骤:


        1、将键盘上输入的五位十进制数保存在 num[5]中,其中num数据类型为 DB;

       2、将数字字符转换为对应数字;

       3、由于32367可用十六位二进制保存,则定义 DW 类型变量 result,并初始化为 0,并使用如下思想将之转

          换为二进制(计算机中底层表示为二进制)。

           

              for(int i = 0;i < 5;++i) 
              { 
                result *= 10; 

                result += num[i];
              } 

      4、至此,result在计算机底层表示的二进制即为要转换的二进制,此时,将之有高位到低位输出即可。而输

         时,使用左移位指令 SHL,移出的最高位保存在标志位 CF 中,接下来只需根据 CF 的值输出0/1。(CF为0

         时,输出字符0;CF为1时,输出字符1)

五、代码:

        

data segment
  
  number    db    5 dup('0');  存储输入的五位十进制数
  mulNum    dw    10;        十进制进位数
  result    dw    0;         存放转换之后的结果
  
  msgOne    db    0ah,0dh,'Input a number(0 - 32767):','$'
  msgTwo    db    0ah,0dh,'The result is:','$'
data ends

code segment
  assume DS:data,CS:code
start:

  mov ax,data;
  mov DS,ax;
  
  lea dx,msgOne;         输出msgOne中内容
  mov ah,09h;
  int 21h;
  
  mov cx,5;              最多输入五位十进制数
  
  mov bx,0;              初始化bx为number的索引
inputNum: 
  mov ah,01h;            从键盘输入一个字符
  int 21h;

  cmp al,0dh;            若输入字符为回车,则跳转至startTran处
  jz startTran;           
  
  mov number[bx],al;     将输入的字符存入number
  inc bx;                bx++
                
 loop inputNum

startTran:
 
  mov cx,bx;             初始化cx循环次数
 
  mov bx,0;              初始化bx为number的索引
tranOne:

  mov ax,result;         result * 10
  mul mulNum;
  mov result,ax;
  
  and number[bx],0fh;    将数字字符转换为相应数字
  
  mov ah,0;              result += number[bx]
  mov al,number[bx];
  add [result],ax;
  
  inc bx;                bx++
 loop tranOne
  
  
 
  lea dx,msgTwo;         输出msgTwo中内容
  mov ah,09h;
  int 21h;
 
 
  mov cx,16;
showResult:
  shl result,1;          将ax最高位移除,存储在cf中
  jnc outputZero;
  
  mov dl,'1';            如果cf不为0,则输入'1'
  mov ah,02h;
  int 21h;
  jmp next;
  
outputZero:                    
  mov dl,'0';            否则输入'0'
  mov ah,02h;
  int 21h;
next:
  loop showResult
 

  
  mov ah,4ch;            程序结束
  int 21h;

code ends
end start</span>


六、运行结果:



注意:这里虽说要求输入0-32767之间的数,但由于此程序使用2字节存储转换后的二进制,所以,此程序可以输入的最大数字为65535.


                

 



  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值