#include <stdio.h>
int result[3];
int cout;
void input(int *, int*);
void inputsignal(int*);
int and(int, int);
int or(int, int);
int add(int, int, int);
int alu_1bit(int, int, int);
int over(int, int, int);
int main()
{
int a, b;
int binvert = 0;
int bitofa, bitofb;
int cin = 0;
int i;
int mask = 1;
int outcome = 0;
int signal;
int overflow;
while(1){
input(&a,&b);
inputsignal(&signal);
if(signal == 10)
break;
if(signal == 6){
cin = 1;
binvert = 1;
signal = 2;
}
for(i = 0; i < 32; ++i){
bitofa = (a >> i) & mask;
bitofb = (b >> i) & mask;
if(binvert == 1)
bit_b = !bit_b;
if(i == 31)
overflow = over(bitofa, bitofb, cin);
else
cin = alu_1bit(bit_a, bit_b, cin);
outcome |= result[signal] << i;
}
printf("outcome = %d\n overflow detection = %d\n zero signal = %d\n", outcome, overflow, !(zero(outcome)));
{
return 0;
}
void input(int *a, int *b){
printf("# Input two number : \n");
scanf("%d %d", a, b);
}
void inputsignal(int *signal){
printf("# Input control signal : (0 -> and, 1-> or, 2-> add, 10->exit)\n");
scanf("%d", signal);
}
int and(int bitofa, int bitofb){
return (bitofa & bitofb);
}
int or(int bitofa, int bitofb){
return (bitofa | bitofb);
}
int add(int bitofa, int bitofb, int cin){
cout = ((bitofa * bitofb) + cin * (bitofa ^ bitofb));
return ((bitofa ^ bitofb) ^ cin);
}
int alu_1bit(int bit_a, int bit_b, int cin){
result[0] = and(bit_a, bit_b);
result[1] = or(bit_a, bit_b);
result[2] = add(bit_a, bit_b, cin);
return cout;
}
int over(int bit_a, int bit_b, int cin){
result[0] = and(bit_a, bit_b);
result[1] = or(bit_a, bit_b);
result[2] = add(bit_a, bit_b, cin);
return cout^cin;
}
int zero(int outcome){
int zero = 0, mask = 1, i;
for(i = 0; i < 32; i++)
zero |= (outcome >> i) & mask;
return zero;
}
/*
int overflowcheck( int a, int b ){
return (( (a & b & ~(a+b)) | (~a & ~b & (a+b)) ) < 0) ;
}
*/
1bit_alu1.zip_1 bit
版权申诉
201 浏览量
2022-09-14
16:27:57
上传
评论
收藏 840B ZIP 举报
我虽横行却不霸道
- 粉丝: 72
- 资源: 1万+
最新资源
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 基于matlab实现自适应波束形成RLS及LMS算法仿真源程序1.rar
- 基于matlab实现自己编写的基于卡尔曼滤波的利用加速度传感器的计步器,测试数据是传感器放在腰部和手臂 .rar
- 基于matlab实现阵列信号处理,波束形成.rar
- 111111111111111111
- 基于matlab实现计步器编程;对当前的计步器装置的数值算法模拟 .rar
- Mdb学习查看PW;access;mdb;pw;password;patch
- 基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
- 基于ultralytics-yolov8, 将其检测/分类/分割/姿态等任务移植到rk3588上
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