BCD码转换成二进制码的程序
八位二进制——BCD码转换器

实验报告:8位二进制-BCD码转换器姓名:学号:指导教师:一.实验目的了解二进制-BCD码转换器实现原理,掌握移位加3算法,熟悉Verilog编程中模块复用模式。
二.实验任务1.掌握用移位加三算法实现二进制-BCD码转换器的设计;2.设计Verilog实验程序;3.生成比特流文件,将文件下载到开发板中进行硬件验证。
三.实验设备1.计算机(安装Xilinx ISE 10.1软件平台);2.NEXYS2 FPGA开发板一套(带USB-MIniUSB下载线)四.实验原理设计任意数目输入的二进制-BCD码转换器的方法就是采用移位加三算法(Shift and Add 3 Algorithm)。
此方法包含以下4个步骤:1)把二进制左移1位;2)如果共移了8位,那么BCD数就在百位、十位和个位列;3)如果在BCD列中,任何一个二进制数是5或者比5更大,那么就在BCD列的数值加上3;4)回到步骤1)。
其工作过程如图1所示:图1. 一个8位的二进制数转换成BCD码的步骤五.实验内容在Xilinx ISE 10.1上完成8位二进制-BCD码转换器设计,输入设计文件,仿真后,生成二进制码流文件下载到FPGA开发板上进行验证;1)依照实验1的方式,在Xilinx ISE 10.1中新建一个工程example02;2)在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“New Source”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入Verilog文件名“binbcd8.v”,完整代码如下:module binbcd8(input [7:0] b,output reg [9:0] p);reg [17:0] z;integer i;always @(*)beginfor (i=0;i<=17;i=i+1)z[i]=0;z[10:3]=b;repeat(5) //重复5次beginif (z[11:8]>4)z[11:8]=z[11:8]+3;if (z[15:12]>4)z[15:12]=z[15:12]+3;z[17:1]=z[16:0];endp=z[17:8];endendmodule3)设计相应的7段显示管程序,将相应的十进制数在开发板的显示管上显示出来。
华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)

微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
二进制与BCD码转换资料

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。
程序可见:/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/6154551f93ba561440341732. html中的HEX2BCD子程序。
.说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。
做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。
但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。
上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。
.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。
为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的1/4!.近来,在网上发现了一个链接:/news/Article/uc/uc8051/200803/4751.html,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。
这篇文章提到的程序,一直也没有找到,也难辩真假。
这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。
比如说文中提到的:“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。
51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。
.下面说说做而论道的编程思路。
;-----------------------------------------------------------------------;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。
二进制,十进制,十六进制,ASCII,BCD码的转换,单片机

1.在片内RAM 30H单元有-个8位二进制数,将其转换成压缩BCD码,存于片内RAM 41H(高位)40H(低位)中。
方法:2^8=256,所以8位二进制A<=256,A/100商是百位数,存放到41h单元,余数再除以10,再得商是10位数,高低位互换,) ORG 0100HSTART:MOV A,30H ;取来8位二进制数MOV B,#100DIV AB ;除以100MOV 41H,A ;商是百位数,存放到41h单元MOV A,B ;取回余数MOV B,#10DIV AB ;再除以10SWAP A ;商是10位数,高低位互换ORL A,BMOV 40H,A ;将十位数与个位位数存入40hSJMP $END2.一个字节(8位)BCD码转换为二进制数(方法:先将高半字节乘以10,再加上低半字节)设待转换的BCD码存放于R2中DTOB:MOV A,R2ANL A,#0F0HSWAP AMOV B,#0AHMUL ABMOV R3,AMOV A,R2ANL A,#0FHADD A,R3RET3.二进制数转换为ASCII码设(30H)=4BH,将高4位的ASCII码放在31H单元,低4位的ASCII码放在32H单元,程序具有通用性,向入口参数30H存入任何数,都能将其变成相应的ISCII 码.ORG 0000HLJMP MAINORG 0030HMAIN:MOV SP,#60HMOV 30H,#4BHMOV R2,30HMOV A,R2ANL A,#0FHCJNE A,#0AH,NEQNEQ: JC LOOPADD A,#37HJMP LOOP3LOOP:ADD A,#30HLOOP3:MOV 31H,AMOV A,R2SWAP AANL A,#0FHCJNE A,#0AH,NE1NE1: JC LOOP1ADD A,#37HJMP LOOP4LOOP1:ADD A,#30HLOOP4:MOV 32H,AA1: SJMP A1END4.已知R0的低半个字节为一个四位的二进制数,要求将其转换为ASCAII码后送回R0中。
bcd码十进制转换

