Tags:
Forums: 

ก็อย่างที่บอกไปข้างต้นนะครับ คือว่าเพิ่งจะเริ่มเขียนนะครับ แต่ว่าเรื่องคำสั่งยังงงมากมาย บางครั้งต้องเอาคำสั่งของภาษาซีไปเทียบเป็น python ใน google คิดว่าเขียนโดย python น่าจะทำให้ รู้เรื่องมากขึ้นอีกน่ะครับ แค่ช่วยอธิบายก็พอครับ หรือไม่ก็ยกคำสั่งที่สำคัญที่จะต้องใช้น่ะครับ คือตอนนี้มี .txt ที่เป็น file ให้หา object code กับ lc แล้วก็มีอีก .txt จะบอก opcode กับ format(มีแค่ format1-3 ครับ) ทำไปก็ติดปัญหาเรื่อง การอ่ายไฟล์ แล้วก็งงไปเลยคร้าบบบ

Get latest news from Blognone
By: wearetherock
BlackberryUbuntu
on 23 August 2009 - 01:27 #120400

?

By: aonnee on 23 August 2009 - 01:30 #120401

แง่ว อารายเอ่ย

By: aonnee on 23 August 2009 - 01:32 #120402

เศร้าใจ ท่าทางไม่มีคนอยู่ต้องกลับไปใช้ c เขียนเหมือนเดิม so sad

By: dafty
AndroidWindowsIn Love
on 23 August 2009 - 02:28 #120404

เขียนโปรแกรมเก่งแทบตายแต่คุยกับคนอื่นไม่รู้เรื่องก็เท่านั้นครับ ... ลองกลับไปคิดดูนะ

By: aonnee on 23 August 2009 - 02:48 #120405

"เขียนโปรแกรมเก่งแทบตายแต่คุยกับคนอื่นไม่รู้เรื่องก็เท่านั้นครับ ... ลองกลับไปคิดดูนะ"
หมายความว่า ให้กลับไปคิดคำถามมาใหม่อธิบายให้ละเอียด หรือว่าคำถามมันดูหรูหรามากเกินไป แต่ว่าอันที่จริงผมแค่อยากจะเรียนรู้ครับ ป่าวตั้งคำถามที่ตัวเองดูมีความเก่งกาจ คิดว่าการถามก็เหมือนกับการเพิ่มปัญญากับสิ่งที่เรายังไม่ทราบครับ

By: cwt
AndroidRed Hat
on 23 August 2009 - 03:22 #120408

ลองอธิบายใหม่ครับ แยกส่วนของ ความคิดเห็นส่วนตัว ปัญหาที่มี ผลสำเร็จที่ต้องการ และแนวทางที่อยากจะได้คำตอบ

ตามที่เขียนมาข้างบน บอกตรงๆ ว่าไม่รู้เรื่องเลย ไม่สามารถให้คำตอบได้

By: soginal
AndroidIn Love
on 23 August 2009 - 14:27 #120457
soginal's picture

อ่านไม่รู้เรื่องแฮะ หรือมันเป็นคำศัพท์อันลึกซึ้งชอง python?

"If debugging is the process of removing software bugs,
then programming must be the process of putting them in."

By: aonnee on 23 August 2009 - 15:55 #120471

อ่า...ครับ งั้นต้องถามก่อนว่าทุกคนในที่นี้พอจะรู้จัก two pass assembler กันหรือป่าวอ่ะครับ

By: lew
FounderJusci's WriterMEconomicsAndroid
on 23 August 2009 - 16:27 #120477
lew's picture

เข้าใจว่าคงเรียนวิชา System Software อยู่แล้วอยากใช้ Python ทำการบ้านใช่ไหมครับ

