การบ้านครั้งที่ 1

วิชา Computer Architecture

 

จงหาค่า (-a^3/b) + (-b^3/a) โดย
a, b รับมาจาก keyboard และเป็นได้ทั้งบวกและลบ

 

46010514 นายพาศน์ ปัทมเบญจกุล  [email protected]      09-011-6230
46010555 นายภักดิ์ทูล ใจทอง [email protected]      09-6317459

46010574 นายภาณุพงษ์ ขันต้นธง [email protected] 09-810-8876

Source Code ภาษา MARIE

/=========MAIN PROGRAM==========/ MAIN(){

                INPUT

                SKIPCOND           500

                JUMP                     KEEPA 

                HALT

KEEPA, STORE                   A             /                               CIN >> A;

                INPUT

                SKIPCOND           500

                JUMP                     KEEPB

                HALT

KEEPB,  STORE                   B             /                               CIN >> B;

                LOAD                    A

                STORE                   VAR1     /                               VAR1 = A;

                LOAD                    NUM

                STORE                   VAR2     /                               VAR2 = 3;

                JUMP                     POW                      

RETPOW,              LOAD                    ANS        /                               ANS = POW(VAR1,VAR2);

                OUTPUT                                               /                               COUT << ANS;

                STORE                   VAR1     /                               VAR1 = ANS;

                LOAD                    B

                STORE                   VAR2     /                               VAR2 = B;

                JUMP                     DIV        

RETDIV,                LOAD                    ANS        /                               ANS = DIV(VAR1,VAR2);

                STORE                   TEMP1   /                               TEMP1 = ANS;

                LOAD                    CLR

                SUBT                     TEMP1

                STORE                   TEMP1   /                               TEMP1 = 0 - TEMP1;

                OUTPUT

/==========PART 2===============/

                LOAD                    B

                STORE                   VAR1     /                               VAR1 = B;

                LOAD                    NUM

                STORE                   VAR2     /                               VAR2 = 3;

                JUMP                     POW

RETPOW2,            LOAD    ANS       

                OUTPUT

                STORE                   VAR1     /                               VAR1 = ANS;

                LOAD                    A

                STORE                   VAR2     /                               VAR2 = A;

                JUMP                     DIV

RETDIV2,              LOAD    ANS        /                               ANS = DIV(VAR1,VAR2);

                STORE                   TEMP2   /                               TEMP2 = ANS;

                LOAD                    CLR

                SUBT                     TEMP2

                STORE                   TEMP2   /                               TEMP2 = 0 - TEMP2;

                OUTPUT                              

                LOAD                    TEMP1

                ADD                       TEMP2

                STORE                   SUM       /                               SUM = TEMP1 + TEMP2;

                OUTPUT

                HALT                                     /               }

/=========END PROGRAM===========/

 

/========POWER FUNCTION=========/  INT POW(VAR1,VAR2){

POW,      LOAD                    ONE

                STORE                   PROD     /                               PROD = 1;

                LOAD                    VAR2    

                STORE                   COUNTPOW/                       COUNTPOW = VAR2;

                LOAD                    VAR1

                STORE                   VAR2     /                               VAR2 = VAR1;                    

POW1,    LOAD                    COUNTPOW

                SKIPCOND           800          /                               WHILE(COUNTPOW > 0){

                JUMP                     OUTPOW

                LOAD                    PROD

                STORE                   VAR1     /                                               VAR1 = PROD;

                JUMP                     MUL                                                      

RETMUL,              LOAD                    ANS

                STORE                   PROD     /                                               PROD = MUL(VAR1,VAR2);

                LOAD                    COUNTPOW

                SUBT                     ONE                                                      

                STORE                   COUNTPOW/                                       COUNTPOW--;

                JUMP                     POW1     /                               }

OUTPOW,             LOAD                    PROD

                STORE                   ANS        /                               ANS = PROD;

                LOAD                    CPJ

                SKIPCOND           500          /                               IF(CPJ > 0)

                JUMP                     RETPOW2                                                             JUMP RETPOW2;

                LOAD                    CPJ                                         ELSE{

                ADD                       ONE                                                       CPJ++;

                STORE                   CPJ        

                JUMP                     RETPOW               /                                               JUMP RETPOW;}

/=========END FUNCTION==========/   }

 