bcd码十进制转换BCD码(二进制编码十进制)是一种用于表示十进制数的二进制编码方式。
在计算机领域中,BCD码常用于将十进制数转换为二进制数,便于计算机进行处理和存储。
本文将从BCD码的定义、原理、转换方法和应用等方面进行介绍,以帮助读者更好地理解和应用BCD码。
我们来了解一下BCD码的定义。
BCD码是一种二进制编码方式,其中每个十进制数位用4位二进制数表示。
例如,十进制数0用BCD码表示为0000,十进制数1用BCD码表示为0001,以此类推,十进制数9用BCD码表示为1001。
BCD码的优点在于能够直接表示十进制数,无需进行二进制转换,方便计算机进行处理。
接下来,我们来了解一下BCD码的原理。
BCD码的原理是将十进制数的每个数位分别用4位二进制数表示。
例如,将十进制数23转换为BCD码,首先分别将十位和个位数转换为4位二进制数,即2和3,分别表示为0010和0011,然后将它们组合起来,得到BCD码0010 0011。
这样,我们就可以用BCD码表示十进制数,并进行计算和存储。
接下来,我们来了解一下BCD码的转换方法。
将十进制数转换为BCD码的方法非常简单,只需要将十进制数的每个数位分别转换为4位二进制数即可。
例如,将十进制数67转换为BCD码,首先将十位数6转换为4位二进制数0110,然后将个位数7转换为4位二进制数0111,最后将它们组合起来,得到BCD码0110 0111。
同样,我们也可以将BCD码转换为十进制数,只需要将每4位二进制数转换为十进制数位即可。
BCD码在计算机领域中有着广泛的应用。
首先,BCD码常用于计算机的时钟芯片中,用于表示时间和日期等信息。
其次,BCD码还常用于计算机的存储系统中,可以将十进制数以BCD码的形式存储,减少存储空间的占用。
此外,BCD码还常用于计算机的显示系统中,可以将十进制数以BCD码的形式显示在屏幕上。
总结起来,BCD码是一种用于表示十进制数的二进制编码方式,其优点在于能够直接表示十进制数,方便计算机进行处理和存储。
码制转换十二进制数ASCII码之间的互相转换BCD

;(SP)=0052H ;(AX)=25AFH ;(DI)=0002H STRING-4;(DI)=0005H ;(DX)=25AFH
;从后往前存 ;第一次(AX)=000FH ;转换为ASCII码
;逻辑右移4位 ;第1次(AX)=025AH
;(CX)-1=0?不等,转
(BP) +4
xx 005CH xx 13 005EH 01 AF 0060H 25 02 0062H 00
;若(CL)=0,转NEXT2 ;取字符 ;转换成BCD码 ;加到中间结果上
10
MOV MUL INC JMP NEXT2: MOV AND ADD CMP JNZ NEG NEXT3: MOV RET
DX,10 DX BX SHORT LP1 DL,[BX] DL,0FH AX,DX CH,’-’ NEXT3 AX [DI],AX
;输入第一个数字串(设为26)
;输入第二个数字串(设为33) ;串1的首地址送BX ;存二进制首地址送DI ;将串1 ASCII码→二进制 ;串2的首地址送BX
8
NEXT: MAIN
LEA CALL MOV ADD MOV JNO LEA MOV INT MOV INT ENDP
DI,NUM+2 CHANGE AX,NUM AX,NUM+2 SUM,AX NEXT DX,OVER AH,9 21H AH,4CH 21H
思考题: 若键入第一个数26,第二个数为-4,填写
各变量结果。
13
③二进制数→BCD
➢ 方法1 计算二进制数中所包含的1000的个数、 100的个数、10的个数和1的个数。
➢ 方法2 除10取余。
下面举例介绍第一种方法。流程图如下:
BCD码转换