ผมเองจำไม่ค่อยได้แล้ว เวลาถามพวกนี้ ควรให้ข้อมูลคนตอบมากกว่านี้ครับ

  • หนังสือแต่ละเล่มใช้ CPU คนละแบบ กัน Two Pass Assembler เป็นอะไรที่เฉพาะกับซีพียูบางรุ่นเท่านั้นล่ะครับ ตรงนี้เดาว่าน่าจะใช้ SIC/XE รึเปล่าครับ?
  • LC คืออะไรครับ
  • Format 1-3 นี่เฉพาะกับ CPU ที่เราใช้มากๆ ครับ CPU บางรุ่นมีแค่ format เดียวเท่านั้น เพราะ PC จะได้บวกตรงแบบเดียวเสมอ ขณะที่ซีพียูบางรุ่นโดยเฉพาะ x86 ใหม่ๆ นี่จะมี format บ้าเลือดนับสิบๆ แบบ

อันข้างบนเป็นความพยายามตอบคำถามของน้องนะครับ แต่พี่แนะนำน้องสักหน่อยเวลาถามคำถามในชุมชนเปิดแบบนี้ครับ

  • คนอื่นไม่ได้เรียนกับน้องอ่ะครับ หลายๆ คนแม้จะเคยเรียนวิชานี้มาก็ไม่ได้ใช้หนังสือเล่มเดียวกัน ควรเกริ่นนำ ใส่ link และ resource ที่จำเป็น
  • อย่างกรณีนี้ผมเข้าใจว่าน้องน่าจะแปลงปัญหาจาก "ปัญหา System Software" เป็น "ปัญหา Python" ก่อน เพื่อหลีกเลี่ยงความจำเป็นต้องเกริ่นนำปัญหาทั้งหมดอีกครั้งนะครับ
  • ยกตัวอย่างสั้นๆ ถึง input และ output ที่เราคาดหวัง
  • บอกถึงกระบวนการที่เราได้ลองพยายามทำไปแล้ว และระบุถึงจุดที่เราติดอยู่อย่างชัดเจนครับ

LewCPE


lewcpe.com, @wasonliw

By: ABZee on 23 August 2009 - 21:38 #120522 Reply to:120477

เสริมอย่างนึง

  • ถึงแม้ว่าหลายๆคนจะเคยเรียนวิชานี้มาและใช้หนังสือเล่มเกียวกัน แต่ทุกคนก็คงลืมกันบ้างไม่มากไม่น้อย ถ้าไม่เขียนอธิบายละเอียดก็คงไม่เข้าใจง่ายๆ (เช่น LC คืออะไร?)

ปล. ที่นี่เป็นชุมชนเปิดหรือ?

LongSpine.com

By: lew
FounderJusci's WriterMEconomicsAndroid
on 24 August 2009 - 00:37 #120550 Reply to:120522
lew's picture

ก็ไม่มีใครต้องใช้บัตรอะไรมาสมัครนะ

โดนบล็อคไป กลับมาสมัครใหม่ก็มีให้เห็นนี่ ยังเล่นกันอยู่ดีจนวันนี้

LewCPE


lewcpe.com, @wasonliw

By: ABZee on 24 August 2009 - 05:01 #120564 Reply to:120550

จริงๆแล้วผมว่ามันยังมีหลายอย่างที่ขัดกับคำว่าสังคมเปิดอยู่นะครับ เช่นกรณีของแฟนคลับจาวาและแฟนคลับแอปเปิล ผมเลยคิดว่ามันเป็นสังคมปิด "แบบหลวมๆ"เสียมากกว่า

ไม่ใชแค่่ว่าต้องสมัครสมาชิกหรืออะไรถึงเป็นสังคมปิดนะ ถ้ายังมีกระบวนการคัดออกผมว่ามันก็ยังเป็นสังคมปิดอยู่

ที่ถามนี่เพราะเอะใจและสงสัยนะครับ ไม่ได้จงใจซะทีเดียว จริงๆแล้วสืบเนื่องจากกระทู้ ผมว่าไม่ว่าจะเป็นสังคมเปิดหรือสังคมปิดมันก็ต้องเขียนคำถามให้ชัดเจนทั้งนั้น โดยเฉพาะสังคมที่มีความหลากหลายของกลุ่มบุคคล

LongSpine.com

By: lew
FounderJusci's WriterMEconomicsAndroid
on 24 August 2009 - 09:26 #120568 Reply to:120564
lew's picture