/======MULTIPLY FUNCTION========/  INT MUL(VAR1,VAR2){

MUL,      LOAD                    CLR                       

                STORE                   SUM       /                               SUM = 0;                               

                LOAD                    VAR2

                SKIPCOND           000          /                               IF(VAR2 < 0){

                JUMP                     POS

                LOAD                    CLR       

                SUBT                     VAR2     /                                               VAR2 = 0 - VAR2;

                STORE                   VAR2    

                LOAD                    CLR       

                SUBT                     VAR1     /                                               VAR1 = 0 - VAR1;

                STORE                   VAR1     /                               }

POS,       LOAD                    VAR2

                STORE                   COUNTMUL/                       COUNTMUL = VAR2;

MUL1,    LOAD                    COUNTMUL

                SKIPCOND           800          /                               WHILE(COUNTMUL > 0){

                JUMP                     OUTMUL             

                LOAD                    SUM

                ADD                       VAR1    

                STORE                   SUM       /                                               SUM += VAR1;

                LOAD                    COUNTMUL

                SUBT                     ONE                      

                STORE                   COUNTMUL/                                       COUNT--;

                JUMP                     MUL1     /                               }                             

OUTMUL,             LOAD                    SUM

                STORE                   ANS        /                               ANS = SUM;

                JUMP                     RETMUL               /                               RETURN ANS;

/=========END FUNCTION==========/   }

 

/========DIVIDE FUNCTION========/    INT DIV(VAR1,VAR2){

DIV,        LOAD                    CLR

                STORE                   COUNTDIV/                         COUNTDIV = 0;

                LOAD                    ONE

                STORE                   CARRY  /                               CARRY = 1;

                LOAD                    VAR2

                SKIPCOND           000          /                               IF(VAR2 < 0){

                JUMP                     DIV1

                LOAD                    CLR       

                SUBT                     VAR2     /                                               VAR2 = 0 - VAR2;

                STORE                   VAR2    

                LOAD                    CLR       

                SUBT                     CARRY

                STORE                   CARRY  /                                               CARRY = 0 - CARRY;

DIV1,      LOAD                    VAR1     /                               }

                SKIPCOND           000          /                               IF(VAR1 < 0){

                JUMP                     DIV2

                LOAD                    CLR

                SUBT                     VAR1     /                                               VAR1 = 0 - VAR1;

                STORE                   VAR1

                LOAD                    CLR

                SUBT                     CARRY

                STORE                   CARRY  /                                               CARRY = 0 - CARRY;

DIV2,      LOAD                    VAR1     /                               }

                SKIPCOND           800          /                               WHILE(VAR1 > 0){

                JUMP                     OUTDIV

                LOAD                    VAR1    

                SUBT                     VAR2

                STORE                   VAR1     /                                               VAR1 -= VAR2;

                SKIPCOND           000

                JUMP                     DIV3

                JUMP                     DIV2       /                                               IF(VAR1 < 0)

DIV3,      LOAD                    COUNTDIV

                ADD                       CARRY

                STORE                   COUNTDIV/                                                         COUNTDIV = COUNTDIV + CARRY;

                JUMP                     DIV2       /                               }                             

OUTDIV,               LOAD                    COUNTDIV

                STORE                   ANS        /                               ANS = COUNTDIV;

                LOAD                    CDJ

                SKIPCOND           500          /                               IF(CDJ > 0)

                JUMP                     RETDIV2                                                               JUMP RETDIV2;

                LOAD                    CDJ                                         ELSE{

                ADD                       ONE                                                       CDJ++;

                STORE                   CDJ                                                        

                JUMP                     RETDIV /                                               JUMP RETDIV;}                 

/=========END FUNCTION==========/   }

 

/=======DECLARE VARIABLE========/

A,                            DEC        0

B,                            DEC        0

VAR1,                    DEC        0

VAR2,                    DEC        0

ANS,                       DEC        0

TEMP1,                  DEC        0

TEMP2,                  DEC        0

SUM,                      DEC        0

PROD,                    DEC        0

COUNTMUL,       DEC        0

COUNTPOW,       DEC        0

COUNTDIV,         DEC        0

CPJ,                        DEC        0

CDJ,                        DEC        0

CLR,                       DEC        0             

NUM,                     DEC        3

ONE,                      DEC        1

CARRY,                 DEC        1

 

Flow Chart Main Program

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

อธิบาย  Flow Chart Main Program

จากสมการ (-a^3/b) + (-b^3/a) แบ่งสมการออกเป็น 2 ส่วนือ (-a^3/b) และ (-b^3/a)

