汇编-ASCⅡ码转二进制码
2014-11-05 22:00
85 查看
一、实习题目:ASCⅡ码转二进制码程序实验
二、实习目的:掌握码制转换的基本原理及相应的转换程序的编写方法。
三、实习内容:将ASCⅡ码数据转换成二进制数据。要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储,并二进制形式输出。
四、编程思想:
由于汇编语言中,初始时,没有直接输入多位十进制数的命令,所以,需要将输入的多位十进制数用一字节来表示一
位,即用五个字节将之保存,然后编写程序将之转化为用二进制表示。以下几步为程序编写步骤:
1、将键盘上输入的五位十进制数保存在 num[5]中,其中num数据类型为 DB;
2、将数字字符转换为对应数字;
3、由于32367可用十六位二进制保存,则定义 DW 类型变量 result,并初始化为 0,并使用如下思想将之转
换为二进制(计算机中底层表示为二进制)。
4、至此,result在计算机底层表示的二进制即为要转换的二进制,此时,将之有高位到低位输出即可。而输
时,使用左移位指令 SHL,移出的最高位保存在标志位 CF 中,接下来只需根据 CF 的值输出0/1。(CF为0
时,输出字符0;CF为1时,输出字符1)
五、代码:
六、运行结果:
注意:这里虽说要求输入0-32767之间的数,但由于此程序使用2字节存储转换后的二进制,所以,此程序可以输入的最大数字为65535.
二、实习目的:掌握码制转换的基本原理及相应的转换程序的编写方法。
三、实习内容:将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.
相关文章推荐
- 80x86 汇编语言编程:BCD 码转二进制
- 数字基础中关于gray码转二进制码问题(C++)
- IOS逆向--使用IDA的Patch更改汇编或二进制码并写入项目和deb重新打包
- 基于x86处理器汇编语言-基本概念
- 汇编语言(学习笔记-----[bx]和loop)
- 【汇编】mov [1000],bx:immediate operand not allowed
- 汇编学习笔记21
- 机器语言、汇编语言和高级语言之间的关系
- 汇编语言:从键盘输入十进制数,输出该十进制数的十进制,二进制(B),十六进制(H),八进制(Q)表示
- 汇编语言中使用有符号数还是无符号数问题
- 汇编 二则运算
- 汇编基础知识(二)
- 汇编标志位详解
- 用普通IO驱动LCD的控制方法-松瀚汇编源程序
- 汇编语言(王爽) 第5章[BX]和loop指令
- 更灵活的定位内存地址的方法06 - 零基础入门学习汇编语言37
- 汇编习题解答
- arm汇编标号.globel和.word解释
- 反汇编与寄存器结构
- 汇编语言(王爽)第七章与实验6