一、实验原理
1.1 补码
正数:
正整数的补码是其二进制表示,与原码相同 。
例:+10的补码是00001010。(备注:这个+10的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)
负数
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
0的补码
数0的补码表示是唯一的。
[+0]补=[+0]反=[+0]原=00000000
[ -0]补=11111111+1=00000000
1.2 求补器
求补器的概念:正数的原码与补码形式相同,直接由输入信号通过求补电路的输入端送至输出out;负数的补码是符号位不变原码的绝对值部分求反加1之后,输出out。
求补电路如下:
电路初始图:
二、实验内容:
1、熟悉LogiSim环境
2、设计一个求补器
三、八位求补器(第8位是符号位)电路测试
示例一:正数
输入:0000 0001 结果:0000 0001
正数的补码与原码相同。
示例二:负数
输入:1000 1001结果:1111 0110
文章来源:https://www.toymoban.com/news/detail-412022.html
负数的补码由原码各位取反加一得到。文章来源地址https://www.toymoban.com/news/detail-412022.html
源代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project source="2.7.1" version="1.0">
This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/).
<lib desc="#Wiring" name="0"/>
<lib desc="#Gates" name="1"/>
<lib desc="#Plexers" name="2"/>
<lib desc="#Arithmetic" name="3"/>
<lib desc="#Memory" name="4"/>
<lib desc="#I/O" name="5"/>
<lib desc="#Base" name="6">
<tool name="Text Tool">
<a name="text" val=""/>
<a name="font" val="SansSerif plain 12"/>
<a name="halign" val="center"/>
<a name="valign" val="base"/>
</tool>
</lib>
<main name="main"/>
<options>
<a name="gateUndefined" val="ignore"/>
<a name="simlimit" val="1000"/>
<a name="simrand" val="0"/>
</options>
<mappings>
<tool lib="6" map="Button2" name="Menu Tool"/>
<tool lib="6" map="Button3" name="Menu Tool"/>
<tool lib="6" map="Ctrl Button1" name="Menu Tool"/>
</mappings>
<toolbar>
<tool lib="6" name="Poke Tool"/>
<tool lib="6" name="Edit Tool"/>
<tool lib="6" name="Text Tool">
<a name="text" val=""/>
<a name="font" val="SansSerif plain 12"/>
<a name="halign" val="center"/>
<a name="valign" val="base"/>
</tool>
<sep/>
<tool lib="0" name="Pin">
<a name="tristate" val="false"/>
</tool>
<tool lib="0" name="Pin">
<a name="facing" val="west"/>
<a name="output" val="true"/>
<a name="labelloc" val="east"/>
</tool>
<tool lib="1" name="NOT Gate"/>
<tool lib="1" name="AND Gate"/>
<tool lib="1" name="OR Gate"/>
</toolbar>
<circuit name="main">
<a name="circuit" val="main"/>
<a name="clabel" val=""/>
<a name="clabelup" val="east"/>
<a name="clabelfont" val="SansSerif plain 12"/>
<wire from="(680,600)" to="(680,610)"/>
<wire from="(930,370)" to="(980,370)"/>
<wire from="(970,590)" to="(970,730)"/>
<wire from="(810,340)" to="(810,540)"/>
<wire from="(810,810)" to="(810,820)"/>
<wire from="(880,840)" to="(880,850)"/>
<wire from="(440,160)" to="(440,430)"/>
<wire from="(980,370)" to="(980,440)"/>
<wire from="(520,130)" to="(520,330)"/>
<wire from="(830,790)" to="(830,820)"/>
<wire from="(860,730)" to="(860,820)"/>
<wire from="(1000,160)" to="(1000,440)"/>
<wire from="(520,330)" to="(520,540)"/>
<wire from="(280,160)" to="(280,440)"/>
<wire from="(860,730)" to="(970,730)"/>
<wire from="(830,740)" to="(850,740)"/>
<wire from="(1000,160)" to="(1150,160)"/>
<wire from="(500,330)" to="(520,330)"/>
<wire from="(610,790)" to="(830,790)"/>
<wire from="(540,610)" to="(610,610)"/>
<wire from="(90,820)" to="(800,820)"/>
<wire from="(1100,360)" to="(1100,530)"/>
<wire from="(850,490)" to="(850,540)"/>
<wire from="(350,350)" to="(410,350)"/>
<wire from="(230,150)" to="(1190,150)"/>
<wire from="(680,610)" to="(730,610)"/>
<wire from="(1150,160)" to="(1150,440)"/>
<wire from="(500,350)" to="(550,350)"/>
<wire from="(1180,160)" to="(1180,380)"/>
<wire from="(390,330)" to="(390,530)"/>
<wire from="(690,350)" to="(730,350)"/>
<wire from="(710,160)" to="(710,440)"/>
<wire from="(550,350)" to="(550,440)"/>
<wire from="(410,590)" to="(410,800)"/>
<wire from="(90,160)" to="(90,820)"/>
<wire from="(660,120)" to="(660,340)"/>
<wire from="(250,590)" to="(250,810)"/>
<wire from="(730,770)" to="(840,770)"/>
<wire from="(840,360)" to="(840,440)"/>
<wire from="(350,330)" to="(390,330)"/>
<wire from="(410,350)" to="(450,350)"/>
<wire from="(1130,380)" to="(1180,380)"/>
<wire from="(410,800)" to="(820,800)"/>
<wire from="(710,160)" to="(860,160)"/>
<wire from="(280,160)" to="(440,160)"/>
<wire from="(520,130)" to="(1190,130)"/>
<wire from="(810,110)" to="(810,340)"/>
<wire from="(1130,380)" to="(1130,440)"/>
<wire from="(870,760)" to="(870,820)"/>
<wire from="(430,480)" to="(430,530)"/>
<wire from="(860,160)" to="(1000,160)"/>
<wire from="(560,490)" to="(560,540)"/>
<wire from="(1120,590)" to="(1120,760)"/>
<wire from="(390,140)" to="(390,330)"/>
<wire from="(1080,360)" to="(1100,360)"/>
<wire from="(840,770)" to="(840,820)"/>
<wire from="(230,150)" to="(230,530)"/>
<wire from="(540,600)" to="(540,610)"/>
<wire from="(810,110)" to="(1190,110)"/>
<wire from="(870,760)" to="(1120,760)"/>
<wire from="(250,350)" to="(300,350)"/>
<wire from="(860,160)" to="(860,440)"/>
<wire from="(820,800)" to="(820,820)"/>
<wire from="(850,740)" to="(850,820)"/>
<wire from="(1080,380)" to="(1130,380)"/>
<wire from="(660,120)" to="(1190,120)"/>
<wire from="(390,140)" to="(1190,140)"/>
<wire from="(990,490)" to="(990,530)"/>
<wire from="(1180,160)" to="(1190,160)"/>
<wire from="(780,340)" to="(810,340)"/>
<wire from="(730,610)" to="(730,770)"/>
<wire from="(270,490)" to="(270,530)"/>
<wire from="(950,100)" to="(950,350)"/>
<wire from="(1100,90)" to="(1190,90)"/>
<wire from="(440,160)" to="(570,160)"/>
<wire from="(950,350)" to="(950,530)"/>
<wire from="(570,160)" to="(710,160)"/>
<wire from="(610,610)" to="(610,790)"/>
<wire from="(830,600)" to="(830,740)"/>
<wire from="(980,370)" to="(1030,370)"/>
<wire from="(660,340)" to="(660,540)"/>
<wire from="(90,160)" to="(280,160)"/>
<wire from="(640,350)" to="(690,350)"/>
<wire from="(780,360)" to="(840,360)"/>
<wire from="(570,160)" to="(570,440)"/>
<wire from="(690,350)" to="(690,440)"/>
<wire from="(550,350)" to="(590,350)"/>
<wire from="(250,810)" to="(810,810)"/>
<wire from="(840,360)" to="(880,360)"/>
<wire from="(410,350)" to="(410,430)"/>
<wire from="(250,350)" to="(250,440)"/>
<wire from="(950,100)" to="(1190,100)"/>
<wire from="(1100,90)" to="(1100,360)"/>
<wire from="(930,350)" to="(950,350)"/>
<wire from="(640,340)" to="(660,340)"/>
<wire from="(1150,160)" to="(1180,160)"/>
<wire from="(700,490)" to="(700,540)"/>
<wire from="(1140,490)" to="(1140,530)"/>
<comp lib="1" loc="(250,590)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="0" loc="(880,840)" name="Splitter">
<a name="facing" val="north"/>
<a name="fanout" val="8"/>
<a name="incoming" val="8"/>
</comp>
<comp lib="1" loc="(990,490)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(1030,370)" name="OR Gate">
<a name="facing" val="west"/>
<a name="label" val="c0"/>
</comp>
<comp lib="1" loc="(700,490)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(430,480)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(730,350)" name="OR Gate">
<a name="facing" val="west"/>
<a name="label" val="c2"/>
</comp>
<comp lib="1" loc="(970,590)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(880,360)" name="OR Gate">
<a name="facing" val="west"/>
<a name="label" val="c1"/>
</comp>
<comp lib="1" loc="(270,490)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(850,490)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="0" loc="(1210,80)" name="Splitter">
<a name="facing" val="west"/>
<a name="fanout" val="8"/>
<a name="incoming" val="8"/>
</comp>
<comp lib="0" loc="(880,850)" name="Pin">
<a name="facing" val="north"/>
<a name="output" val="true"/>
<a name="width" val="8"/>
<a name="labelloc" val="east"/>
</comp>
<comp lib="1" loc="(410,590)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(300,350)" name="OR Gate">
<a name="facing" val="west"/>
<a name="label" val="c5"/>
</comp>
<comp lib="1" loc="(560,490)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(1120,590)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(830,600)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(450,350)" name="OR Gate">
<a name="facing" val="west"/>
<a name="label" val="c4"/>
</comp>
<comp lib="1" loc="(680,600)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="1" loc="(1140,490)" name="AND Gate">
<a name="facing" val="south"/>
</comp>
<comp lib="6" loc="(1271,52)" name="Text">
<a name="text" val="输入"/>
</comp>
<comp lib="6" loc="(794,867)" name="Text">
<a name="text" val="输出"/>
</comp>
<comp lib="0" loc="(1210,80)" name="Pin">
<a name="facing" val="west"/>
<a name="width" val="8"/>
<a name="tristate" val="false"/>
</comp>
<comp lib="1" loc="(590,350)" name="OR Gate">
<a name="facing" val="west"/>
<a name="label" val="c3"/>
</comp>
<comp lib="1" loc="(540,600)" name="XOR Gate">
<a name="facing" val="south"/>
</comp>
</circuit>
</project>
到了这里,关于基于logisim的八位求补器的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!