ส่วนที่ 1 (-a^3/b) มีกระบวนการการคำนวณดังนี้

1) เริ่มด้วยการรับค่า a  และ bจาก keyboard โดยมีค่าได้ทั้ง บวก และ ลบและทำการตรวจว่า มีค่าเท่ากับ 0 หรือไม่ ถ้าใช่ให้ยุดการทำงานทันที

2) กำหนดตัวแปร VAR1 โดยให้มีค่าเท่ากับ a เพื่อเข้าสู่ Function ยกกำลัง 3 ต่อไป

3) เมื่อเข้าสู่ Function ยกกำลัง 3 จะได้ค่า return กลับมาในตัวแปร ANS ซึ่งมีค่าเท่ากับ VAR1^3 (จะได้ a^3)

4) ตรวจสอบค่าของตัวแปร CPJ > 0(กำหนดให้เริ่มโปรแกรมมีค่าเท่ากับ 0) จะได้ค่าเป็น False

5) ทำการเพิ่มค่า CPJ อีก 1 ดังนั้น่า CPJ จะเท่ากับ 1 และให้ค่า ANS(a^3) เก็บไว้ที่ตัวแปร VAR1 และให้ VAR2 เก็บค่าของ b ไว้ เพื่อเข้าสู่ Function หาร่อไป

6) เมื่อเข้าสู่ Function หาร จะได้ค่า return กลับมาในตัวแปร ANS ซึ่งมีค่าเท่ากับ VAR1 / VAR2 (จะได้ a^3 / b)

7) ตรวจสอบค่าของตัวแปร CDJ > 0 (กำหนดให้เริ่มโปรแกรมมีค่าเท่ากับ 0) จะได้ค่าเป็น False

8) ทำการเพิ่มค่า CDJ อีก 1 ดังนั้น่า CDJ จะเท่ากับ 1 และให้ตัวแปร TEMP1 เก็บค่าของ ANS ( a^3 / b) และ ทำการกลับค่าของ TEMP1 ให้มีค่าตรงกันข้ามามสมการ (–a^3 / b)

ส่วนที่ 2 (-b^3/a) มีกระบวนการการคำนวณดังนี้

9) กำหนดตัวแปร VAR1 โดยให้มีค่าเท่ากับ b เพื่อเข้าสู่ Function ยกกำลัง 3 ต่อไป

10) เมื่อเข้าสู่ Function ยกกำลัง 3 จะได้ค่า return กลับมาในตัวแปร ANS ซึ่งมีค่าเท่ากับ VAR1^3 (จะได้ b^3)

11) ตรวจสอบค่าของตัวแปร CPJ > 0(จากการเพิ่มค่า CPJ ดังนั้น CPJ จะเท่ากับ 1) จะได้ค่าเป็น True

12) ให้ค่า ANS(b^3) เก็บไว้ที่ตัวแปร VAR1 และให้ VAR2 เก็บค่าของ a ไว้ เพื่อเข้าสู่ Function หาร่อไป

13) เมื่อเข้าสู่ Function หาร จะได้ค่า return กลับมาในตัวแปร ANS ซึ่งมีค่าเท่ากับ VAR1 / VAR2 (จะได้ b^3 / a)

14) ตรวจสอบค่าของตัวแปร CDJ > 0 (จากการเพิ่มค่า CDJ ดังนั้น CDJ จะเท่ากับ 1) จะได้ค่าเป็น True

15) ให้ตัวแปร TEMP2 เก็บค่าของ ANS ( b^3 / a) และ ทำการกลับค่าของ TEMP2 ให้มีค่าตรงกันข้ามามสมการ (–b^3 / a)

16) นำค่า ของ TEMP1(-a^3 / b) บวกกับค่าของ TEMP2(-b^3 / a) เก็บไว้ในตัวแปร SUM ซึ่งเป็นไปตามสมการ (-a^3/b) +

 (-b^3/a) และแสดง OUTPUT ออกทางจอภาพละบการทำงาน

 

 

 

 

 

 

Flow Chart Function ยกกำลัง 3

อธิบาย  Flow Chart Function ยกกำลัง 3

1)       กำหนดให้ function ยกกำลัง 3 หาค่าของ VAR1^3 โดยการ pass ค่าเข้าสู่ function โดยกำหนดให้ PROD = 1 , COUNTPOW = 3 (เลขชี้กำลัง) และ VAR2 เก็บค่าอง VAR1 ไว้