转换成等值的二进制数。 例2:把73转换成等值的二进制数。 : 转换成等值的二进制数
MOV AX, 0703H ;(AX)= 73BCD AAD ;(AX)= 0049H
12
DAA指令应紧跟在ADD或ADC指令之后。 DAA指令应紧跟在ADD或ADC指令之后。 指令应紧跟在ADD 指令之后
7
例: AL, MOV AL,48H BL, MOV BL,74H AL, ADD AL,BL DAA
0100 + 0111 1011 + 0110 1 0010
1000 0100 1100 0110 0010
48H 74H BCH 66H 1) 执行ADD ADD后 AL)=BCH, 位低4位均大于9 DAA指令 执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令 执行加66H调整,最后结果为: 执行加66H调整,最后结果为: 66H调整 (AL)=22H, CF=1, AF=1
11
例1:按十进制除法计算 ÷7=? :按十进制除法计算55÷
程序段如下: 程序段如下: MOV AX, 0505H ;(AX)=55BCD MOV CL, 07H ;(CL)= 7 AAD ;(AX)=0037H DIV CL ;(AH)=6, (AL)=7 所得结果为非压缩的BCD码(商7余6)。 所得结果为非压缩的 码 余 )。
10
除法的十进制调正指令AAD 4) 除法的十进制调正指令AAD
对非压缩BCD除法运算进行调整。 对非压缩BCD除法运算进行调整。调整操作 BCD除法运算进行调整 为: (AL)←(AH)×0AH+ (AL)←(AH)×0AH+(AL) AH ← 0 隐含的操作寄存器为AH,AL; 隐含的操作寄存器为AH,AL; AH AAD要在DIV指令之前使用 要在DIV指令之前使用; AAD要在DIV指令之前使用; 影响标志位PF SF、ZF,其它无定义 PF、 无定义; 影响标志位PF、SF、ZF,其它无定义; AAD可实现 99的十 二进制转换。 可实现≤ 的十用AAD可实现≤99的十-二进制转换。
BCD码转换

如何在 STEP 7 Micro/WIN 中将双整数 (DOUBLE INTEGER) 转换为 BCD 码 (或者反之) ?显示订货号6ES7810-2BC02-0YX0STEP7 Micro/WIN 32 (V3.2) SL6ES7810-2BC02-0YX3STEP7 Micro/WIN 32 (V3.2) UL6ES7810-2CC03-0YX0STEP7-MICRO/WIN V4.0 SP3(SL)G/E/F/I/S/C6ES7830-2BC00-0YX0FOR SIMATIC S7,STEP7-MICRO/WIN V3.X说明:在 STEP 7 Micro/WIN 中,可以使用 I_BCD 和 BCD_I (见 Instructions -> Convert) 指令将16位整数(INTEGER) 转换为 BCD 码或者相反(BCD->INT)。
使用下面提供的可下载的库,可以将32位整数(DOUBLE INTEGER) 转换为 BCD 码或者相反 (BCD->DOUBLE INTEGER)。
“BCD” 库的描述:“BCD.mwl” 库包含了功能块 DI_BCD ( 双整数到 BCD 码的转换) 和 BCD_DI ( BCD 码到双整数的转换) 。
( 33 KB )图.1双整数转换为 BCD 码 (DI_BCD):DI_BCD 功能将32 位正整数,0到99,999,999之间的数转换为二进制编码的十进制数(BCD)。
( 2 KB )图.2如果输入负数或大于99,999,999的数,ENO 使能输出位被复位并且转换结果无效。
参数数据类型操作数描述BCD_DI 功能将正的32 位 BCD 码,从( 2 KB )BCD.zipHow do you convert the number format DOUBLE INTEGER into BCD code (or vice versa) in STEP 7 Micro/WIN?Display part numberBCD code) and BCD_DI (conversion of BCD code into DOUBLE INTEGER).( 33 KB )binary coded decimal number.( 2 KB )corresponding 32-bit integers of the DOUBLE INTEGER type.( 2 KB )Fig. 03BCD.zip。
单片机原理及接口技术试题及答案

