ENEE350 Computer Organization Lecture-4 Return to lecture notes
Assembly Language Programming in VESP
Aritmetic and logic operations
Conditional jumps
Memory Reference
         
Example-1:  addition: A + B
         
         

0000--add

- Add B to A and leave the result in A

7000 --hlt

- Halt

Example-2: subtraction: B-A

1000-cmp

-Complement A

0000-add

- Add B to A and leave the result in A

2001; 0001

- lda- Load 1 into B

0000-add

- Add B to A and leave the result in A (increment A)

Example-3: Conditional jump

Loc 0: 5006-jez

-Jump to location 6 if A = 0

Loc 1: 6008-jps

-Jump to location 8 if A > 0

Loc 2: 7000

-Halt

Loc 6: 2005; 0002

Loc 7: 7000

Loc 8: 7000

Example-4: Memory Reference

Loc 0: 3000; 0001

-Move B to A

Loc 1: 3001; 0000

-Move A to B

Loc 2: 3000;000A

-Move the word into A

A straightline vesp program that adds the 4 numbers in locations 2 through 5, and stores the sum in ox0080. (Its entry, and execution over vesp.)
Location 0100: 2002----load 7 into location 2 Location 0101: 0007 Location 0102: 2003----load 15 into location 3 Location 0103: 000F Location 0104: 2004----load 2 into location 4 Location 0105: 0002 Location 0106: 2005----load -31 into location 5 Location 0107: FFE1 Location 0108: 3000----move the contents of location 2 into A Location 0109: 0002 Location 010A: 3001----move the contents of locations 3 into B Location 010B: 0003 Location 010C: 0000----add A and B and save the result in A Location 010D: 3001----move the contents of location 4 into B Location 010E: 0004 Location 010F: 0000----add A and B and the save the result in A Location 0110: 3001----move the contents of location 5 into B Location 0111: 0005 Location 0112: 0000----add A and B and the save the result in A Location 0113: 3080----move the contents of A into location 80 Location 0114: 0000 Location 0115: 7000 Enter 0 if you wish to execute the program, 1 to step it,2 to exit to the main menu: 0 Machine Cycle 1: PC = 100, FETCH SUBCYCLE MAR = 0100, IR = 2002, Clock cycle = 2 DECODE SUBCYCLE The decoded instruction is: LDA Clock cycle = 2 EXECUTE SUBCYCLE Clock cycle = 3 A = 0000, B = 0000, Z = 0, S = 0, C = 0, F = 0 MAR = 0100, PC = 0102, IR = 2002, reset = 0 add = 0 complement = 0 Memory[0002] = 0007, Machine Cycle 2: PC = 102, FETCH SUBCYCLE MAR = 0102, IR = 2003, Clock cycle = 5 DECODE SUBCYCLE The decoded instruction is: LDA Clock cycle = 5 EXECUTE SUBCYCLE Clock cycle = 6 A = 0000, B = 0000, Z = 0, S = 0, C = 0, F = 0 MAR = 0102, PC = 0104, IR = 2003, reset = 0 add = 0 complement = 0 Memory[0003] = 000F, Machine Cycle 3: PC = 104, FETCH SUBCYCLE MAR = 0104, IR = 2004, Clock cycle = 8 DECODE SUBCYCLE The decoded instruction is: LDA Clock cycle = 8 EXECUTE SUBCYCLE Clock cycle = 9 A = 0000, B = 0000, Z = 0, S = 0, C = 0, F = 0 MAR = 0104, PC = 0106, IR = 2004, reset = 0 add = 0 complement = 0 Memory[0004] = 0002, Machine Cycle 4: PC = 106, FETCH SUBCYCLE MAR = 0106, IR = 2005, Clock cycle = 11 DECODE SUBCYCLE The decoded instruction is: LDA Clock cycle = 11 EXECUTE SUBCYCLE Clock cycle = 12 A = 0000, B = 0000, Z = 0, S = 0, C = 0, F = 0 MAR = 0106, PC = 0108, IR = 2005, reset = 0 add = 0 complement = 0 Memory[0005] = FFE1, Machine Cycle 5: PC = 108, FETCH SUBCYCLE MAR = 0108, IR = 3000, Clock cycle = 14 DECODE SUBCYCLE The decoded instruction is: MOV Clock cycle = 14 EXECUTE SUBCYCLE Clock cycle = 16 A = 0007, B = 0000, Z = 0, S = 0, C = 0, F = 0 MAR = 0108, PC = 010A, IR = 3000, reset = 0 add = 0 complement = 0 Memory[0000] = 0007, Machine Cycle 6: PC = 10A, FETCH SUBCYCLE MAR = 010A, IR = 3001, Clock cycle = 18 DECODE SUBCYCLE The decoded instruction is: MOV Clock cycle = 18 EXECUTE SUBCYCLE Clock cycle = 20 A = 0007, B = 000F, Z = 0, S = 0, C = 0, F = 0 MAR = 010A, PC = 010C, IR = 3001, reset = 0 add = 0 complement = 0 Memory[0001] = 000F, Machine Cycle 7: PC = 10C, FETCH SUBCYCLE MAR = 010C, IR = 0000, Clock cycle = 22 DECODE SUBCYCLE The decoded instruction is: ADD Clock cycle = 22 EXECUTE SUBCYCLE Clock cycle = 23 A = 0016, B = 000F, Z = 0, S = 0, C = 0, F = 0 MAR = 010C, PC = 010D, IR = 0000, reset = 0 add = 1 complement = 0 Machine Cycle 8: PC = 10D, FETCH SUBCYCLE MAR = 010D, IR = 3001, Clock cycle = 25 DECODE SUBCYCLE The decoded instruction is: MOV Clock cycle = 25 EXECUTE SUBCYCLE Clock cycle = 27 A = 0016, B = 0002, Z = 0, S = 0, C = 0, F = 0 MAR = 010D, PC = 010F, IR = 3001, reset = 0 add = 0 complement = 0 Memory[0001] = 0002, Machine Cycle 9: PC = 10F, FETCH SUBCYCLE MAR = 010F, IR = 0000, Clock cycle = 29 DECODE SUBCYCLE The decoded instruction is: ADD Clock cycle = 29 EXECUTE SUBCYCLE Clock cycle = 30 A = 0018, B = 0002, Z = 0, S = 0, C = 0, F = 0 MAR = 010F, PC = 0110, IR = 0000, reset = 0 add = 1 complement = 0 Machine Cycle A: PC = 110, FETCH SUBCYCLE MAR = 0110, IR = 3001, Clock cycle = 32 DECODE SUBCYCLE The decoded instruction is: MOV Clock cycle = 32 EXECUTE SUBCYCLE Clock cycle = 34 A = 0018, B = FFE1, Z = 0, S = 0, C = 0, F = 0 MAR = 0110, PC = 0112, IR = 3001, reset = 0 add = 0 complement = 0 Memory[0001] = FFE1, Machine Cycle B: PC = 112, FETCH SUBCYCLE MAR = 0112, IR = 0000, Clock cycle = 36 DECODE SUBCYCLE The decoded instruction is: ADD Clock cycle = 36 EXECUTE SUBCYCLE Clock cycle = 37 A = FFF9, B = FFE1, Z = 0, S = 1, C = 0, F = 0 MAR = 0112, PC = 0113, IR = 0000, reset = 0 add = 1 complement = 0 Machine Cycle C: PC = 113, FETCH SUBCYCLE MAR = 0113, IR = 3080, Clock cycle = 39 DECODE SUBCYCLE The decoded instruction is: MOV Clock cycle = 39 EXECUTE SUBCYCLE Clock cycle = 41 A = FFF9, B = FFE1, Z = 0, S = 1, C = 0, F = 0 MAR = 0113, PC = 0115, IR = 3080, reset = 0 add = 0 complement = 0 Memory[0080] = FFF9, Machine Cycle D: PC = 115, FETCH SUBCYCLE MAR = 0115, IR = 7000, Clock cycle = 43 DECODE SUBCYCLE The decoded instruction is: HLT Clock cycle = 43 EXECUTE SUBCYCLE Clock cycle = 44 A = FFF9, B = FFE1, Z = 0, S = 1, C = 0, F = 0 MAR = 0115, PC = 0116, IR = 7000, reset = 1 add = 0 complement = 0 The number of instructions executed = 13 The number of clock cycles used = 44 Type 0 to enter a program 1 to display registers 2 to display memory: 2 Enter the first address (3 hex digits): 080 Enter the last address: (3 hex digits): 080 Location 0080 : FFF9 Type 0 to enter a program 1 to display registers 2 to display memory: a Example-6: Looping (Using direct addressing- self-modifying code) High Level Representation int loopcount = 6; int sum,y[7],i; y[0] = 15; y[1] = 23; y[2] = -14; y[3] = 7; y[4] = 126;y[5] = 89; sum = 0; for(i = 1; i <= loopcount;i++) { sum = sum + y[i];} Translating from C into Vesp. Location 000: A Location 001: B Location 002: sum (cleared to 0) Location 003: loop count (initialized to 6) Location 004: index-i(initialized to the address of the 1st element of the list(location 5). Location 005: y[0] Location 006: y[1] Location 007: y[2] location 008: y[3] location 009: y[4] location 00A: y[5] location 00B: Not used location 00C: Not used . . . location 1FF: Not used location : Program begins here // (Load operands) 200 2005 Load 201 000F 15 202 2006 Load 203 0017 23 204 2007 Load 205 FFF2 -14 206 2008 Load 207 0007 7 208 2009 Load 209 007E 126 20A 200A Load 20B 0059 89 // (Clear sum) 20C 2002 20D 0000 // (Set loopcount to 6) 20E 2003 20F 0006 // (Set list index to 5) 210 2004 211 0005 // (check if the loopcount is equal to 0 ) 212 3000 move loopcount into A 213 0003 loopcount's address 214 5hhh jump to halt if A = 0 (22B) 215 2001 load -1 into B 216 FFFF -1 217 0000 add 218 3003 save loopcount 219 0000 A's address // (perform sum = sum + y[i]) 21A 321D move index i into 21D 21B 0004 21C 3001 move y[i] into B 21D zzzz this is the index i 21E 3000 move sum into A 21F 0002 sum's address 220 0000 add 221 3002 save sum 222 0000 A 223 3000 move index i into A 224 021D index i's address 225 2001 load 1 into B 226 0001 1 227 0000 add 228 3004 save i+1 into index 229 0000 22A 4212 jump back to location 212. 22B 7000 halt Another version-loaded at location 30. 2020 //Address: 30 Load numbers 000F //Address: 31 2021 //Address: 32 0017 //Address: 33 2022 //Address: 34 00F9 //Address: 35 2023 //Address: 36 0007 //Address: 37 2024 //Address: 38 007D //Address: 39 2025 //Address: 3A 0059 //Address: 3B End load numbers 2002 //Address: 3C Initialize loop-count to 6 0006 //Address: 3D 2008 //Address: 3E Initialize index to 20 0020 //Address: 3F 3000 //Address: 40 Move operand to Register-A 0020 //Address: 41 030A //Address: 42 Save sum 0000 //Address: 43 3000 //Address: 44 Load loop count 0002 //Address: 45 2001 //Address: 46 Load -1 into Register-B FFFF //Address: 47 0000 //Address: 48 Add 3002 //Address: 49 Save loop counter 0000 //Address: 4A 505B //Address: 4B Jump to Halt if loop-count = 0 3000 //Address: 4C Move index to Register-A 0008 //Address: 4D 2001 //Address: 4E Load 1 into Register-B 0001 //Address: 4F 0000 //Address: 50 Increment index by 1 3008 //Address: 51 Save index 0000 //Address: 52 3058 //Address: 53 Copy index into code 0000 //Address: 54 3000 //Address: 55 Move sum into Register-A 000A //Address: 56 3001 //Address: 57 Move operand into Register-B xxxx //Address: 58 0000 //Address: 59 Add 4042 //Address: 5A Jump back to save sum 7000 //Address: 5B Halt

vesp 1.0

sample output

vesp 1.1

sample output

Return to lecture notes