2)       Function ยกกำลังจะให้หลักการที่ว่า VAR1^3 = VAR1 * VAR1 * VAR1 และการคูณเกิดากการบวกกันซ้ำ VAR1 ครั้งามารถแจกแจงได้เป็น

      VAR1^3 = (VAR1+VAR1+…..+Var1)+ (VAR1+VAR1+…..+Var1)+….+ (VAR1+VAR1+…..+Var1)

                        |---------VAR1 ตัว------------|

                        |----------------------------------------------VAR1 ตัว----------------------------------------------------|

3)       รอบที่ 1 เลขชี้กำลังเท่ากับ 3 ให้ VAR1 = PROD (1) ค่า SUM = 0 และ COUNTMUL = VAR2 (VAR1 ที่ Pass เข้ามา) ทำการบวกกันซ้ำๆ ในรูปของ (VAR1+VAR1+….+VAR1) จำนวน VAR2 ครั้ง แล้วเก็บไว้ในค่า SUM โดย เมื่อบวกครบ VAR2 รอบ จะได้ค่า SUM = 1 * VAR2(ค่าที่ pass เข้ามา VAR1) = VAR1 แล้วนำตัวแปร PROD มาเก็บค่าผลบวกรวมที่ได้ (เดิมเป็น 1)

4)       รอบที่ 2 เลขชี้กำลังเท่ากับ 2 ให้ VAR1 = PROD (SUM) ค่า SUM = 0 และ COUNTMUL = VAR2 (VAR1 ที่ Pass เข้ามา) ทำการบวกกันซ้ำๆ ในรูปของ (VAR1+VAR1+….+VAR1) จำนวน VAR2 ครั้ง แล้วเก็บไว้ในค่า SUM โดย เมื่อบวกครบ VAR2 รอบ จะได้ค่า SUM = VAR1 * VAR2(ค่าที่ pass เข้ามา VAR1) = VAR1^2 แล้วนำตัวแปร PROD มาเก็บค่าผลบวกรวมที่ได้ (เดิมเป็น VAR1)

5)       รอบที่ 3 เลขชี้กำลังเท่ากับ 1 ให้ VAR1 = PROD (SUM) ค่า SUM = 0 และ COUNTMUL = VAR2 (VAR1 ที่ Pass เข้ามา) ทำการบวกกันซ้ำๆ ในรูปของ (VAR1+VAR1+….+VAR1) จำนวน VAR2 ครั้ง แล้วเก็บไว้ในค่า SUM โดย เมื่อบวกครบ VAR2 รอบ จะได้ค่า SUM = VAR1( ค่า PROD= VAR1^2) * VAR2(ค่าที่ pass เข้ามา VAR1) = VAR1^3 = แล้วนำตัวแปร PROD มาเก็บค่าผลบวกรวมที่ได้ (เดิมเป็น VAR1^2)

6)       รอบที่ 4 เลขชี้กำลังเท่ากับ 0 กำหนดให้ัวแปร ANS มาเก็บค่า PROD ที่ได้ือ VAR1^3 และจบการทำงานของ function

Flow Chart Function หาร

อธิบาย  Flow Chart Function หาร

1)       ทำการ pass ค่าตัวแปรโดยกำหนดให้ VAR1 เป็น ตัวตั้ง และ VAR2 เป็นตัวหาร

2)       กำหนดค่าตัวแปร COUNTDIV = 0 และ CARRY = 1

3)       หลักการคำนวณการหาร ใช้หลักการลบดยลบจนค่าของตัวตั้งมีค่าเท่ากับ 0

VAR1 – VAR2 –VAR2 – VAR2 - … -VAR2 จนมีค่าเท่ากับ 0 จำนวนการลบจะมีค่าเท่ากับผลหาร

4)       พิจารณา ค่าของตัวแป VAR2  ดยถ้ามีค่าเป็นห้กลับค่ามาเป็นวกละทำการ set ผลารเป็นลบจากลักการณิตศาสตร์ a / b ถ้ามีตัวใดตัวหนึ่งติดลบะได้ผลหารเป็นลบ

5)       พิจารณา ค่าของตัวแป VAR1 โดยถ้ามีค่าเป็นห้กลับค่ามาเป็นวกละทำการ set ผลารเป็น8ค่าตรงกันข้ามจากลักการณิตศาสตร์ a / b ถ้ามีตัวใดตัวหนึ่งติดลบะได้ผลหารเป็นลบ แต่ถ้าเป็นลบทั้งคู่ะได้ผลหารเป็นวก(กลับค่าขากข้อ 4)

