1 / 14

Homework

Learn how to convert binary to octal or hex numbers without using string library functions. Understand the ASCII codes and conversion array in 8-bit bytes and 16-bit words for easy computer processing.

hbennie
Download Presentation

Homework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Homework • Reading • Finish K&R Chapter 1 • Start K&R Chapter 2 for next time. • Programming Assignments • DON’T USE <string.h> and string library functions, e.g. strlen ( ) – Write your own!

  2. Octal and Hex Numbers • People normally deal in numbers base 10 • Computers normally deal in numbers base 2 • The problem: • Reading a long string of 1’s and 0’s not easy • Conversion between base 2 and base 10 not easy • The solution: • Convert binary digit strings to Octal or Hex • Easily done because 23 = 8 and 24 = 16

  3. Octal and Hex Numbers • Look at a long string of binary digits in groups • 3 digits for Octal • 4 digits for Hex • See the following examples: • Binary Digits • Grouped by threes • For Octal • Grouped by fours • For Hex • Don’t convert binary to/from Hex/Octal via decimal! 011010101100 … 011 010 101 100 … 003 002 005 004 … 0110 1010 1100 … 0x6 0xa 0xc …

  4. ASCII Code • For computers to process our letters, digits, punctuation marks, etc, we need a binary code for each such “character”. • American Standard Code for Information Interchange (ASCII) provides these codes. • See ASCII code chart • Standard 8 bit bytes and 16 bit words are not integer multiples of 3 bits but are integer multiples of 4 bits – favoring use of Hex!

  5. ASCII Codes in visitype.c • To convert a character’s (integer) value to a printable ASCII string for what it represents: • We need a table of 4 byte character strings each ending in a zero byte (created by using “\0”) • Arranged in the order of the character values used in the ASCII code to represent them • And to create the address of one of these strings to pass to function printf e.g. &asciiname[4*i]

  6. Analysis of visitype.c • See separate program text “visitype.c” • ASCII code conversion array char asciiname [] = …. ; • Initialization values for the array 128 strings of length 4 including the ‘\0’ … asciiname[0] …[1] …[2] …[3] …[4] …[5] …[6] ‘N’ ‘U’ ‘L’ ‘\0’ ‘S’ ‘O’ ‘H’ …

  7. Analysis of visitype.c • There are a few characters which can't be placed in the quoted initialization string directly, for example " and \. "∆∆"\0" (where " is hex 22) • Problem is that " as a character will be interpreted as the end of string. We need to indicate that it is quoted, that it is to be taken literally by the compiler as an ASCII value, and the way to do that is precede it by a \.  "∆∆\"\0" (where " is hex 22) • Now there seem to be five chars in that string, “∆∆\"\0” • But there are not, \" is a single character value, just as \0 is

  8. Analysis of visitype.c • What other characters MAY need the same special treatment? • See K&R page 193. • Good page to mark for open book tests! • Do all of these require special treatment here? • No, which one other than \“ needs it? • Answer: (write in here) _________

  9. Analysis of visitype.c • Access the strings in the array (i = 0 to 127) asciiname[4*i] • Array index 4*i indicates start of each string • However, printf needs a pointer to a string &asciiname[4*i] • The “&” is the “address of” operator • Take on faith for now - more on pointers later

  10. More on Debugging • 2 ways to debug a program: • Use printfs • Insert printfs in multiple places in your program and print out intermediate values • Use gdb debugger • A professional programmer uses a debugger, rather than putting in lots of printf statements to track down a bug. • A quick gdb reference guide is posted here: http://www.cs.umb.edu/~ramin/cs240/ gdb-refcard.pdf

  11. Use of the gdb Debugger • Start with the correct compiler options: gcc -g vt.c -o vt • Type the following to run the program: gdb vt • Gives message: Ready to run -- not yet running. creates an executable that has debugging info, e.g. - data type for variables/functions - correspondence between line # and addresses

  12. Use of the gdb Debugger(cont’d) • Want to interact with running program, not letting it run free. To set a break point at main(), type: b main break at main() program vt is not running yet • To run, type: r <vt.in run, taking stdin from vt.in • Will stop when encounters main() in program execution -- often lot of things get done first. • Now can single step through program, s or n (skip entering functions), put out values of variables.

  13. Use of gdb • Examples of gdb commands: p i (print value of variable i) p i=2 (set the variable i to 2 and print it) p 3*i (print value of expression 3*i) p/x i (print in hex format value of variable i) set variable i=5 (set the variable i to 5 without printing) i lo ("info" - give values of all local variables) h (help -- pretty good messages -- lists topics) h topic (help on named topic) h p (help on command p for printf) q TO QUIT (leave debugger)

  14. Use of gdb (cont’d) • More complex gdb commands in Reference Guide. • Setting breaks/conditional breaks at line numbers: b 36 b fn.c:22 if i = = 3 • Getting line numbers from "list" or "l" command: l 22 print 10 lines around line 22 in main l after listing some lines, then l means next 10 lines i b to get info on breakpoints d 3 to delete bkpt 3 c for continue after bkpt encountered

More Related