单片机试题带答案二、单项选择题(在每题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。
每题1分,共10分)1.MCS-51单片机复位操作的主要功能是把PC初始化为( )。
A.0100HB.2080HC.0000HD.8000H2.假设单片机的振荡频率为6MHz,设定时器工作在方式1需要定时1ms,那么定时器初值应为( )。
A.500B.1000C.216-500D.216-10003.定时器1工作在计数方式时,其外加的计数脉冲信号应连接到( )引脚。
A.P3.2B.P3.3C.P3.4D.P3.54.当外部中断请求的信号方式为脉冲方式时,要求中断请求信号的高电平状态和低电平状态都应至少维持( )。
A.1个机器周期B.2个机器周期C.4个机器周期D.10个晶振周期5.MCS-51单片机在同一优先级的中断源同时申请中断时,CPU首先响应( )。
A.外部中断0B.外部中断1C.定时器0中断D.定时器1中断6.定时器假设工作在循环定时或循环计数场合,应选用( )。
A.工作方式0B.工作方式1C.工作方式2D.工作方式37.MCS-51单片机的外部中断1的中断请求标志是( )。
A.ET1B.TF1C.IT1D.IE18.以下标号中,正确的标号是( )。
A.1BT:B.BEGIN:C.ADD:D.STAB31:9.串行口每一次传送( )字符。
A.1个B.1串C.1帧D.1波特10.要想把数字送入DAC0832的输入缓冲器,其控制信号应满足( )。
A.ILE=1,CS=1,WR1=0B.ILE=1, CS=0, WR1=0C.ILE=0, CS=1, WR1=0D.ILE=0,CS=0, WR1=0一、填空题(每空格1分,共10分)2.P1口通常用作_______,也可以作通用的I/O口使用。
3.假设由程序设定RS1、RS0=01,那么工作存放器R0~R7的直接地址为______。
4.8051的堆栈区一般开辟在_______。
汇编语言程序设计2

目录系统认识 (1)实验一数码转换编程及程序调试 (5)实验二运算类编程实验 (11)实验三分支程序、循环程序设计实验 (16)实验四子程序设计实验 (22)实验五显示程序实验 (26)实验六串行通讯应用实验 (27)附录WMD86 联机软件使用说明 (40)系统认识一、实验目的掌握TD-PITE微机原理与接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
二、实验设备PC微机一台,TD-PITE实验装置一套。
三、实验内容编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。
四、实验步骤1. 运行Wmd86软件,进入Wmd86集成开发环境。
2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1所示。
语言选择后,下次再启动软件,语言环境保持这次的修改不变。
在这里,我们选择汇编语言。
图13. 语言选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图2所示。
默认文件名为Wmd861。
图24. 编写实验程序,如图3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。
图3程序:SSTACK SEGMENT STACK ;定义堆栈段DW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000H ;建立数据起始地址MOV CX, 16 ;循环次数AA1: MOV [SI], ALINC SI ;地址自加1INC AL ;数据自加1LOOP AA1AA2: JMP AA2CODE ENDSEND START5. 点击,编译文件,若程序编译无误,则输出如图4所示的输出信息,然后再点击进行链接,链接无误输出如图5所示的输出信息。
图4图56. 连接PC与实验系统的通讯电缆,打开实验系统电源。
汇编实验报告--二进制到BCD码转换

实验二:二进制到BCD码转换学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握无条件转移指令、条件转移指令;2.掌握利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法;3.掌握直接向视频RAM送ASCII码进行屏幕显示的方法;4.掌握屏幕字符显示程序编写与调试。
二、实验内容将存放在BIN的一个16位无符号数转换为BCD码,结果的万、千,百、十、个位依次存放在BCD+0、BCD+1、BCD+2、BCD+3、BCD+4单元内三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求对操作数的寻址、转换方法至少要由两种以上。
五、主要实验步骤及结果1.直接向VRAM送ASCII码显示字符(1)用A命令在100H处键入下列程序MOV AX,B000MOV DS,AXXOR AL,ALXOR BX,BXMOV CX,100LOP:MOV [BX],ALINC BXINC ALPUSH CXMOV CX,8DELY:PUSH CXMOV CX,0J:LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 20(2)用N命令和W命令将此程序存入文件中。
(一定要先存入!)(3)用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H 2号功能调用有何不同?控制字符区在该程序中没有显示,在上一个程序中显示为笑脸等符号。
(4)自编程序:将存放在BIN的一个16位无符号数转换为BCD码反汇编;-U10013A3:0100 BB0010 MOV BX,100013A3:0103 8B07 MOV AX,[BX]13A3:0105 BB0000 MOV BX,000013A3:0108 BA0000 MOV DX,000013A3:010B BB0A00 MOV BX,000A13A3:010E F7F3 DIV BX13A3:0110 A21310 MOV [1013],AL13A3:0113 89161410 MOV [1014],DX13A3:0117 BB6400 MOV BX,006413A3:011A F7F3 DIV BX13A3:011C A21210 MOV [1012],AL13A3:011F 89D0 MOV AX,DX执行情况:-t=100AX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13A3 ES=13A3 SS=13A3 CS=13A3 IP=0103 NV UP EI PL NZ NA PO NC 13A3:01038B07 MOV AX,[BX] DS:1000=0000六、思考题利用INT 21H 显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?答:利用INT 21H显示时,07H-0DH的控制符会用笑脸之类的符号显示;直接向VRAM 送ACSII码时,07H-0DH的控制符不显示。
bcd码转成二进制算法

bcd码转成二进制算法
BCD码(二进制编码十进制码)是一种二进制编码方法,其每个十进制数字使用4位二进制数来表示。
要将BCD码转换成二进制形式,可以使用以下算法:
1. 从BCD码的最低位开始解析每个数字的二进制码。
2. 每4位解析为一个二进制数字的低4位。
例如0100表示0,1101表示1。
3. 将所有数字的二进制拼接起来,可以得到BCD码对应的二进制数。
4. 如果BCD码不足4位,可以在高位填充0。
举例:
BCD码: 0101 0011 0110
转换过程:
0101 0011 0110
^\^\^ ^\^\^ ^\^\^
0000 0100 0011 - 0
0001 0001 0110 - 1
0000 0000 0010 - 2
结果二进制码:000100010110
所以BCD码到二进制的转换,就是以4位为单位解析每个BCD码表示的数字,然后拼接每个数字的二进制表示。
这可以通过编程实现自动高效的BCD转换。
8086系统汇编语言压缩BCD码与二进制相互转换问题的4种方法