6)       ทำการลบ VAR1 ด้วย VAR2 จนกว่าะมีค่าท่ากับ 0 และทำการเพิ่มค่าผลหาร ทุกคร้งที่มีการลบรงตามเงื่อนไข

7)       เมื่อค่าของ VAR1 มีค่าเท่ากับ 0 หรือน้อยกว่า(หารไม่ลงตัว) ให้ัวแปร ANS มาเก็บค่าผลหารละบการทำงาน          

อธิบาย  ผลหารรันโปรแกรม

            การรันโปรแกรม เริ่มต้น โดยการ Input ค่า a ,b จากคีย์บอร์ดโดยเป็นได้ทั้งค่าบวกและลบ

ภาพ ตัวอย่างการ ป้อน Input a จาก keyboard

จากโปรแกรม เริ่มด้วยการ Input ค่าจาก Keyboard แล้วทำการตรวจสอบค่านั้นๆ่าีค่า เท่ากับ 0 หรือไม่้าใช่ห้ทำการยุดการทำงานทันที้าไม่ห้ทำการเก็บค่านั้นไว้ในตัวแปร a ที่ตำแหน่ง 092 ใ Memory

จากตัวอย่าง ป้อนค่า 2 ให้กับ a ทำให้ memory ตำแหน่ง 092 มีค่าเป็น 0002 ค่า AC มีค่าเท่ากับ 0002 และค่า PC มีค่าเท่ากับ 0005 เพื่อเตรียมทำคำสั่งรับค่า b

 

ภาพ ตัวอย่างการ ป้อน Input b จาก keyboard

จากโปรแกรม Input ค่าจาก Keyboard แล้วทำการตรวจสอบค่านั้นๆ่าีค่า เท่ากับ 0 หรือไม่้าใช่ห้ทำการยุดการทำงานทันที้าไม่ห้ทำการเก็บค่านั้นไว้ในตัวแปร bที่ตำแหน่ง 093 ใ Memory

จากตัวอย่าง ป้อนค่า -3 ให้กับ b ทำให้ memory ตำแหน่ง 093 มีค่าเป็น FFFD  ่า AC มีค่าเท่ากับ FFFD และค่า PC มีค่าเท่ากับ 00A เพื่อเตรียมทำคำสั่งต่อไป

ภาพ ตัวอย่างการ กำหนดค่าตัวแปรก่อนเข้าสู่ Function ยกกำลัง 3

กำหนดค่าตัวแปร VAR1 ให้เท่ากับ a  จากตัวอย่างีค่าเท่ากับ 2 ทำให้ memory ตำแหน่ง 094 มีค่าเท่ากับ 0002 และทำการกำหนดค่าของ VAR2 เท่ากับค่าของเลขชี้กำลังคือ 3 ทำให้ memory ตำแหน่ง 095 มีค่าเท่ากับ0003 และทำการเตรียมเข้าสู่ Function ยกกำลัง 3 โดยค่าของ PC เท่ากับ 031

ภาพ ตัวอย่างการ กำหนดค่าตัวแปรก่อนเข้าสู่ Function ยกกำลัง 3

เมื่อเข้าสู่ Fumction ยกกำลัง 3 เริ่มด้วยการ set ค่าห้ PROD ที่ตำแหน่ง memory 09A มีค่าเท่ากับ 1 นำค่า VAR2 ที่ตำแหน่ง memory  095 เก็บไว้ใน COUNTPOW ที่ตำแหน่ง memory  09C (เลขชี้กำลัง) และให้ัวแปร VAR2 เก็บค่า VAR1 (a) สรุปจะทำให้ memory ตำแหน่ง 09A มีค่าเ่ากับ 0001 ตำแหน่ง 09C มีค่าเ่ากับ 0003 ตำแหน่ง 095 มีค่าเท่ากับ 0002 ทำการตรวจสอบค่าเลขชี้กำลัง ถ้ามีค่าน้อยกว่าหรือเท่ากับ 0 ให้ทำการออกจาก Function ยกกำลังต่ถ้ามากกว่าให้ทำการ LOAD ค่า PROD เก็บไว้ใน VAR1 memory ตำแหน่ง 094 มีค่าเ่ากับ 0001  และให้ค่า PC เท่ากับ 04C เพื่อเตรียมเข้า Function คูณ

