八进制数和进制数相互转换

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.程序结构
4.1
4.2
4.3
4.4
4.5
5.程序清单
;DECIOCT
;十进制与八进制相互转换
;首先选择算法,1为八进制转十进制,2为十进制转八进制
;***************************
DECioct SEGMENT
ASSUME CS:DECioct
;主程序部分。
main PROC FAR
AND AL,03h;将高六位屏蔽
ADD AL,30h;转换为ASCII
MOV DL,AL;输出AL
MOV AH,2
INT 21h
MOV CH,2;剩余显示2位
rotate2:
MOV CL,3;移位数字3
ROL BL,CL;循环左移3位
MOV AL,BL;把输入的数送入AL
AND AL,07h;将高五位屏蔽
MOV BX,0;BX清零
NEwchar1:
MOV AH,1;输入数字
INT 21h
SUB AL,30h;转换为二进制数
JL exit1
CMP AL,8d;如果<8则跳转
JL ADD_to1
CMP AL,10h
JGE exit1
ADD_to1:
MOV CL,3;移位数字3
SHL BX,CL;左移3位
2)要求在屏幕上输出结果。
3)程序采用子程序结构,结构清晰;
4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:
1)《IBM—PC汇编语言程序设计实验教程》实验2.4
2)《IBM—PC汇编语言程序设计(第2版)》例6.11
b.二进制数转换成十进制数
二进制转十进制从最后一位开始算,依次列为第0、1、2...位第n位的数(0或1)乘以2的n次方得到的结果相加就是答案例如:01101011.转十进制: 第0位:1乘2的0次方=1 1乘2的1次方=2 0乘2的2次方=0 1乘2的3次方=8 0乘2的4次方=0 1乘2的5次方=32 1乘2的6次方=64 0乘2的7次方=0 然后:1+2+0 +8+0+32+64+0=107. 二进制01101011=十进制107.
JL exit2 ;<0则跳转
CMP AL,9d ;判断是否>9
JG exit2 ;如果大于则不是十进制数
CBW ;字节转为字
XCHG AX,BX ;交换寄存器
MOV CX,10d ;把10放如CX
MUL CX ;AX扩大10倍
XCHG AX,BX ;交换寄存器
ADD BX,AX ;原数的10倍加上输入数
(2)二进制数与八进制数互换
a.二进制数转换成八进制数
因为三位二进制数正好表示 0 ~ 7 八个数字,所以一个二进制数要转换成八进制数时,以小数点为界分别向左向右开始,每三位分为一组,一组一组地转换成对应的八进制数字。若最后不足三位时,整数部分在最高位前面加 0 补足三位再转换;小数部分在最低位之后加 0 补足三位再转换。然后按原来的顺序排列就得到八进制数了。
;---------------------------------------
binidec ENDP
;---------------------------------------
;回车和换行。
crlf PROC NEAR
MOV DL,0dh;回车
MOV AH,2;输出
INT 21h
MOV DL,0ah;换行
CALL crlf ;回车并换行
CALL binidec ;二进制转十进制
CALL crlf ;回车并换行
JMP REPEat1 ;重复执行
REPEat2: CALL DECibin ;键盘输入十进制数转为二进制
CALL crlf ;回车并换行
CALL binioct ;二进制转八进制
CALL crlf ;回车并换行
start: MOV DL,3ah ;显示提示附
MOV AH,2
IN百度文库 21h
MOV AH,1 ;输入选择数字
INT 21h
CMP AL,32h ;数字为1时,执行八进制转十进制
JE REPEat2 ;数字为2时,执行十进制转八进制
REPEat1: CALL octbin ;键盘输入八进制数转为二进制
JMP NEwchar2 ;跳转输入
exit2:
RET
DECibin ENDP
;---------------------------------------
;二进制转八进制
binioct PROC NEAR
MOV CL,2;移位数字2
ROL BL,CL;循环左移2位
MOV AL,BL;把输入的数送入AL
八进制与二进制对照表
八进制
0
1
2
3
4
5
6
7
二进制
000
001
010
011
100
101
110
111
b.八进制数转换成二进制数
一个八进制数要转换成二进制数时,以小数点为界分别向左向右开始,每一位八进制数字换成对应的三位二进制数即可。
3.3
由于计算机只能直接接受、存储和处理二进制数。对于数值信息可以采用二进制数码表示,对于非数值信息可以采用二进制代码编码表示。编码是指用少量基本符号根据一定规则组合起来以表示大量复杂多样的信息。一般所来,需要用二进制代码表示哪些文字、符号取决于我们要求计算机能够“识别”哪些文字、符号。为了能将文字、符号也存储在计算机里,必须将文字、符号按照规定的编码转换成二进制数代码。目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。
5.程序清单.......................11
学生姓名专业班级:
指导教师:徐东平工作单位:计算机科学与技术学院
题目: 八进制数和十进制数相互转换
初始条件:
理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
八进制数和十进制数相互转换
1.设计题目
八进制数和十进制数相互转换。
2.设计要求
本次课程设计着重于理论设计,同时培养动手能力。要求运用自己所学知识进行设计实现,体现自己的知识掌握水平,严禁抄袭(发现后抄袭者和被抄袭者一律不及格)。所作设计需进行论证,一方面是从理论上进行推理验证,另一方面是实验论证。
(2)二进制数 ( Binary )
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。
(3)八进制数 ( Octal )
在八进制中,基数为 8 ,它有 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 八个数字符号,八进制的基本运算规则是“逢八进一”,各数位的权是 8 的幂。
MOV AH,2;输出
INT 21h
RET
crlf ENDP
JMP REPEat2 ;重复执行
main ENDP
;-----------------------------
;十进制转二进制
DECibin PROC NEAR
MOV BX,0 ;将BX清零
NEwchar2:
MOV AH,1
INT 21h ;21号中断输入
SUB AL,30h ;ASCII转二进制
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:
1)编写八进制和十进制间的转换程序;
MOV AH,0;AH清0
ADD BX,AX;把新位移入数字
JMP NEwchar1;跳转继续输入
exit1:
RET
octbin ENDP
;--------------------------------------
;二进制转十进制
binidec PROC NEAR
MOV CX,10000d;除数为10000
;子程序
DEC_div PROC NEAR
MOV AX,BX;把二进制数移入AX
MOV DX,0;DX高八位清零
DIV CX;除数CX
MOV BX,DX;余数移入BX
MOV DL,AL;商移入DL
ADD DL,30h;转换为ASCII
MOV AH,2;输出十进制数位
INT 21h
RET
DEC_div ENDP
CALL DEC_div
MOV CX,1000d;除数为1000
CALL DEC_div
MOV CX,100d;除数为100
CALL DEC_div
MOV CX,10d;除数为10
CALL DEC_div
MOV CX,1d;除数为1
CALL DEC_div
RET
;---------------------------------------
因为1位二进制数可以表示(2=)2种状态:0、1;而2位二进制数可以表示(2=)4种状态:00、01、10、11;依次类推,7位二进制数可以表示(2=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
内容包括:设计题目;原始条件及参数;要求完成的主要任务(如:设计方案的选择与确定、设计计算、程序编制、说明书撰写等具体要求);时间安排等。
3.理论知识
3
(1)十进制数( Decimal )
十进制数是人们十分熟悉的计数体制。它用 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 十个数字符号,按照一定规律排列起来表示数值的大小。每一个位置(数位)只能出现十个数字符号 0 ~ 9 中的其中一个。通常把这些符号的个数称为基数,十进制数的基数为 10 ; 同一个数字符号在不同的位置代表的数值是不同的。十进制基于位进制和十进位两条原则,即所有的数字都用10个基本的符号表示,满十进一,同时同一个符号在不同位置上所表示的数值不同,符号的位置非常重要。基本符号是0到9十个数字。要表示这十个数的10倍,就将这些数字右移一位,用0补上空位,即10,20,30,...,90;要表示这十个数的10倍,就继续左移数字的位置,即100,200,300,...。要表示一个数的1/10,就右移这个数的位置,需要时就0补上空位:1/10位0.1,1/100为0.01,1/1000为0.001。
3
(1)十进制数与二进制数互换
a.十进制数转换成二进制数
整数部分的转换—— 除2取余法。整数部分的转换采用“除2取余法”。即用2多次除被转换的十进制数,直至商为0,每次相除所得余数,按照第一次除2所得余数是二进制数的最低位,最后一次相除所得余数是最高位,排列起来,便是对应的二进制数。
小数部分的转换——乘2取整法。小数部分的转换采用 “ 乘2取整法 ” 。即用2多次乘被转换的十进制数的小数部分,每次相乘后,所得乘积的整数部分变为对应的二进制数。第一次乘积所得整数部分就是二进制数小数部分的最高位,其次为次高位,最后一次是最低位。
ADD AL,30h;转换为ASCII
MOV DL,AL;输出AL
MOV AH,2
INT 21h
DEC CH;递减CH
JNZ rotate2;CH不为0则跳转
RET
binioct ENDP
;---------------------------------------
;八进制转二进制
octbin PROC NEAR
相关文档
最新文档