介简者作
.]S[范规计设程工统系线布合综 7002-11305 BG 】2【 .]S[范规计设房机统系息信子电 8002-47105 BG 】1【 】献文考参【
dohtem sthgiew eht fo mus ;dohtem redniamer eht etaluclac ot net yb dedivid ;dohtem noitcurtsni aad ;dohtem tnemtsujda tib yb tib 】s dr ow y eK【 .stneduts eht eripsni dna tcurtsni ot snoituacerp eht edivorp dna dohtem hcae gnisu fo yaw eht etartsnomed ot smargorp cificeps htiw denibmoc ,yllaniF .snoitidnoc tnereffid rednu nesohc eb ot dohtem tseb eht tuo tniop dna dohtem hcae fo egnar noitacilppa eht ezylana ,yldnoceS .dohteM sthgieW eht fo muS dna dohteM redniameR eht etaluclaC ot neT yb dediviD ,dohteM noitcurtsnI AAD ,dohteM tnemtsujdA tiB yb tiB si taht ,yllautum tamrof DCB dekcap ot tigid yranib gnisrevnoc fo sdohtem ruof edulcnoC 】t c art s bA【 �anihC,320611 nailaD, ygolonhceT fo ytisrevinU nailaD�
微机原理实验指导书 (1)

实验一系统操作及程序调试举例1.实验目的学习并掌握实验系统的基本操作,为以后的实验打下基础。
2.实验设备DICE-8086B实验系统一台3.实验准备工作系统一经连好,检查无误后,就可以通电运行。
系统提供两种启动方式,即:系统自动完成后,显示器上会显示“>”提示符,等待键入操作命令。
4.实验内容及步骤(1)系统操作练习(一)要求:从3500内存单元开始建立0~15共16个数据。
程序流程图如下:实验步骤①输入与修改:在“﹥”提示符下键入A2000,此时显示器上将会显示程序的段地址CS和偏移地址IP(=2000H),接着就可以在光标处输入程序。
注:在输入过程中,若发现本行有错误,则可以按“ ”键删除并重新输入;若回车后系统提示“ERROR!”,则要在原地址指针处重新正确输入。
输入程序后可通过反汇编查看程序。
(U操作)②程序运行:在DICE-8086B实验系统上,程序的运行方式有单步、连续和断点运行几种方式。
可参考(T操作,G操作,GB操作等)③内存单元的修改与显示:用(D操作)可显示内存单元的内容,用(E操作)可修改内存单元的内容。
(分别参考前)。
④运行程序观察从3500H单元开始连续存放的16个数据为多少?任意修改AX的值,再运行程序,显示运行结果是否正确?流程图及参考程序如下:地址机器码助记符注释2000 BF 3500 MOV DI,3500 ;设数据区首址2003 B9 0010 MOV CX,0010 ;字节数送CX2006 B8 0000 MOV AX,00002009 9E SAHF200A 88 05 MOV B[DI],AL ;写入一字节200C 47 INC DI ;修改地址指针200D 40 INC AX ;修改数据200E 27 DAA ;十进制调整200F E2 F9 LOOP 200A ;未填完转移2011 CD 00 INT(2)系统操作练习(二)要求:将内存3500单元开始的0~15共16个数传递到3600单元开始的数据区中。
bcd码的运算

bcd码的运算BCD码是一种常用的二进制编码形式,它采用4位二进制数来表示一个十进制数的每一位数字。
在计算机科学中,BCD码的运算是一项重要的技术,它在计算机系统中的数据处理和数值计算中起着重要的作用。
BCD码的运算涉及到加法、减法、乘法和除法等基本运算。
下面将分别介绍这些运算的原理和方法。
一、BCD码的加法运算BCD码的加法运算与二进制码的加法运算类似,但需要考虑到进位的情况。
具体步骤如下:1. 将两个BCD码的相应位数进行相加,得到一个4位的二进制数。
2. 如果相加结果大于9,则需要进位,进位的值为6。
3. 将进位与下一位的相加结果相加,重复上述步骤,直到所有位数相加完毕。
例如,将BCD码1010和0110相加:1 0 1 0+ 0 1 1 0-----------1 0 0 0二、BCD码的减法运算BCD码的减法运算与二进制码的减法运算类似,需要考虑到借位的情况。
具体步骤如下:1. 将被减数与减数的BCD码相应位数进行相减,得到一个4位的二进制数。
2. 如果相减结果小于0,则需要借位,借位的值为6。
3. 将借位与下一位的相减结果相减,重复上述步骤,直到所有位数相减完毕。
例如,将BCD码1010减去0110:1 0 1 0- 0 1 1 0-----------1 0 0 0三、BCD码的乘法运算BCD码的乘法运算是通过多次的加法运算实现的。
具体步骤如下:1. 将被乘数与乘数的BCD码的各位进行相乘,得到一个4位的二进制数。
2. 将相乘结果进行累加,得到最终的乘积。
例如,将BCD码1010乘以0011:1 0 1 0x 0 0 1 1-----------1 0 1 00 0 0 0 +-----------1 1 0 1四、BCD码的除法运算BCD码的除法运算是通过多次的减法运算实现的。
具体步骤如下:1. 将被除数与除数的BCD码进行相减,得到一个4位的二进制数。
2. 如果相减结果小于0,则继续向后一位借位,再进行相减。
plc用bcd指令编程案例

plc用bcd指令编程案例PLC是一种广泛应用于工业自动化领域的控制设备,可以通过编程来实现各种逻辑控制功能。
BCD(Binary Coded Decimal)指令是PLC编程中常用的一种指令,用于对二进制数和十进制数之间的转换。
下面列举了10个以PLC用BCD指令编程案例为题的例子。
1. 温度显示控制:利用PLC的BCD指令将传感器采集到的模拟温度值转换为BCD码,并通过数码管显示出来。
2. 电梯楼层显示:使用PLC的BCD指令将电梯当前所在楼层的二进制编码转换为BCD码,并在数码管上显示出来。
3. 时钟控制:通过PLC的BCD指令将当前时间的二进制编码转换为BCD码,并在数码管上显示出来,实现时钟功能。
4. 货币计数器:使用PLC的BCD指令将纸币或硬币的数量转换为BCD码,并在数码管上显示出来,实现货币计数功能。
5. 游戏得分计数:通过PLC的BCD指令将游戏中的得分值转换为BCD码,并在数码管上显示出来,实现游戏得分计数功能。
6. 数字电压表:利用PLC的BCD指令将模拟电压值转换为BCD码,并在数码管上显示出来,实现数字电压表功能。
7. 电子秤控制:使用PLC的BCD指令将传感器采集到的重量值转换为BCD码,并在数码管上显示出来,实现电子秤功能。
8. 流量计控制:通过PLC的BCD指令将传感器采集到的流量值转换为BCD码,并在数码管上显示出来,实现流量计功能。
9. 温度控制器:利用PLC的BCD指令将传感器采集到的温度值转换为BCD码,并通过比较器进行温度控制。
10. 时序控制:使用PLC的BCD指令将计时器的计时值转换为BCD码,并通过比较器进行时序控制。
以上是10个以PLC用BCD指令编程案例为题的例子。
通过利用PLC的BCD指令,可以实现各种逻辑控制功能,提高工业自动化的效率和精度。
同时,PLC编程要求严谨,需要深入了解PLC的原理和功能,确保程序的正确性和稳定性。
8086系统汇编语言压缩BCD码与二进制相互转换.

EXAMPLE:
START: MOV AX , DATA MOV DS , AX XOR AL , AL;AL;置零,用来存放累加结果并进行十进制调整 BINBCD:ADD AL , 1;二进制数多大就加几次1,保证AL与二进制数等值
DAA;对AL进行压缩BCD码调整
DEC BINDATA;每执行一次,二进制数BCDDATA减一计数 JNZ BINBCD;不等于就跳转到BINBCD RET START ENDS
为最佳选择。
2)16 位二进制数转换为压缩 BCD 码 由于16 位二进制数超出 DAA 指令范围,只能应用除十求余法和按权展
开法。其中除十求余法比较简单。
3)位二进制数转换为压缩 BCD 码 对于 32 位二进制数,由于超出 8086 系统汇编语言除法 16 位的最大长
度,因此只能使用按权展开法。使计算机能够正确识别 32 位二进制数
POP CX;CX出栈,仍当做计数器,执行完一次操作自动减一
LOOP BINTOBCD;CX不等于0就返回BINTOBCD继续执行 RET COOD ENDS END START
二进制转化为BCD码方法选取
1)小于 100D 的二进制数转换为压缩 BCD 码 四种方法都适用,但是 DAA 指令法逻辑最为简单,指令也最少,因此
4、按权展开法
按权展开法原理简单,是将任何数制转换为十进制表示方式的通用 方法,也可将压缩 BCD 码转换为二进制数的方法。但是在二进制 向压缩 BCD 码的转换中,要与 DAA 指令法配合操作。而且其涉 及大量移位和乘法操作,语句相对复杂。
4.22题:编写一个将16位二进制数转换成BC)
对于待转换二进制数,由于 BCD 转换后大小不变,因此可假设该 数本身就是以十进制在计算机中储存的,这样就将二进制数向 BCD 码的转换转化成十进制向 BCD 码的转换。于是,该数除十 后得到的余数即为压缩 BCD 码的个位,再对商求余,得到十位, 以此类推。求余的次数取决于转换后压缩 BCD码的位数。但是, 取出的余数为非压缩 BCD 码,仍需进行相应调整。而且,求商和 余数的操作要依靠二进中商和余数最长为 16 位,因此除十求余法 只适用于16位和 16 位以下二进制数向压缩 BCD 码的转换。
第二章--第四节--汇编语言程序设计方法(二)