เพื่อป้องกันการออกทะเล ใครจะคุยเรื่องนี้ต่อตั้งกระทู้ใหม่เลยนะครับ

LewCPE


lewcpe.com, @wasonliw

By: soginal
AndroidIn Love
on 23 August 2009 - 16:30 #120478
soginal's picture

คือ คุณลองจินตนาการว่าคุณไม่รู้เรื่องเกี่ยวกับตัวคุณเลย แล้วลองกลับไปอ่านคำถามของคุณดูนะว่าจะรู้สึกแบบผมรู้สึกไหม

"ก็อย่างที่บอกไปข้างต้นนะครับ คือว่าเพิ่งจะเริ่มเขียนนะครับ" - บอกไปตอนไหนหว่า? "แต่ว่าเรื่องคำสั่งยังงงมากมาย บางครั้งต้องเอาคำสั่งของภาษาซีไปเทียบเป็น python ใน google คิดว่าเขียนโดย python น่าจะทำให้ รู้เรื่องมากขึ้นอีกน่ะครับ" - นี่คือ ข้อคิดเห็นหรือคำถามครับ? "แค่ช่วยอธิบายก็พอครับ" -อธิบายอะไรครับ? ยังไม่เห็นคำถามเลย "หรือไม่ก็ยกคำสั่งที่สำคัญที่จะต้องใช้น่ะครับ" -?? "คือตอนนี้มี .txt ที่เป็น file ให้หา object code กับ lc แล้วก็มีอีก .txt จะบอก opcode กับ format(มีแค่ format1-3 ครับ)" - เข้าใจว่านี่เป็นโจทย์ "ทำไปก็ติดปัญหาเรื่อง การอ่ายไฟล์ แล้วก็งงไปเลยคร้าบบบ" - อยู่ๆก็ติดปัญหาเลยแบบไร้ต้นสายปลายเหตุ

WTF ครับ ______________________________________________ "If debugging is the process of removing software bugs, then programming must be the process of putting them in."

By: aonnee on 23 August 2009 - 16:48 #120482

WTF อันนี้ใช้สกิลไม่มีดีเลย์ และไม่ต้องใช้ mana point หรือป่าวครับ (แหะล้อเล่นอ่ะครับ) ใช่ครับตอนี้ผมกำลังแปลงจาก ภาษาซี เป็น python อยู่ครับปัญหาที่สำคัญสำหรับผมตอนนี้คือเรื่องคำสั่งที่แตกต่างกันครับ ส่วนเรื่องปัญหาอยากจะโพสรูปแล้วก็ ส่วนของโปรแกรมที่ติดปัญหาอยู่ แต่หาที่โำสไม่เจออ่ะครับ ประมาณว่าโง่เรื่องตั้งกระทู้มากมาย เด๋วหาเจอแล้วจะโพสรูปให้ดูใหม่นะครับ จะได้พอเข้าใจคำถามกับปัญหาอ่ะครับ LC = Location Counter ครับ

By: JavaDevil
iPhoneUbuntuIn Love
on 23 August 2009 - 18:43 #120500 Reply to:120482

LC มันคืออันเดียวกันกับ PC(Program Counter) ไหมครับ หรือคนละอันอยากรู้

คุณกำลังพยายามเขียน C compiler ด้วย Python หรือเปล่าครับ

By: aonnee on 23 August 2009 - 18:30 #120498

ผมคงจะอธิบายไม่เก่ง อยากรู้วิธีการอ่านไฟล์ แล้วใส่ค่าในตัวแปล ยกตัวอย่าง
ผมมี file.txt ในนั้นมี(bird cat dog) ผมต้องการเรียกไฟล์ .txt มาอ่านพร้อมกับบันทึก bird,cat,dog ใส่ในตัวแปล a,b,c ตามลำดับ และต้องการตัดช่องว่าง(\t)กับตัดตัวที่ขึ้นบรรทัดใหม่(^\n) ซึ่งที่ผมหามาคือคำสั่ง re.split("\t",) แต่พอใส่ ([^\n]) แล้วสิ่งที่ได้จะเพี้ยน เช่น cat จะเหลือ at ตัว c หาย