ภาพ ตัวอย่างการ เข้าสู่ Function คูณ

 

ทำการ set ค่า SUM เป็น 0 ที่ตำแหน่ง 099 ใน memory ทำการตรวจสอบค่าของ VAR2(a) ว่ามีค่าป็นวกหรือ้าเป็นลบให้ทำการกลับค่าเป็นวก และทำการกำหนดให้ COUNTMUL ที่ตำแหน่ง 09B ใน memory มีค่าเท่ากับจำนวนการบวก (a) และทำการเริ่มการบวก VAR1 เท่ากับจำนวน VAR2 ในขณะที่่าของ COUNTMUL มากกว่า 0 โดยค่าของ COUNTMUL มีค่าลดลง 1 ทุกครั้งที่มีการบวก

จากภาพตัวอย่าง จะทำให้ค่า VAR2 ที่ตำแหน่ง memory  095 มีค่าเท่ากับ 2 (a) มีค่าเป็นบวกละจะทำให้ COUNTMUL ที่ตำแหน่ง 09B ใน memory มีค่าเท่ากับ 2  (a) และทำการเริ่มการบวก VAR1 เท่ากับจำนวน 2 ครั้งละทำการลดค่า COUNTMUL ลงทุกครั้งที่มีการบวกนกระทั่งท่ากับ 0 จะทำให้เงื่อนไขการบวกบลงำให้ PC มีค่าเท่ากับ 063 เพื่อออกจาก function คูณดยค่าผลคูณ จะเท่ากับ VAR1 และเก็บในตัวแปร SUM ที่ตำแหน่ง 099 มีค่าเท่ากับ 2 เมื่อออกจาก function คูณะทำการ ารเก็บค่า SUM ไว้ที่ ANS ที่ตำแหน่ง 096 และกลับไปยัง function ยกกำลัง 3

ภาพ ตัวอย่างการ กลับมาจาก function คูณ

เมื่อกลับมาจาก function คูณ จะทำการเก็บ่าผลคูณ ไว้ที่ PROD ที่ตำแหน่ง 09A ใน memory จากตัวอย่างคือ 2 เพื่อใช้ในการคำนวณต่อไปดย่าตัวชี้กำลัง COUNTPOW เดิมเป็น 3 จะถูกลดลง 1 เหลือ 2 ดังภาพตำแหน่ง 09C ใน memory และ่า PC จะเท่ากับ 037 คือให้กลับไปทำ Function ยกกำลังอีกครั้งดยเลขชี้กำลังป็น 2 function ยกกำลังจะทำการ set ค่า VAR1 เป็น่าผลลัพธ์จากการคูณรอบที่แล้วละทำการเข้าสู่ function คูณอีกครั้งและทำการคูณดยการบวกซ้ำ เป็น VAR1 + VAR1 (2 ครั้งตามตัวอย่าง) โดย VAR1 เป็นค่าของผลคูณรอบที่แล้ว ก็จะทำการกลับจาก function คูณอีกครั้งดยค่าของ COUNTPOW จะถูกลดลงอีก 1 จนมีค่าเท่ากับ 1

 

 

 

 

 

 

ภาพ ตัวอย่างการ สิ้นสุดการยกกำลัง

เมืjอค่าของ COUNPOW ที่ตำแหน่ง 09C มีค่าเท่ากับ 0 จะเป็นตัวกำหนดว่าสิ้นสุดการกกำลัง  ค่าผลลัพธ์จะถูกเก็บไว้ที่ PROD ที่ตำแหน่ง 09A ใน memory ซึ่งมีค่าเท่ากับ 0008 และค่าของ PC จะเท่ากับ 043 เพื่อออกจา function ยกกำลัง

ภาพ ตัวอย่างกระบวนการออกจาก function ยกกำลัง

การออกจาก function ยกกำลังะทำการเก็บค่าผลลัพธ์ของการยกกำลังว้ที่ตัวแปร ANS ในตำหน่ง 096 ใน memory และทำการ load ค่า CPJ โดยเริ่มแรกมีค่าเป็น 0 ที่ตำแหน่ง 09E ทำการตรวจสอบ้า CPJ > 0 จะทำการพิ่มค่า CPJ ไป 1 ทำให้ ที่ตำแหน่ง 09E มีค่าเป็น 0001 ดังรูป

 

