Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
136
Task/Four-bit-adder/Batch-File/four-bit-adder.bat
Normal file
136
Task/Four-bit-adder/Batch-File/four-bit-adder.bat
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: ":main" is where all the non-logic-gate stuff happens
|
||||
:main
|
||||
:: User input two 4-digit binary numbers
|
||||
:: There is no error checking for these numbers, however if the first 4 digits of both inputs are in binary...
|
||||
:: The program will use them. All non-binary numbers are treated as 0s, but having less than 4 digits will crash it
|
||||
set /p "input1=First 4-Bit Binary Number: "
|
||||
set /p "input2=Second 4-Bit Binary Number: "
|
||||
|
||||
:: Put the first 4 digits of the binary numbers and separate them into "A[]" for input A and "B[]" for input B
|
||||
for /l %%i in (0,1,3) do (
|
||||
set A%%i=!input1:~%%i,1!
|
||||
set B%%i=!input2:~%%i,1!
|
||||
)
|
||||
|
||||
:: Run the 4-bit Adder with "A[]" and "B[]" as parameters. The program supports a 9th parameter for a Carry input
|
||||
call:_4bitAdder %A3% %A2% %A1% %A0% %B3% %B2% %B1% %B0% 0
|
||||
|
||||
:: Display the answer and exit
|
||||
echo %input1% + %input2% = %outputC%%outputS4%%outputS3%%outputS2%%outputS1%
|
||||
pause>nul
|
||||
exit /b
|
||||
|
||||
:: Function for the 4-bit Adder following the logic given
|
||||
:_4bitAdder
|
||||
set inputA1=%1
|
||||
set inputA2=%2
|
||||
set inputA3=%3
|
||||
set inputA4=%4
|
||||
|
||||
set inputB1=%5
|
||||
set inputB2=%6
|
||||
set inputB3=%7
|
||||
set inputB4=%8
|
||||
|
||||
set inputC=%9
|
||||
|
||||
call:_FullAdder %inputA1% %inputB1% %inputC%
|
||||
set outputS1=%outputS%
|
||||
set inputC=%outputC%
|
||||
|
||||
call:_FullAdder %inputA2% %inputB2% %inputC%
|
||||
set outputS2=%outputS%
|
||||
set inputC=%outputC%
|
||||
|
||||
call:_FullAdder %inputA3% %inputB3% %inputC%
|
||||
set outputS3=%outputS%
|
||||
set inputC=%outputC%
|
||||
|
||||
call:_FullAdder %inputA4% %inputB4% %inputC%
|
||||
set outputS4=%outputS%
|
||||
set inputC=%outputC%
|
||||
|
||||
:: In order return more than one number (of which is usually done via 'exit /b') we declare them while ending the local environment
|
||||
endlocal && set "outputS1=%outputS1%" && set "outputS2=%outputS2%" && set "outputS3=%outputS3%" && set "outputS4=%outputS4%" && set "outputC=%inputC%"
|
||||
exit /b
|
||||
|
||||
:: Function for the 1-bit Adder following the logic given
|
||||
:_FullAdder
|
||||
setlocal
|
||||
set inputA=%1
|
||||
set inputB=%2
|
||||
set inputC1=%3
|
||||
|
||||
call:_halfAdder %inputA% %inputB%
|
||||
set inputA1=%outputS%
|
||||
set inputA2=%inputA1%
|
||||
set inputC2=%outputC%
|
||||
|
||||
call:_HalfAdder %inputA1% %inputC1%
|
||||
set outputS=%outputS%
|
||||
set inputC1=%outputC%
|
||||
|
||||
call:_Or %inputC1% %inputC2%
|
||||
set outputC=%errorlevel%
|
||||
|
||||
endlocal && set "outputS=%outputS%" && set "outputC=%outputC%"
|
||||
exit /b
|
||||
|
||||
:: Function for the half-bit adder following the logic given
|
||||
:_halfAdder
|
||||
setlocal
|
||||
set inputA1=%1
|
||||
set inputA2=%inputA1%
|
||||
set inputB1=%2
|
||||
set inputB2=%inputB1%
|
||||
|
||||
call:_XOr %inputA1% %inputB2%
|
||||
set outputS=%errorlevel%
|
||||
|
||||
call:_And %inputA2% %inputB2%
|
||||
set outputC=%errorlevel%
|
||||
|
||||
endlocal && set "outputS=%outputS%" && set "outputC=%outputC%"
|
||||
exit /b
|
||||
|
||||
:: Function for the XOR-gate following the logic given
|
||||
:_XOr
|
||||
setlocal
|
||||
set inputA1=%1
|
||||
set inputB1=%2
|
||||
|
||||
call:_Not %inputA1%
|
||||
set inputA2=%errorlevel%
|
||||
|
||||
call:_Not %inputB1%
|
||||
set inputB2=%errorlevel%
|
||||
|
||||
call:_And %inputA1% %inputB2%
|
||||
set inputA=%errorlevel%
|
||||
|
||||
call:_And %inputA2% %inputB1%
|
||||
set inputB=%errorlevel%
|
||||
|
||||
call:_Or %inputA% %inputB%
|
||||
set outputA=%errorlevel%
|
||||
|
||||
:: As there is only one output, we can use 'exit /b {errorlevel}' to return a specified errorlevel
|
||||
exit /b %outputA%
|
||||
|
||||
:: The basic 3 logic gates that every other funtion is composed of
|
||||
:_Not
|
||||
setlocal
|
||||
if %1==0 exit /b 1
|
||||
exit /b 0
|
||||
:_Or
|
||||
setlocal
|
||||
if %1==1 exit /b 1
|
||||
if %2==1 exit /b 1
|
||||
exit /b 0
|
||||
:_And
|
||||
setlocal
|
||||
if %1==1 if %2==1 exit /b 1
|
||||
exit /b 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue