# Thread: Mixing C and Assembly

1. ## Mixing C and Assembly

hi, i am having trouble understanding this problem.
could anyone help me out?

Write a C language program that compiles successfully as a borland project that reads char data from a streaming file and computes the odd parity of the 16 bit unsigned number and writes the 8 bit (7bit+parity bit) to an output file. EOF is NULL. Input file is Indata.dat. Output file is outdata.dat.

"Odd parity" forces the number of "1s" to be odd including the parity bit. Some examples are:
x1001110 -> 11001110
x0011001 -> 00011001 2. I don't know why you'd need assembly to do this, but if you feel the need, you can include ASM code in C programs by "inlining" the asembly code. I believe that you can do this in Borland compilers by doing the following:
Code:
```asm
{
...
}```
I would just read in the data from a file until the char I encountered was NULL (your EOF), than I'd figure out what the parity bit is, convert the data to the 8-bit number, and write that data to the file, all in one big loop.

The general nature of your question suggests you're looking for someone to do this problem for you because you haven't done it yourself for whatever reasons. You won't find people very happy to help you if that is the case, so I suggest you show a little effort on your part. You can find file I/O tutorials at this site, and I believe you can also find an article that'll teach you how to work directly with binary data. 3. XORing the bits of a value with a bit mask is one way to compute parity.
Code:
```   unsigned short mask;
unsigned int result = 0;
{
}```
The result of this will be 0 if there is an even number of bits in value, and 1 if there is an odd number of bits in value. But this is even parity; to get odd parity, invert the result.
Code:
```   if ( odd )
{
result = !result;
}```
A way to combine this result with the initial value, in this situation, could be to OR the result at the MSB with the original value.
Code:
`   value |= result << 7;`
About the only thing I may have left out is a function declaration and return value.
Code:
```unsigned short parity(unsigned short value, int odd)
{
/* ... */
return value;
}```
Or a test program that might produce these results:
parity(0x4E,1) = 0xCE
parity(0x19,1) = 0x19 4. thank you.
helped me alot. Popular pages Recent additions 