(i)               (ii)              (iii)
    1000 0110         1000 0111          1000 1111    
   +0000 0101        +1111 1110         +1000 0000
    ---------         ---------          ---------
    
    
[B2.] Assembly Language Programming and the Assembly Process
L0:       LODD a0
          SUBD a1
          JPOS L2
          JZER L2
L1:       LOCO 1 
          STOD a2
          JUMP L3
L2:       LOCO 0
          STOD a2
L3:     ...
    
a0, a1, ..., a10 will be at addresses 500Hex, 501Hex, 
    ...50AHex. 
    
[B3.] Input-Output, and Subprogam Handling
Mac-1a uses memory-mapped input-output, wherby some memory cells are mapped to input-output ports; for simplicity we assume that there are only two ports, one connected to a standard-input device, another connected to a standard-output device.Input: data port is mapped to 4092/FFCHex (lower-order byte = data byte); status port is mapped to 4093/FFDHex, when the sign bit (most significant bit) is set, this denotes data available.
Output: data port is mapped to 4094/FFEHex (lower-order byte); status 4095/FFFHex; sign bit set denotes ready ...
Briefly, explain the principle used in both read and write operations.
call and retn; you should mention 
    the roles of the stack and stack pointer; illustrate your answer with 
    appropriate examples / diagrams. In your answer please mention the major 
    reasons why call and retn cannot be replaced by 
    simple jump instructions. 
    
          int max(int x, int y)
          {
            if (x > y) return x;
            else return y;
          }
    and the call: c = max(a, b); 
    
Pay particular attention to: (i) in the calling program, how to pass the 
    two arguments via the stack, and how to call the subprogram; (ii) in 
    subprogram max itself, how to access the two parameters 
    x, y. Hint: lodl, and subl - for the 
    comparison. 
    
Appendix 1.1, Mac-1a Instruction Set - limited version of Mac-1, with machine code
------------------------------------------------------------------- Binary Mnemonic Name Action(s) ------ -------- ---- --------- -------------------------------------------------------------------- 0000XXXXXXXXXXXX lodd Load Direct ac <- m[x] 0001XXXXXXXXXXXX stod Store Direct m[x] <- ac 0010XXXXXXXXXXXX addd Add Direct ac<- ac + m[x] 0011XXXXXXXXXXXX subd Subtract Direct ac <- ac - m[x] 0100XXXXXXXXXXXX jpos Jump on pos. IF ac>=0 : pc <- x 0101XXXXXXXXXXXX jzer Jump on zero IF ac=0 : pc <- x 0110XXXXXXXXXXXX jump Jump uncond. pc <- x (0 <= x <=4095) 0111CCCCCCCCCCCC loco Load constant ac <- c (0 <= c <=4095) --------------------------------------------------------------------
Appendix 1.2, Complete Mac-1 Instruction Set
Mnemonic  Name                Action(s)
--------  ----                ---------
lodd x    Load Direct         ac <- m[x]
stod x    Store Direct        m[x] <- ac
addd x    Add Direct          ac<- ac + m[x]
subd x    Sub. Direct         ac <- ac - m[x]
jpos x    Jump on pos.        IF ac>=0 : pc <- x
jzer x    Jump on zero        IF ac=0 : pc <- x
jump x    Jump uncond.        pc <- x (0 <= x <=4095)
loco c    Load constant       ac <- c (0<=c<=4095)
lodl x    Load local          ac <- m[sp+x]
stol x    Store local         m[sp+x] <- ac
addl x    Add local           ac <- ac + m[sp+x]
subl x    Subtract local      ac <- ac - m[sp+x]
jneg x    Jump on negative    if ac<0 : pc <- x
jnze x    Jump on nonzero     if ac!=0 : pc <- x
call x    Call procedure      sp<-sp-1; m[sp] <- pc; pc <- x
pshi      Push indirect       sp <- sp-1; m[sp]<-m[ac]
popi      Pop indirect        m[ac] <- m[sp]; sp <- sp+1
push      Push onto stack     sp <- sp-1; m[sp] <- ac
pop       Pop off stack       ac <- m[sp]; sp <- sp+1
retn      Return from proc.   pc <- m[sp]; sp <- sp + 1
swap      Swap ac, pc         temp <- ac; ac <- sp; sp<-temp
insp y    Increment sp        sp <- sp + y; (0 <= y <= 255)
desp y    Decrement sp        sp <- sp - y; (0 <= y <= 255)
Notes:  1. c is a constant in range 0 - 4095
        2. x is an address in range 0 - 4095
        3. y is an address offset in range 0 - 255
Appendix 2, Equivalences of Boolean Algebra