By: ABZee on 23 August 2009 - 21:50 #120524 Reply to:120498

ต้องการตัดแค่ไหนหรือ อะไรที่ไม่ต้องการตัดบ้้าง? เพราะค่าตั้งต้นของ split มันค่อนข้างครอบคลุมแล้ว

ตัวอย่าง

txt = "a b c\t d\nf"
txt.split()
['a', 'b', 'c', 'd', 'f']

ถ้าต้องการตัดบรรทัดก่อน แล้วค่อยตัดบล็อคเป็นคำๆก็ใช้

txt.split('\n')
['a b c\t d', 'f']

for line in txt.split('\n'): # เนื่องจาก txt.split('\n') นั้นแตกข้อมูลออกมาเป็นหลายบรรทัด เราจึงจะวนลูปไล่ทีละบรรทัดเพื่อจัดการกับข้อมูล
... line.split()
['a', 'b', 'c', 'd']
['f']

ถ้าเปิดไฟล์ไม่เป็น ลองใช้ตัวอย่างนี้ดู

f = open('input.txt', 'r')
for line in f:
... print line

ถ้าเขียนแบบนี้ใน C คงใช้เวลาเป็นชั่วโมงแถมยังมีบัํกเหลือ

ทำตรงนี้เสร็จแล้วที่เหลือก็แค่ใช้พลังสวมเขาลุยท้องนา แยกพิจารณาคำสั่งเป็นกรณีๆไป

LongSpine.com

By: aonnee on 23 August 2009 - 23:12 #120540 Reply to:120524

เช่น มีไฟล์ file.txt ข้างในมีข้อความดังตัวอย่าง

bird cat dog

ผมต้องการตัดเฉพาะช่องว่าง(\t)และขึ้นบรรทัดใหม่(\n)ครับ แล้วก็นำมาใส่ในตัวแปลภายในโปรแกรมที่เขียนขึ้นมาจะได้ค่า

a = bird
b = cat
c = dog

ตอนนี้ที่ตัดคือ เอา re.split("\t",line)(line = file ที่ open เข้ามา) มาตัดช่องว่างเสร็จแล้วมัน copy ใส่ในค่า a หมดทั้ง file.txt

['ิbird', 'cat', 'dog\n']

หาวิธีตัด \n ไม่ได้ด้วยอ่ะครับ ส่วนการเปิดไฟล์และอ่านผมใช้

file = open("(filename).txt","r")
while 1:
line1 = file.readline()
if not line:
break

ที่มาที่ใช้ประกอบการมั่วครับ http://www.java2s.com/Code/Python/CatalogPython.htm

By: cwt
AndroidRed Hat
on 23 August 2009 - 23:59 #120544 Reply to:120540

เติมไปใน if

if not line1:
break
else:
line1.strip() # เอา white space ทั้งสองด้านของ line1 ออก หรือจะใช้ .rstrip() เพื่อเอาเฉพาะข้างขวาออกก็ได้

By: cwt
AndroidRed Hat
on 24 August 2009 - 00:02 #120545 Reply to:120540

เพิ่มเติม...

  1. อย่าตั้งชื่อตัวแปรว่า file เพราะ file เป็น type file ของ python
  2. ตัวอย่างที่ให้มา ผิด เพราะ line1 = file.readline() แต่ ตรง if ใช้ if not line:
  3. ไม่จำเป็นต้องใช้ re.split เพราะ string สามารถใช้ .split() ได้เลย
By: darktong
ContributorAndroidUbuntu
on 24 August 2009 - 01:48 #120556 Reply to:120540

ผมใช้ python 2.6.2 นะ

with open('file.txt','r') as f:
d = f.read().split()

a = d[0]
b = d[1]
c = d[2]
print 'a =',a
print 'b =',b
print 'c =',c

By: aonnee on 24 August 2009 - 01:50 #120558 Reply to:120556

โอ้ขอบคุณมากครับ เดี๋ยวจะเอาไปลองเขียนดู

By: aonnee on 25 August 2009 - 12:05 #120867 Reply to:120556