ภาพ ตัวอย่างแสดงผลลัพธ์การยกกำลังละการ set ค่าก่อนเข้า Function หาร

เมื่อออกจาก function ยกกำลัง ให้ output ค่าลลัพธ์ของการยกกำลังออกมา และทำการ set ค่า VAR1 ที่ตำแหน่ง 094 เป็นผลลัพธ์จากการยกกำลัง ค่า VAR2 ที่ตำแหน่ง 095 เป็น b เพื่อให้เข้าตามสมาการ a^3 / b

ภาพ ตัวอย่างการเข้าสู่ function หารและการ set ตัวตั้งัวหารละลลัพธ์

Fuction หาร ถูกกำหนดให้ ตัวแปร VAR1 เป็นัวตั้ง VAR2 เป็นตัวหารละ CARRY เป็นผลลัพธ์ดย VAR1  ีค่าจากผลลัพธ์อง function ยกกำลัง (a^3) และ VAR2 มีค่าเท่ากับ b ดังนั้น่าของ Var1 ที่ำแหน่ง 094 ใน memory เป็น 0008 และ่าของ VAR2 ที่ตำแหน่ง 095 เป็น FFFD และค่า CARRY ที่ำแหน่ง 0A3 มีค่า 0001

และทำการตรวจสอบค่าของ  VAR2 ว่ามีค่าเป็น บวกหรือลบ VAR2 เท่ากับ -3 ให้ทำการกลับค่าเป็น 3 และทำการกลับค่า CARRY เป็น FFFF และทำการตรวจสอบค่าอง VAR1 ว่ามีค่าบวกหรือลบดย VAR1 เท่ากับ 8 เป็นบวก จึงม่ต้องกลับค่า ตามหลักที่ว่า a / b ถ้ามีตัวใดตัวหนึ่งเป็นลบลลัพธ์ จะเป็นบ แต่ถ้าเป็นวกหรือลบั้งคู่ผลลัพธ์จะเป็นวกากตัวอย่าง a= 8 , b = -3 ผลลัพธจึงต้องติดลบ

ภาพ ตัวอย่างการ หาร

การหารคือการลบ ตัวตั้ง้วยตัวหาร จนกว่าตัวตั้งจะกลายเป็น 0 หรือลบออกไม่ได้แล้ว(น้อยกว่า 0)แล้วนับจำนวนรอบการป็นผลการากปรแกรมรากำหนดให้ VAR 1 เป็นตัวตั้ง VAR2 เป็นตัวหารึงตั้งเงื่อนไขว่าห้หยุดการหารเมื่อ VAR1 <= 0 โดยแต่ละรอบจะทำการลบ VAR2 ออกจาก VAR1 และทำการเพิ่มค่า COUNTDIV(0) บวกด้วยค่า CARRY ทุกครั้งที่มีการลบละเป็นไปตามเงื่อนไขริ่มที่ VAR1 = 8 , น VAR2 มาลบคือ 8 – 3 = 5 เก็บไว้ใน VAR1  แล้วทำการ VAR1 อีกครั้ง่าน้อยกว่า 0 หรือไม่ ถ้าไม่ให้พิ่มค่า COUNTDIV(0) จากค่า CARRY  โดย CARRY เป็น  -1(FFFF) แล้วกลับมาตรวจค่าของ VAR1 อีกครั้งว่าเป็น 0 หรือ้อยกว่าหรือไม่้าไม่ ให้ทำการลบอีกครั้งะได้  5 – 3 = 2 เก็บไว้ใน VAR1  แล้วทำการแล้วทำการตรวจ VAR1 อีกครั้ง่าน้อยกว่า 0 หรือไม่ ถ้าไม่ ให้พิ่มค่า COUNTDIV(-1) จากค่า CARRY  โดย CARRY เป็น -1(FFFF) จะทำให้ COUNTDIV ที่ตำแหน่ง 094 เป็น FFFE แล้วกลับมาตรวจค่าของ VAR1 อีกครั้งว่าเป็น 0 หรือ้อยกว่าหรือไม่  ้าไม่ให้ทำการลบอีกครั้งะได้  2 – 3 = -2 เก็บไว้ใน VAR1  แล้วทำการตรวจ VAR1 อีกครั้ง่าน้อยกว่า 0 หรือไม่ ถ้าใช่ให้ทำการหยุดการลบลจากการลบะทำให้ลหารยู่ที่ำแหน่ง 09D ใน Memory

 

 

 

 

 

 

 

 

 