A+30HA A(22H) 结束
R0
0010 0000
END
BCD码十进制转换成二进制
例:假如在内部RAM40H单元中存储有一个压缩BCD编码 的两位十进制数,设计一段程序把这个数转换成二进制数 并存入41H单元中。 解题思路: (40H) 16 商为二进制的高四位
余数
余为二进制的低四位
将高四位乘以0AH,再加上低四位即可。
数据排序程序 例:将片内RAM中20H-27H中的数据按照从小到大的顺序重新排列。 解题思路:见下图
RAM地址 原始数据
20H 66H
21H 11H
22H 10H
23H 34H
24H 67H
25H 01H
26H 89H
27H A0H
1
2 3 4 5 6 7
01H
01H 01H 01H 01H 01H 01H
11H
10H 10H 10H 10H 10H 10H
10H
11H 11H 11H 11H 11H 11H
34H
34H 34H 34H 34H 34H 34H
bcd码转二进制程序

bcd码转二进制程序意义:用4位二进制数来标明数值中的1位(十进制数中的0~9这10个数字),简称BCD码,即BCD代码也能够这么了解:即是将十进制的数以8421的办法翻开成二进制(14以8421办法展现成二进制即是00010100十进制标明即是20)14的BCD码为20.函数的效果即是把20成为14.怎样把20成为14呢?从界说动身,每一位用4位二进制标明.那就把BYTE的前4位*10,加上后四位即可。
经过景象看实质。
就这句话。
bcd码是四位二进制码,也即是将十进制的数字转化为二进制,可是和通常的转化有一点纷歧样,每一个十进制的数字0-9都对应着一个四位的二进制码,对应联络如下:十进制0对应二进制0000;十进制1对应二进制0001.......91001接下来的10就有两个上述的码来标明10标明为00010000也即是BCD码是遇见1001就发作进位,不象通常的二进制码,到1111才发作进位10000/****************************************************** *************************Function:bcd2val*Description:ConvertoneBYTEpackedBCDtobinaryvalue.*Input:bcd;//oneBYTEpackedBCD.*Return:binaryvalue.*Note:N/A*GlobalsChanged:N/A******************************************************* ************************/DWORDbcd2val(BYTEbcd){return((bcd4)*10+(bcd0x0f));}/*bcd2val*/bcd2val(20)=(1)、000101004=00000001(2)、1*10=10(3)、bcd0x0f=00000100(4)、10+4=14十六进制标明为e把word型的数据(BCD)也改换成二进制值。