ครับ คือค่อยๆเข้าใจคำสั่งแล้วครับ d=f.readline() มันจะเก็บที่ array d เป็นคำๆไปใช่มั้ยครับ

cat dog bird
bat dug

ผลลัพธ์ในการตัดแล้วจะได้

['cat','dog',bird']
['bat','dug']

ถ้าเราต้องการจะดึง แต่ละคำใน array d ออกมาและแถวที่ไม่มีคำ ไม่ต้องเก็บค่า ถ้าในภาษาซี ผมจะใช้ strtok เอาเฉพาะคำ ถ้าเจอช่องว่างก็ใส่ค่า NULL[fp,fpop = พอยต์เตอร์,str[255] = array]

while(!feof(fp))
{
fscanf(fp," %[^\n]",str);
label=strtok(str,"\t");
opc=strtok(NULL,"\t");
opr=strtok(NULL,"\t");

fpop=fopen("optable.txt","r");
 }

จะได้บรรทัดแรกประมาณว่า label = cat,opc = dog,opr = bird
บรรทัดที่สอง label = NULL,opc = bat,opr = dug

By: ABZee on 26 August 2009 - 03:10 #120987 Reply to:120867

ถ้าต้องการแบบที่เขียนนี้ต่อก็ใช้ strip('\n') แล้วใช้ split('\t') ก็ได้ เช่น

text = "cat\tdog\tbird\n"
label, opc, opr = text.strip('\n').split('\t')

จะได้

label = 'cat'
opc = 'dog'
opr = 'bird'

ถ้ามีแค่สองค่า เช่น text = "\tdog\tbird\n" จะได้ผลลัพท์เป๋น

label = ''
opc = 'dog'
opr = 'bird'

แต่ถ้าเขียนแบบนี้ก็ใช้ space แทน tab ในโค้ดไม่ได้นะ สมัยที่ผมทำ SIC/XE ผมถอด space ด้วย และนับเอาว่ามีกี่คำ ตัวไหนเป็น label ตัวไหนเป็น opcode แล้วค่อยเอาไปแทน label, opc, opr, comment ทีหลัง

แนะนำให้อ่านติวตอเรียลก่อน โดยหัดพวกการเล่นกับ string พื้นฐานสักหน่อย เพราะผมคิดว่าคุณอาจจะยังไม่คล่องตรงนี้เท่าไหร่

LongSpine.com

By: aonnee on 26 August 2009 - 23:07 #121185 Reply to:120987

แหล่มเลยครับ เรื่องของ label กับ opcode เดี๋ยวผมจะเปิดอีกไฟล์ที่มีการบันทึกค่าเลข opcode กับ format มาเทียบค่าเลยครับ เลยต้องการที่จะเก็บ ค่าเป็น string ไว้ก่อน ก่อนนำไปเทียบค่าครับ แล้วอีกไฟล์ที่มีค่าก็จะใช้การตัดคำและการบันทึกค่าเป็น string เช่นเดียวกัน

By: aonnee on 23 August 2009 - 19:07 #120505

ครับ คือกำลัีงเขียน assember ใน python น่ะครับ LC หมายถึงตำแหน่งที่เก็บ instruction ส่วนที่ผมกำลังเขียน เขียนแค่ sic ครับ

By: ABZee on 23 August 2009 - 21:29 #120525 Reply to:120505

คุยกับอาจารย์รึยังว่าต้องเขียนเป็น C ไหม เพราะกลัวว่าสุดท้ายแล้วต้องไปเขียน C เพื่อส่งเป็นการบ้านอีกที

LongSpine.com

By: aonnee on 23 August 2009 - 22:47 #120530

ป่าวอ่ะครับ มันเป็นความรู้เพิ่มเติมเอง ส่วนในภาษาซี ทำเสร็จเรียบร้อยแล้วครับ แค่คิดว่า การนำ code จาก c มาแปลงเป็น python มันน่าจะทำงานได้เร็วแล้วง่ายกว่าในส่วนของ assembler ความเห็นส่วนตัวน่ะครับ แล้วก็ขอบคุณ คุณABZee ครับ