ภาพ ตัวอย่างกระบวนการออกจาก function หาร

การออกจาก function หาระทำการเก็บค่าผลลัพธ์ของการหารว้ที่ตัวแปร ANS ในตำหน่ง 096 ใน memory และทำการ load ค่า CDJ โดยเริ่มแรกมีค่าเป็น 0 ที่ตำแหน่ง 09F ทำการตรวจสอบ้า CDJ > 0 จะทำการพิ่มค่า CDJ ไป 1 ทำให้ ที่ตำแหน่ง 09F มีค่าเป็น 0001 ดังรูป

ภาพ ตัวอย่างแสดงผลลัพธ์การหารละการ เก็บค่าผลลัพธ์ –a^3 / b

ผลลัพธ์การหารจะถูกเก็บไว้ที่ตัวแปร ANS และจะถูกเก็บในตัวแปร TEMP1 ที่ตำแหน่ง 097 ใน memory ซึ่งเป็นผลลัพธ์ของการ ยกกำลัง 3 และทำการหารแล้ว  กล่าวคือ TEMP1 เก็บค่าของ a^3 / b แต่จากสมการเป็น –a^3 / b ดังนั้นจึงต้องทำการกลับค่าของ TEMP1 จากผลหารคือ -2 ดังนั้น ค่าของ TEMP1 จะเท่ากับ 2 ที่ตำแหน่ง 097 และแสดงคำตอบออกมาดังรูป

ภาพ ตัวอย่างการเริ่มต้นหาค่าของ –b^3 / a

การหาค่าของ –b^3/a สามารถทำได้ในลักษณะเดียวกันกับการหาค่าของ –a^3 / b กล่าวคือ การนำ  b เข้า function ยกกำลัง 3 แล้วนำผลลัพธ์ที่ได้เข้า Function หาร กับ b แล้วทำการกลับค่า ดังนั้นจึงจำเป็นต้องมีการ set ตัวแปร ใหม่ คือ ให้ VAR1 เก็บค่า b  และ VAR2 เก็บค่า a (เดิมให้ VAR1 เก็บค่า a  และ VAR2 เก็บค่า b) แล้วเข้าสู่ fuction ยกกำลัง 3

ภาพ ตัวอย่างการหาค่าของ  b^3

การหาค่าของ b^3 มีขั้นตอนเหมือนกับการหาค่าของ a^3 คือมีการ set ค่า ของ COUNTPOW  เป็น 3 ทำการคูรจนกระทั่ง มีค่าเป็น 0 ค่าผลลัพธ์ของการยกกำลัง จะถูกเก็บไว้ที่ PROD ในตำแหน่ง 09A ใน memory คือ FFE5 ซึ่งเท่ากับ -27 ซึ่งเท่ากับ -3^3

ภาพ ตัวอย่างการหาค่าของ  -b^3 / a

เมื่อออกจาก function ยกกำลังจะทำการตรวจสอบค่า CPJ ที่ตำแหน่ง 09E ซึ่งมีค่าเป็น 0001 ทำให้ VAR2(ตัวหาร) เป็น a ตามสมาการ b^3 / a และให้ ผลลัพธ์จากการยกกำลัง เก็บไว้ที่ VAR1 แล้วเข้า function หาiซึ่งมีกระบวนการเหมือนกับการหาร a^3/b และได้ผลลัพธ์ของการหารที่ ANS ที่ตำแหน่ง 096 ใน memory คือ FFF3 ซึ่งมีค่าเท่ากับ – 13 แต่เราต้องการ –b^3/a ดังนั้นจึงต้องทำการกลับค่า เป็น 13 แล้วเก็บไว้ที่ตัวแปร TEMP2 ที่ตำแหน่ง 098 ใน memory

 ภาพ ตัวอย่างการหาค่าของ  (-a^3 / b) + (-b^3 / a)

จากค่าของ (-a^3 / b) ถูกเก็บไว้ในตัวแปร TEMP1 ในตำแหน่ง 097 ใน memory และ (-b^3 / a) ถูกเก็บไว้ในตัวแปร TEMP2 ในตำแหน่ง 098 ใน memory ดั้งนั้นการหาผลขอลสมการสามารถทำได้ด้วยการ บวกค่า TEMP1 และ TEMP2 แล้วเก็บไว้ใน ตัวแปร SUM ที่ตำแหน่ง 099 ใน memory และแสดงoutput ออกมา และจบการทำงาน