.ORIG x3000
LEA R2 Stack ; R2 will be Top
LD R3 Size
ADD R2 R2 R3
Start
JSR PrintNL
JSR PrintNL
LEA R0 Choice1
TRAP x22
JSR PrintNL
LEA R0 Choice2
TRAP x22
JSR PrintNL
LEA R0 Choice0
TRAP x22
JSR PrintNL
LEA R0 Choice
TRAP x22
TRAP x20 ; input user choice
TRAP x21
LD R1 Zero NOT R1 R1 ADD R1 R1 #1
ADD R1 R0 R1
BRz Done
LD R1 One NOT R1 R1 ADD R1 R1 #1
ADD R1 R0 R1
BRz ChoiceOne
LD R1 Two NOT R1 R1 ADD R1 R1 #1
ADD R1 R0 R1
BRz ChoiceTwo
JSR PrintNL
LEA R0 InvldInpt
TRAP x22
BR Start
Done
JSR PrintNL
LEA R0 Greeting
TRAP x22
HALT
ChoiceOne
JSR Push
BR Start
ChoiceTwo
JSR Pop
BR Start
Push
add r6 r7 #0
LEA R0 Stack
NOT R0 R0 ADD R0 R0 #1
ADD R0 R2 R0
BRn Overflow
JSR PrintNL
LEA R0 InputStr
TRAP x22
TRAP x20
TRAP x21
STR R0 R2 #0
JSR PrintNL
LEA R0 PushMsg
TRAP X22
LDR R0 R2 #0
TRAP x21
ADD R2 R2 #-1 ; decrement top pointer
add r7 r6 #0
RET
Overflow
add r6 r7 #0
JSR PrintNL
LEA R0 OverflowMsg
TRAP x22
add r7 r6 #0
RET
Pop
add r6 r7 #0
LEA R0 Stack
ADD R0 R0 R3
NOT R0 R0 ADD R0 R0 #1
ADD R0 R2 R0
BRz Underflow
JSR PrintNL
LEA R0 OutputStr
TRAP x22
add R2 R2 #1
LDR R0 R2 #0
TRAP x21
add r7 r6 #0
RET
Underflow
add r6 r7 #0
JSR PrintNL
LEA R0 UnderflowMsg
TRAP x22
add r7 r6 #0
RET
PrintNL
add r5 r7 #0
AND R0 R0 #0
ADD R0 R0 #10
TRAP x21
add r7 r5 #0
RET
Zero .FILL x30
One .FILL x31
Two .FILL x32
Size .FILL #3
Stack .BLKW #4
Choice1 .STRINGZ "1 for Push"
Choice2 .STRINGZ "2 for Pop"
Choice0 .STRINGZ "0 for Exit"
Choice .STRINGZ "Enter Your choice: "
Greeting .STRINGZ "Thanks for Using Stack"
InputStr .STRINGZ "Input Character to Push: "
PushMsg .STRINGZ "Pushed Character is: "
OutputStr .STRINGZ "Popped Character is: "
OverflowMsg .STRINGZ "Overflow Occurs"
UnderflowMsg .STRINGZ "Underflow Occurs"
InvldInpt .STRINGZ "Wrong Choice, Please try again"
.END
LEA R2 Stack ; R2 will be Top
LD R3 Size
ADD R2 R2 R3
Start
JSR PrintNL
JSR PrintNL
LEA R0 Choice1
TRAP x22
JSR PrintNL
LEA R0 Choice2
TRAP x22
JSR PrintNL
LEA R0 Choice0
TRAP x22
JSR PrintNL
LEA R0 Choice
TRAP x22
TRAP x20 ; input user choice
TRAP x21
LD R1 Zero NOT R1 R1 ADD R1 R1 #1
ADD R1 R0 R1
BRz Done
LD R1 One NOT R1 R1 ADD R1 R1 #1
ADD R1 R0 R1
BRz ChoiceOne
LD R1 Two NOT R1 R1 ADD R1 R1 #1
ADD R1 R0 R1
BRz ChoiceTwo
JSR PrintNL
LEA R0 InvldInpt
TRAP x22
BR Start
Done
JSR PrintNL
LEA R0 Greeting
TRAP x22
HALT
ChoiceOne
JSR Push
BR Start
ChoiceTwo
JSR Pop
BR Start
Push
add r6 r7 #0
LEA R0 Stack
NOT R0 R0 ADD R0 R0 #1
ADD R0 R2 R0
BRn Overflow
JSR PrintNL
LEA R0 InputStr
TRAP x22
TRAP x20
TRAP x21
STR R0 R2 #0
JSR PrintNL
LEA R0 PushMsg
TRAP X22
LDR R0 R2 #0
TRAP x21
ADD R2 R2 #-1 ; decrement top pointer
add r7 r6 #0
RET
Overflow
add r6 r7 #0
JSR PrintNL
LEA R0 OverflowMsg
TRAP x22
add r7 r6 #0
RET
Pop
add r6 r7 #0
LEA R0 Stack
ADD R0 R0 R3
NOT R0 R0 ADD R0 R0 #1
ADD R0 R2 R0
BRz Underflow
JSR PrintNL
LEA R0 OutputStr
TRAP x22
add R2 R2 #1
LDR R0 R2 #0
TRAP x21
add r7 r6 #0
RET
Underflow
add r6 r7 #0
JSR PrintNL
LEA R0 UnderflowMsg
TRAP x22
add r7 r6 #0
RET
PrintNL
add r5 r7 #0
AND R0 R0 #0
ADD R0 R0 #10
TRAP x21
add r7 r5 #0
RET
Zero .FILL x30
One .FILL x31
Two .FILL x32
Size .FILL #3
Stack .BLKW #4
Choice1 .STRINGZ "1 for Push"
Choice2 .STRINGZ "2 for Pop"
Choice0 .STRINGZ "0 for Exit"
Choice .STRINGZ "Enter Your choice: "
Greeting .STRINGZ "Thanks for Using Stack"
InputStr .STRINGZ "Input Character to Push: "
PushMsg .STRINGZ "Pushed Character is: "
OutputStr .STRINGZ "Popped Character is: "
OverflowMsg .STRINGZ "Overflow Occurs"
UnderflowMsg .STRINGZ "Underflow Occurs"
InvldInpt .STRINGZ "Wrong Choice, Please try again"
.END
No comments:
Post a Comment