I looked through my book and couldnt find anything on the subject...am i just missing the concept or is there a trick to this?
What is your book?
I looked through your past posts, and I don't see anything that says what your book is, although I could have missed it.
For example an assembly code for taking a Char input from the keyboard and then printing that Char out.
All reading from streams or files eventually calls the read() function, described in the man page 'man 2 read'. Likewise, all writing eventually calls the write() function; 'man 2 write'.
Both read() and write() use file-descriptors, which are small positive integers representing an open byte-stream. See any book on the fundamentals of Posix-type OSes.
If you want to know what the assembly language for read() or write() consists of, I suggest setting a breakpoint on the function, then disassembling the code. Or you could disassemble the function from its dylib (e.g. the 'otool' command can do this).
There is no universal implementation of read() or write(), or any of the other C functions described in section 2 of the man pages. That's because different OSes implement primitive operations in different ways. The relevant standard (C99, Posix, etc.) specifies the API, i.e. what the function name and args are. It does not specify how any given function is to be implemented. As a result, it is not uncommon for internal implementations to vary significantly at the assembly-language level.
When I first read your post I thought you were asking about varargs functions, because both printf() and scanf() are varargs functions. That's a completely different question than what the system calls for read or write are, so I hope I haven't guessed wrong above.
If you really are asking about varargs functions, then that is something defined by the compiler. You should look in the <stdarg.h> header file, and also create test-cases and see what code the compiler generates.