Assembler Language Boot Camp Basic Arithmetic · 2011. 8. 23. · ABC Lab 2: Hands-On Assembler Lab...

57
Assembler Language Assembler Language "Boot Camp" "Boot Camp" Part 1 - Numbers and Part 1 - Numbers and Basic Arithmetic Basic Arithmetic SHARE 117 in Orlando SHARE 117 in Orlando Session 9210 Session 9210 August 8, 2011 August 8, 2011 1

Transcript of Assembler Language Boot Camp Basic Arithmetic · 2011. 8. 23. · ABC Lab 2: Hands-On Assembler Lab...

  • Assembler Language Assembler Language "Boot Camp""Boot Camp"

    Part 1 - Numbers and Part 1 - Numbers and Basic ArithmeticBasic Arithmetic

    SHARE 117 in OrlandoSHARE 117 in OrlandoSession 9210Session 9210

    August 8, 2011August 8, 2011

    1

  • IntroductionIntroduction

    Who are we?

    John Ehrman, IBM Software Group

    Dan Greiner, IBM Systems & Technology Group

    2

  • IntroductionIntroduction

    Who are you?An applications programmer who needs to write something in mainframe assembler?An applications programmer who wants to understand z/Architecture so as to better understand how HLL programs work?A manager who needs to have a general understanding of assembler?

    Our goal is to provide for professionals an introduction to the z/Architecture assembler language

    3

  • IntroductionIntroduction

    These sessions are based on notes from a course in assembler language at Northern Illinois University

    The notes are in turn based on the textbook, Assembler Language with ASSIST and ASSIST/I by Ross A Overbeek and W E Singletary, Fourth Edition, published by Macmillan

    4

  • IntroductionIntroduction

    The original ASSIST (Assembler System for Student Instruction and Systems Teaching) was written by John Mashey at Penn State University

    ASSIST/I, the PC version of ASSIST, was written by Bob Baker, Terry Disz and John McCharen at Northern Illinois University

    5

  • IntroductionIntroductionBoth ASSIST and ASSIST/I are in the public domain, and are compatible with the System/370 architecture of about 1975 (fine for beginners)

    Everything we discuss here works the same in z/Architecture

    Both ASSIST and ASSIST/I are available at http://www.kcats.org/assist

    6

  • IntroductionIntroduction

    ASSIST-V is also available now, athttp://www.kcats.org/assist-v

    Other materials described in these sessions can be found at the same site, at http://www.kcats.org/share

    Please keep in mind that ASSIST, ASSIST/I, and ASSIST-V are not supported by Penn State, NIU, or any of us

    7

  • IntroductionIntroduction

    Other references used in the course at NIU:Principles of Operation (PoO)System/370 Reference SummaryHigh Level Assembler Language Reference

    Access to PoO and HLASM Ref is normally online at the IBM publications web site

    Students use the S/370 "green card" booklet all the time, including during examinations (SA22-7209)

    8

  • Our Agenda for the WeekOur Agenda for the WeekAssembler Boot Camp (ABC) Part 1: Numbers and Basic Arithmetic (Monday - 9:30 a.m.)

    ABC Part 2: Instructions and Addressing (Monday - 1:30 p.m.)

    ABC Part 3: Assembly and Execution; Branching (Tuesday - 9:30 a.m.)

    ABC Lab 1: Hands-On Assembler Lab Using ASSIST/I (Tuesday - 6:00 p.m.)

    9

  • Our Agenda for the WeekOur Agenda for the WeekABC Part 4: Program Structures; Arithmetic (Wednesday - 9:30 a.m.)

    ABC Lab 2: Hands-On Assembler Lab Using ASSIST/I (Wednesday - 6:00 p.m.)

    ABC Part 5: Decimal and Logical Instructions (Thursday - 9:30 a.m.)

    10

  • Agenda for this SessionAgenda for this Session

    Decimal, Binary and Hexadecimal Numbers and Conversions

    Main Storage Organization and Signed Binary Numbers

    Integer Arithmetic and Overflow

    Getting Started with ASSIST/I

    11

  • The Big Question:The Big Question:"Why Learn Assembler "Why Learn Assembler Language?"Language?""People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird."

    Donald E Knuth, The Art of Computer Programming, Preface to Fascicle Number One (MMIX)

    12

  • Decimal, Binary and Decimal, Binary and Hexadecimal Numbers Hexadecimal Numbers

    and Conversionsand Conversions

    In Which We Learn to Count In Which We Learn to CountAll Over Again All Over Again

    13

  • Why Bother with Binary?Why Bother with Binary?

    Nearly all computers today use binary as the internal "language"

    We need to understand this language to fully understand instructions and dataEven decimal numbers are represented internally in binary!

    Binary numbers can get very long, so we use hexadecimal ("hex") as a shorthand

    A hex digit is simply a group of four binary digits (bits)

    14

  • Counting in Bases 10, 2, and 16Counting in Bases 10, 2, and 16Dec Bin Hex0 0000 01 0001 12 0010 23 0011 34 0100 45 0101 56 0110 67 0111 7

    Dec Bin Hex8 1000 89 1001 910 1010 A11 1011 B12 1100 C13 1101 D14 1110 E15 1111 F16 10000 10

    15

  • Numbers in Different BasesNumbers in Different Bases

    Consider how we write numbers in base 10, using the digits 0 - 9:

    83210 = 80010 + 3010 + 210 = 8 x 102 + 3 x 101 + 2 x 100

    For numbers in base 2 we need only 0 and 1:11012 = 10002 + 1002 + 00 + 1 = 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20

    But because it requires less writing, we usually prefer base 16 to base 2

    16

  • Caution!Caution!

    The value of a number may be ambiguous when the base isn't indicated

    1011 = ?1010112 = 1110101116 = 411310

    The base will usually be clear from the context, but will otherwise be provided

    17

  • Converting Binary & Hexadecimal Converting Binary & Hexadecimal to Decimalto Decimal10112 = 1 x 23 = 1 x 8 = 8

    + 0 x 22 = 0 x 4 = 0 + 1 x 21 = 1 x 2 = 2+ 1 x 20 = 1 x 1 = 1 11

    A6116 = 10 x 162 = 10 x 256 = 2560 + 6 x 161 = 6 x 16 = 96 + 1 x 160 = 1 x 1 = 1 2657

    Note: numbers without subscript are base 10 18

  • Converting Decimal to Binary & Converting Decimal to Binary & HexadecimalHexadecimal

    To convert a decimal number n to base b1. Divide n by b, giving quotient q and remainder r2. Write r as the rightmost digit, or as the digit to

    the left of the last one written3. If q is zero, stop; otherwise set n = q and go

    back to Step 1.

    Note that each digit will be in the range 0 to b-1

    19

  • Example: Convert 123Example: Convert 1231010 to Base 16to Base 16

    123 / 16 = 7 with remainder 11, so the rightmost digit is B (why?)

    7 / 16 = 0 with remainder 7, so the next digit to the left is 7

    Since quotient is 0, stop

    Result is 12310 = 7B16

    A similar process shows 12310 = 1111011220

  • Conversions Between Bin and HexConversions Between Bin and HexThese are the easiest of the conversions, since 16 = 24 and we can convert by groups of digits

    To convert from binary to hexadecimal1. Starting at the right, separate the digits into

    groups of four, adding any needed zeros to the left of the leftmost digit so that all groups have four digits

    2. Convert each group of four binary digits to a hexadecimal digit

    21

  • Conversions Between Bin and HexConversions Between Bin and Hex

    So to convert 101101 to hex,1. Group the digits and add zeros: 0010 11012. Convert to hex digits: 2 D

    To convert from hexadecimal to binary, simply reverse the algorithm

    So 2C516 = 0010 1100 0101 = 10110001012 2 C 5

    22

  • Addition and subtraction of unsigned numbers is performed in hexadecimal and binary just the same as it is in decimal, with carries and borrows

    We normally use signed numbers, so we won't dwell on unsigned numbers

    Arithmetic with Unsigned NumbersArithmetic with Unsigned Numbers

    23

  • Addition Table - Base 2 Addition Table - Base 10

    + 0 1 + 0 1 2 3 4 5 6 7 8 9 ——————— ———————————————————————————————————————— 0 | 0 1 0 | 0 1 2 3 4 5 6 7 8 9 1 | 1 0+c 1 | 1 2 3 4 5 6 7 8 9 0+c 2 | 2 3 4 5 6 7 8 9 0+c 1+c 3 | 3 4 5 6 7 8 9 0+c 1+c 2+c 4 | 4 5 6 7 8 9 0+c 1+c 2+c 3+c 5 | 5 6 7 8 9 0+c 1+c 2+c 3+c 4+c 6 | 6 7 8 9 0+c 1+c 2+c 3+c 4+c 5+c 7 | 7 8 9 0+c 1+c 2+c 3+c 4+c 5+c 6+c 8 | 8 9 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 9 | 9 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c

    Arithmetic with Unsigned NumbersArithmetic with Unsigned Numbers

    24

  • Addition Tables — Base 16

    + 0 1 2 3 4 5 6 7 8 9 A B C D E F ————————————————————————————————————————————————————————————————— 0 | 0 1 2 3 4 5 6 7 8 9 A B C D E F 1 | 1 2 3 4 5 6 7 8 9 A B C D E F 0+c 2 | 2 3 4 5 6 7 8 9 A B C D E F 0+c 1+c 3 | 3 4 5 6 7 8 9 A B C D E F 0+c 1+c 2+c 4 | 4 5 6 7 8 9 A B C D E F 0+c 1+c 2+c 3+c 5 | 5 6 7 8 9 A B C D E F 0+c 1+c 2+c 3+c 4+c 6 | 6 7 8 9 A B C D E F 0+c 1+c 2+c 3+c 4+c 5+c 7 | 7 8 9 A B C D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 8 | 8 9 A B C D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 9 | 9 A B C D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c A | A B C D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c 9+c B | B C D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c 9+c A+c C | C D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c 9+c A+c B+c D | D E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c 9+c A+c B+c C+c E | E F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c 9+c A+c B+c C+c D+c F | F 0+c 1+c 2+c 3+c 4+c 5+c 6+c 7+c 8+c 9+c A+c B+c C+c D+c E+c

    Arithmetic with Unsigned NumbersArithmetic with Unsigned Numbers

    25

  • 1101

  • Main Storage Main Storage Organization and Organization and

    Signed Binary NumbersSigned Binary Numbers

    27

  • Main Storage OrganizationMain Storage OrganizationIn order to understand how signed numbers are represented in a binary computer, we need to understand memory organization

    Abstractly, a binary digit (or bit) can be represented by any 2-state system: on-off, true-false, etc.

    A computer's memory is simply a collection of billions of such systems implemented using electronic switches

    28

  • Main Storage OrganizationMain Storage OrganizationMemory is organized by grouping eight bits into a byte, then assigning each byte its own identifying number, or address, starting with zero

    Bytes are then aggregated into words (4 bytes), halfwords (2 bytes) and doublewords (8 bytes)

    One byte = eight bitsOne word = four bytes = 32 bits

    29

  • Main Storage OrganizationMain Storage OrganizationTypically, each of these aggregates is aligned on an address boundary which is evenly divisible by its size in bytes

    So, a word (32 bits) is aligned on a 4-byte boundary (addresses 0, 4, 8, 12, 16, 20, etc.)

    Remember, memory addresses refer to bytes, not bits or words

    30

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    Representing unsigned binary integers was fairly simple, but how can we include a sign?

    There are three ways we might represent signed integers, using a single bit as the sign (customarily the leftmost bit)

    Signed-magnitudeOnes' complementTwo's complement

    31

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    Signed-magnitude is the most familiar (+17, -391) and we will see later how this is used in z/Architecture

    Allocating an extra bit for the sign, since 910 = 10012, we would write

    +9 as 0 10012 and -9 as 1 10012

    32

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    The ones' complement of a number is found by replacing each 1 with 0 and each 0 with 1

    If we use one bit for the sign, then since 910 is 10012, we would write

    +9 as 0 10012 and -9 as 1 01102

    33

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    The two's complement representation is formed by taking the ones' complement and adding 1

    In this notation, again using one bit for the sign, we write

    +9 as 0 10012 and -9 as 1 01112

    34

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    In z/Architecture, a negative binary integer is represented by the two's complement of its positive value

    Note that zero is its own complement in this representation (no +0 or -0), since:Zero = 00000000 00000000 00000000 000000001s Comp. = 11111111 11111111 11111111 11111111 Plus 1 = 1Result = 00000000 00000000 00000000 00000000

    35

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    In a 32- bit word, signed integers are represented by using the first bit as a sign, followed by 31 bits of significance

    sbbbbbbb bbbbbbbb bbbbbbbb bbbbbbbb

    It is also possible to have signed integers represented as 8-bit bytes and 16-bit halfwords as well as 64-bit doublewords

    36

  • Representation of Signed Binary Representation of Signed Binary IntegersIntegers

    A word can contain non-negative integers (with sign bit = 0) in the range 0 +231-1 Negative integers (with sign bit = 1) in the range -231+1 -1 are formed by taking the two's complement of the number's absolute value

    Negative integer -231 is represented by 1000...0000 or, in hex, 80000000

    37

  • Representation of Signed Binary Representation of Signed Binary Integers: ExamplesIntegers: Examples

    N.B. -231 is not the two's complement of any positive integer

    In two's complement representation +1 = 00000000 00000000 00000000 00000001 -1 = 11111111 11111111 11111111 11111111

    Or, in the more commonly used hexadecimal +1 = 00000001 -1 = FFFFFFFF

    38

  • Integer Arithmetic Integer Arithmetic and Overflowand Overflow

    39

  • Let's look at examples of addition and subtraction using signed numbers in two's complement. These examples use only 4 bits, not 32, with the leftmost bit as sign.+3 = 0 011+2 = 0 010+5 0 101

    +3 = 0 011-2 = 1 110 (Two's complement of 0 010)+1 0 001 (The carry out is ignored)

    Arithmetic with Signed NumbersArithmetic with Signed Numbers

    40

  • Arithmetic with Signed NumbersArithmetic with Signed Numbers

    Now, how about -3 plus +2

    Notice that the sign is correct each time, and the result is in two's complement notation

    -3 = 1 101 +2 = 0 010 -1 1 111

    41

  • Arithmetic with Signed NumbersArithmetic with Signed Numbers

    Subtraction is performed by adding the two's complement of the subtrahend to the minuend. So +3 - +2 = +3 + (-2).

    +3 +3

  • Computer arithmetic using 32-bit words is a bit more complex, and is always shown in hex. Also, we will no longer display a separate sign bit (it will be part of the leftmost hex digit):

    00000011 AE223464 (what sign?) +0000010B +5FCA5243 0000011C 0DEC86A7

    Arithmetic with Signed NumbersArithmetic with Signed Numbers

    43

  • Subtraction is performed by adding the two's complement

    Carries out of the sign position are ignored (results are correct anyway)

    F89ABCDE F89ABCDE -6D4AFBC0 = +92B50440 8B4FC11E (is this correct?)

    Arithmetic with Signed NumbersArithmetic with Signed Numbers

    44

  • Overflow - Why Worry?Overflow - Why Worry?

    Internal data is limited in sizeAdding two big numbers can produce a number that is "too big" - then what?

    The machine records an overflow conditionEither the Condition Code (CC) is set (more on this later) or a Program Interrupt occursThe result often has the wrong sign

    Your programs will probably have to take steps to avoid or handle overflow

    45

  • OverflowOverflowWhat if two large numbers are added and the result is greater than 231-1 (or less than -231)?And how can we tell if this happened?

    In order to understand this, we will again demonstrate with our very small "words" of four bits, the first of which is the sign

    These "4-bit words" can handle integers in the range from -8 to +7 (1 000 to 0 111)

    46

  • OverflowOverflowNow let's see what happens when we try to add +5 to +4 (we'll do this in binary, using our four-bit words).

    Overflow will occur since the result is greater than +7.

    47

  • OverflowOverflowOverflow is detected by checking the carry into the sign position and the carry out of the sign position

    If they are not equal, overflow occurred and the result is invalid.

    48

  • Out In [not equal, so overflow occurred] \ / 01 00

  • OverflowOverflow

    But be very careful! The mainframe is a binary computer, not hexadecimal, so the check for overflow must be done using the binary representation - that is, we must look at bits, not hex digits

    So, if we add as follows... 1111... D13BCF24 D = 1101... +F3C12B97 F = 1111... 1100...

    50

  • OverflowOverflow

    ... we can see that overflow does not occur (1 in and 1 out)

    But if we make the mistake of checking the hex digits, we see what looks like overflow

    10 D1... +F3...

    51

  • Getting Started With Getting Started With ASSIST/IASSIST/I

    52

  • ASSIST/I FeaturesASSIST/I Features

    ASSIST/I is an integrated assembler and instruction interpreter, plus a text editor and interactive debugger

    There are built-in functions (X-instructions) for I/O and data conversion

    Program tracing lets you watch "everything" happen

    53

  • ASSIST/I FeaturesASSIST/I FeaturesIt is a useful tool for getting started and "tinkering" on a PC without needing any host-system access

    A User Guide is included in the "Starter Kit" handout

    And it's free!

    54

  • ASSIST/I LimitationsASSIST/I Limitations

    ASSIST/I supports only an older, less-rich instruction set

    Modern assembler features are missing

    Programming style may be less robust than desired

    55

  • ASSIST/I LimitationsASSIST/I LimitationsText editor functions are rather awkward

    It may be easier to use a simple PC editor such as Notepad

    System macros aren't available

    56

  • Getting Started with ASSIST/IGetting Started with ASSIST/IEasiest: run everything from the CD or hard drive

    Change your disk drive to D: (or other appropriate drive letter) and your working directory to \BootAsst\Enter CAS, and follow the prompts to run program DEMOA.ASMLater, we'll step through its execution and show how to create a .PRT file

    Try some of the other DEMO programs57