การบ้านครั้งที่
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
ออกมา และจบการทำงาน