รหัสเครื่อง หรือ ภาษาเครื่อง คือกลุ่มของคำสั่งเครื่องที่กระทำการโดยตรงโดยหน่วยประมวลผลกลาง (CPU) ของคอมพิวเตอร์ คำสั่งเครื่องแต่ละคำสั่งจะปฏิบัติงานเฉพาะกิจงานเดียวเท่านั้น เช่นการบรรจุ (load) การกระโดด (jump) หรือการดำเนินการผ่านหน่วยคำนวณและตรรกะ (ALU) บนหน่วยของข้อมูลในหน่วยความจำหรือเรจิสเตอร์ ทุก ๆ โปรแกรมที่กระทำการโดยหน่วยประมวลผลกลางสร้างขึ้นจากอนุกรมของคำสั่งเครื่องเช่นว่านั้น
รหัสเครื่องเชิงตัวเลข (ซึ่งไม่ใช่) อาจพิจารณาได้ว่าเป็นตัวแทนระดับต่ำสุดของโปรแกรมคอมพิวเตอร์ที่ได้คอมไพล์และ/หรือเขียนด้วยภาษาแอสเซมบลี หรือเป็นภาษาโปรแกรมแบบดั้งเดิมและขึ้นอยู่กับฮาร์ดแวร์ ถึงแม้ว่าเราจะสามารถเขียนโปรแกรมด้วยรหัสเครื่องเชิงตัวเลขโดยตรงก็ได้ แต่การจัดการบิตต่าง ๆ เป็นเอกเทศ และการคำนวณตำแหน่งที่อยู่กับค่าคงตัวเชิงตัวเลขด้วยมือ จะทำให้น่าเบื่อหน่ายและมีแนวโน้มที่จะเกิดความผิดพลาด ดังนั้นการเขียนรหัสเครื่องจึงไม่ค่อยกระทำกันในทุกวันนี้ เว้นแต่ในสถานการณ์ที่ต้องการทำให้เหมาะสมอย่างที่สุดหรือแก้จุดบกพร่อง
ปัจจุบันนี้โปรแกรมเกือบทั้งหมดในทางปฏิบัติเขียนขึ้นด้วยภาษาแอสเซมบลีหรือภาษาระดับสูงกว่า แล้วแปลเป็นรหัสเครื่องที่กระทำการได้โดยคอมไพเลอร์และ/หรือ กับลิงเกอร์ อย่างไรก็ดี โปรแกรมที่เขียนด้วยจะไม่ถูกแปลเป็นรหัสเครื่อง ถึงแม้ว่าอินเทอร์พรีเตอร์ (ซึ่งอาจเห็นเป็นชื่อ ตัวกระทำการ หรือ ตัวประมวลผล) โดยทั่วไปประกอบขึ้นจากรหัสเครื่องที่กระทำการได้โดยตรง
คำสั่งเครื่องที่เป็นรหัสเครื่อง
หน่วยประมวลผลหรือตระกูลของหน่วยประมวลผลทุก ๆ ชิ้นมีชุดของคำสั่งเครื่อง (instruction set) ที่เป็นรหัสของมันเอง คำสั่งเครื่องคือแบบรูปต่าง ๆ ของบิต ซึ่งการออกแบบเชิงกายภาพสอดคล้องกับคำสั่งงานที่แตกต่างกันของเครื่อง ดังนั้นชุดของคำสั่งเครื่องจึงใช้ได้กับประเภทของหน่วยประมวลผลที่ใช้สถาปัตยกรรมเดียวกัน การออกแบบหน่วยประมวลผลรุ่นหลังหรือรุ่นต่อยอดก็มักจะรวมคำสั่งทั้งหมดของรุ่นก่อนหน้าไว้ และอาจเพิ่มเติมคำสั่งใหม่เข้าไปอีกด้วย หน่วยประมวลผลรุ่นหลังอาจยกเลิกหรือเปลี่ยนแปลงรหัสของคำสั่งเครื่องในบางครั้ง (สาเหตุทั่วไปก็คือมันจำเป็นสำหรับจุดประสงค์ใหม่) ส่งผลกระทบต่อความเข้ากันได้ของรหัสในบางขอบข่าย แม้กระทั่งหน่วยประมวลผลที่เข้ากันได้เกือบสมบูรณ์ก็อาจแสดงพฤติกรรมต่างไปจากเดิมเล็กน้อยสำหรับบางคำสั่ง แต่ปัญหานี้พบได้น้อยมาก ระบบต่าง ๆ ก็อาจแตกต่างกันในรายละเอียดอื่น เช่น การจัดการหน่วยความจำ ระบบปฏิบัติการ หรือ เนื่องจากตามปกติแล้วโปรแกรมจะยึดถือปัจจัยดังกล่าว ระบบที่แตกต่างกันก็จะไม่ทำงานด้วยรหัสเครื่องที่เหมือนกัน ถึงแม้ว่าใช้หน่วยประมวลผลชนิดเดียวกันก็ตาม
รหัสของชุดของคำสั่งเครื่องอาจมีความยาวเท่ากันหมดทุกคำสั่งหรือมีความยาวแปรผันก็ได้ วิธีการจัดการแบบรูปของรหัสเครื่องขึ้นอยู่กับสถาปัตยกรรมนั้น ๆ เป็นอย่างยิ่ง และมักจะขึ้นอยู่กับชนิดของคำสั่ง คำสั่งเครื่องส่วนมากมีฟีลด์ (opcode) หนึ่งฟีลด์หรือมากกว่าซึ่งใช้ระบุชนิดของคำสั่งพื้นฐาน (เช่นเลขคณิต ตรรกศาสตร์ การกระโดด ฯลฯ) และการดำเนินการแท้จริง (เช่นการบวก การเปรียบเทียบ) และมีฟีลด์อื่น ๆ ที่อาจใช้สำหรับระบุชนิดของ (operand) (addressing mode) ออฟเซตของตำแหน่งที่อยู่หรือดัชนี หรือค่าแท้จริงโดยตัวมันเอง (ตัวถูกดำเนินการที่เป็นค่าคงตัวที่บรรจุอยู่ในคำสั่งเครื่องเช่นนั้นเรียกว่า ค่าใช้ทันที, immediate)
ไม่ใช่ว่าทุกเครื่องหรือทุกคำสั่งจะมีตัวถูกดำเนินการชัดแจ้ง (accumulator machine) มีตัวถูกดำเนินการข้างซ้ายแบบผสม และคืนค่าผลลัพธ์ในตัวสะสม (accumulator) ปริยาย สำหรับคำสั่งเลขคณิตส่วนใหญ่ สถาปัตยกรรมอื่น (เช่น 8086 และตระกูล x86) มีคำสั่งธรรมดาในรุ่นของตัวสะสมอยู่ด้วย ซึ่งคำสั่งที่ยาวกว่าจะทำเรจิสเตอร์อันหนึ่งในเรจิสเตอร์ทั่วไปเป็นตัวสะสม (stack machine) มีตัวถูกดำเนินการส่วนใหญ่หรือทั้งหมดอยู่บนกองซ้อนปริยาย คำสั่งเครื่องที่มีจุดประสงค์พิเศษก็มักจะขาดตัวถูกดำเนินการชัดแจ้ง (ตัวอย่างเช่น ซีพียูไอดีในสถาปัตยกรรม x86 เขียนค่าต่าง ๆ ลงในเรจิสเตอร์ปลายทางเป็นปริยาย 4 เรจิสเตอร์) ความแตกต่างระหว่างตัวถูกดำเนินการชัดแจ้งกับปริยายเช่นนี้สำคัญต่อโปรแกรมสร้างรหัสเครื่อง โดยเฉพาะอย่างยิ่งในเรื่องการจัดสรรเรจิสเตอร์และส่วนติดตามพิสัยแบบสด โปรแกรมทำรหัสให้เหมาะที่สุด (code optimizer) ที่ดีสามารถติดตามตัวถูกดำเนินการทั้งชัดแจ้งและปริยาย ซึ่งอาจช่วยให้เกิด (constant propagation) ได้บ่อยยิ่งขึ้น (constant folding) ของเรจิสเตอร์ (เรจิสเตอร์ที่กำหนดให้เป็นผลลัพธ์จากนิพจน์ของค่าคงตัวจะถูกแทนที่ด้วยค่าคงตัวนั้น) และการปรับปรุงรหัสอื่น ๆ ให้ดีขึ้น
โปรแกรม
โปรแกรมคอมพิวเตอร์คือลำดับของคำสั่งเครื่องที่กระทำการโดยหน่วยประมวลผลกลาง ขณะที่หน่วยประมวลผลอย่างง่ายกระทำการคำสั่งเครื่องทีละคำสั่ง แต่หน่วยประมวลผล (superscalar) สามารถกระทำการคำสั่งเครื่องได้พร้อม ๆ กันทีละหลายคำสั่ง
ภาษาแอสเซมบลี
การถอดความรหัสเครื่องที่สามารถอ่านได้ง่ายขึ้นอย่างมากอย่างหนึ่งคือภาษาแอสเซมบลี ซึ่งเป็นภาษาที่ใช้รหัสช่วยจำ (mnemonic code) อ้างถึงรหัสของคำสั่งเครื่อง แทนที่จะใช้ค่าตัวเลขของคำสั่งเครื่องโดยตรง ตัวอย่างเช่น หน่วยประมวลผล (Zilog Z80) รหัสเครื่อง 00000101
คือคำสั่งที่ทำให้หน่วยประมวลผลกลางลดค่าเรจิสเตอร์ B ลงหนึ่ง จะเขียนแทนด้วยภาษาแอสเซมบลีว่า DEC B
เป็นต้น
ตัวอย่าง
(MIPS architecture) ได้ให้ตัวอย่างรหัสเครื่องไว้ ซึ่งคำสั่งเครื่องของมันจะมีขนาด 32 บิตเสมอ ชนิดของคำสั่งกำหนดด้วยฟีลด์ op (การดำเนินการ) คือบิตบนสุด 6 บิต คำสั่งชนิด J (กระโดด) และชนิด I (ค่าใช้ทันที) จะระบุไว้อย่างชัดเจนด้วย op ส่วนคำสั่งชนิด R (เรจิสเตอร์) ต้องมีฟีลด์ funct (ฟังก์ชัน) เพิ่มขึ้นมาเพื่อเจาะจงการดำเนินการที่แน่นอน ฟีลด์ที่ใช้ในคำสั่งสามชนิดมีดังนี้
6 5 5 5 5 6 บิต [ op | rs | rt | rd |shamt| funct] ชนิด R [ op | rs | rt | address/immediate] ชนิด I [ op | target address ] ชนิด J
rs, rt, และ rd คือเรจิสเตอร์ที่ถูกดำเนินการ; shamt คือปริมาณการเลื่อน; address หรือ immediate คือค่าที่ถูกดำเนินการโดยตรง
ตัวอย่าง การบวกเรจิสเตอร์ 1 กับเรจิสเตอร์ 2 แล้วเก็บผลลัพธ์ไว้ในเรจิสเตอร์ 6 เขียนได้ดังนี้
[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 ฐานสิบ 000000 00001 00010 00110 00000 100000 ฐานสอง
การบรรจุค่าให้กับเรจิสเตอร์ 8 โดยนำค่ามาจากเซลล์หน่วยความจำที่ 68 ถัดจากตำแหน่งที่ระบุในเรจิสเตอร์ 3 เขียนได้ดังนี้
[ op | rs | rt | address/immediate] 35 3 8 68 ฐานสิบ 100011 00011 01000 00000 00001 000100 ฐานสอง
การกระโดดไปที่ตำแหน่ง 1024 เขียนได้ดังนี้
[ op | target address ] 2 1024 ฐานสิบ 000010 00000 00000 00000 10000 000000 ฐานสอง
ความสามารถในการอ่านได้โดยมนุษย์
รหัสเครื่องไม่สามารถอ่านได้อย่างยิ่ง ดังเช่นที่สำนักงานลิขสิทธิ์แห่งสหรัฐ (United States Copyright Office) ไม่สามารถระบุได้ว่า โปรแกรมที่เข้ารหัสแล้วแต่ละโปรแกรมเป็นผลงานต้นฉบับของผู้ถือลิขสิทธิ์หรือไม่ อย่างไรก็ตามสำนักงานลิขสิทธิ์ก็อนุญาตให้จดทะเบียนลิขสิทธิ์ของโปรแกรมคอมพิวเตอร์ได้ (Douglas Hofstadter) ได้เปรียบเทียบรหัสเครื่องกับรหัสพันธุกรรมว่า "การมองดูโปรแกรมที่ถูกเขียนเป็นรหัสเครื่อง ก็เทียบได้อย่างกว้าง ๆ กับการมองดูโมเลกุลดีเอ็นเอทีละอะตอม"
อ้างอิงและเชิงอรรถ
- ตัวอย่างเช่น ภาษาเบสิกหลายรุ่น โดยเฉพาะรุ่นแรก ๆ ภาษาสมอลล์ทอล์ก แมตแล็บ ภาษาเพิร์ล ภาษาไพทอน ภาษารูบี และภาษาสคริปต์หรือภาษาอื่นที่มีจุดประสงค์เฉพาะ
- Immediate operands
- Pamela Samuelson (Sep 1984). "CONTU Revisited: The Case against Copyright Protection for Computer Programs in Machine-Readable Form". 1984 (4). Duke Law Journal: 663–769. JSTOR 1372418.
{{}}
: Cite journal ต้องการ|journal=
((help))CS1 maint: postscript () - "Copyright Registration for Computer Programs" (PDF). US Copyright Office. August 2008. สืบค้นเมื่อ February 23, 2014.
- D. Hofstadter (1980). "Gödel, Escher, Bach: An Eternal Golden Braid": 290.
{{}}
: Cite journal ต้องการ|journal=
((help))CS1 maint: postscript ()
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
rhsekhruxng hrux phasaekhruxng khuxklumkhxngkhasngekhruxngthikrathakarodytrngodyhnwypramwlphlklang CPU khxngkhxmphiwetxr khasngekhruxngaetlakhasngcaptibtinganechphaakicnganediywethann echnkarbrrcu load karkraodd jump hruxkardaeninkarphanhnwykhanwnaelatrrka ALU bnhnwykhxngkhxmulinhnwykhwamcahruxercisetxr thuk opraekrmthikrathakarodyhnwypramwlphlklangsrangkhuncakxnukrmkhxngkhasngekhruxngechnwanncxphaphaesdngrhsekhruxngin aesdngkarthayxnklbepnrhsaexsesmbli phrxmdwyercisetxrkhxnghnwypramwlphl aelakhxmulethxxkcakhnwykhwamca rhsekhruxngechingtwelkh sungimich xacphicarnaidwaepntwaethnradbtasudkhxngopraekrmkhxmphiwetxrthiidkhxmiphlaela hruxekhiyndwyphasaaexsesmbli hruxepnphasaopraekrmaebbdngedimaelakhunxyukbhardaewr thungaemwaeracasamarthekhiynopraekrmdwyrhsekhruxngechingtwelkhodytrngkid aetkarcdkarbittang epnexkeths aelakarkhanwntaaehnngthixyukbkhakhngtwechingtwelkhdwymux cathaihnaebuxhnayaelamiaenwonmthicaekidkhwamphidphlad dngnnkarekhiynrhsekhruxngcungimkhxykrathakninthukwnni ewnaetinsthankarnthitxngkarthaihehmaasmxyangthisudhruxaekcudbkphrxng pccubnniopraekrmekuxbthnghmdinthangptibtiekhiynkhundwyphasaaexsesmblihruxphasaradbsungkwa aelwaeplepnrhsekhruxngthikrathakaridodykhxmiphelxraela hrux kblingekxr xyangirkdi opraekrmthiekhiyndwycaimthukaeplepnrhsekhruxng thungaemwaxinethxrphrietxr sungxacehnepnchux twkrathakar hrux twpramwlphl odythwipprakxbkhuncakrhsekhruxngthikrathakaridodytrngkhasngekhruxngthiepnrhsekhruxnghnwypramwlphlhruxtrakulkhxnghnwypramwlphlthuk chinmichudkhxngkhasngekhruxng instruction set thiepnrhskhxngmnexng khasngekhruxngkhuxaebbruptang khxngbit sungkarxxkaebbechingkayphaphsxdkhlxngkbkhasngnganthiaetktangknkhxngekhruxng dngnnchudkhxngkhasngekhruxngcungichidkbpraephthkhxnghnwypramwlphlthiichsthaptykrrmediywkn karxxkaebbhnwypramwlphlrunhlnghruxruntxyxdkmkcarwmkhasngthnghmdkhxngrunkxnhnaiw aelaxacephimetimkhasngihmekhaipxikdwy hnwypramwlphlrunhlngxacykelikhruxepliynaeplngrhskhxngkhasngekhruxnginbangkhrng saehtuthwipkkhuxmncaepnsahrbcudprasngkhihm sngphlkrathbtxkhwamekhaknidkhxngrhsinbangkhxbkhay aemkrathnghnwypramwlphlthiekhaknidekuxbsmburnkxacaesdngphvtikrrmtangipcakedimelknxysahrbbangkhasng aetpyhaniphbidnxymak rabbtang kxacaetktangkninraylaexiydxun echn karcdkarhnwykhwamca rabbptibtikar hrux enuxngcaktampktiaelwopraekrmcayudthuxpccydngklaw rabbthiaetktangknkcaimthangandwyrhsekhruxngthiehmuxnkn thungaemwaichhnwypramwlphlchnidediywknktam rhskhxngchudkhxngkhasngekhruxngxacmikhwamyawethaknhmdthukkhasnghruxmikhwamyawaeprphnkid withikarcdkaraebbrupkhxngrhsekhruxngkhunxyukbsthaptykrrmnn epnxyangying aelamkcakhunxyukbchnidkhxngkhasng khasngekhruxngswnmakmifild opcode hnungfildhruxmakkwasungichrabuchnidkhxngkhasngphunthan echnelkhkhnit trrksastr karkraodd l aelakardaeninkaraethcring echnkarbwk karepriybethiyb aelamifildxun thixacichsahrbrabuchnidkhxng operand addressing mode xxfestkhxngtaaehnngthixyuhruxdchni hruxkhaaethcringodytwmnexng twthukdaeninkarthiepnkhakhngtwthibrrcuxyuinkhasngekhruxngechnnneriykwa khaichthnthi immediate imichwathukekhruxnghruxthukkhasngcamitwthukdaeninkarchdaecng accumulator machine mitwthukdaeninkarkhangsayaebbphsm aelakhunkhaphllphthintwsasm accumulator priyay sahrbkhasngelkhkhnitswnihy sthaptykrrmxun echn 8086 aelatrakul x86 mikhasngthrrmdainrunkhxngtwsasmxyudwy sungkhasngthiyawkwacathaercisetxrxnhnunginercisetxrthwipepntwsasm stack machine mitwthukdaeninkarswnihyhruxthnghmdxyubnkxngsxnpriyay khasngekhruxngthimicudprasngkhphiesskmkcakhadtwthukdaeninkarchdaecng twxyangechn siphiyuixdiinsthaptykrrm x86 ekhiynkhatang lnginercisetxrplaythangepnpriyay 4 ercisetxr khwamaetktangrahwangtwthukdaeninkarchdaecngkbpriyayechnnisakhytxopraekrmsrangrhsekhruxng odyechphaaxyangyingineruxngkarcdsrrercisetxraelaswntidtamphisyaebbsd opraekrmtharhsihehmaathisud code optimizer thidisamarthtidtamtwthukdaeninkarthngchdaecngaelapriyay sungxacchwyihekid constant propagation idbxyyingkhun constant folding khxngercisetxr ercisetxrthikahndihepnphllphthcakniphcnkhxngkhakhngtwcathukaethnthidwykhakhngtwnn aelakarprbprungrhsxun ihdikhunopraekrmopraekrmkhxmphiwetxrkhuxladbkhxngkhasngekhruxngthikrathakarodyhnwypramwlphlklang khnathihnwypramwlphlxyangngaykrathakarkhasngekhruxngthilakhasng aethnwypramwlphl superscalar samarthkrathakarkhasngekhruxngidphrxm knthilahlaykhasngphasaaexsesmblikarthxdkhwamrhsekhruxngthisamarthxanidngaykhunxyangmakxyanghnungkhuxphasaaexsesmbli sungepnphasathiichrhschwyca mnemonic code xangthungrhskhxngkhasngekhruxng aethnthicaichkhatwelkhkhxngkhasngekhruxngodytrng twxyangechn hnwypramwlphl Zilog Z80 rhsekhruxng 00000101 khuxkhasngthithaihhnwypramwlphlklangldkhaercisetxr B lnghnung caekhiynaethndwyphasaaexsesmbliwa DEC B epntntwxyang MIPS architecture idihtwxyangrhsekhruxngiw sungkhasngekhruxngkhxngmncamikhnad 32 bitesmx chnidkhxngkhasngkahnddwyfild op kardaeninkar khuxbitbnsud 6 bit khasngchnid J kraodd aelachnid I khaichthnthi carabuiwxyangchdecndwy op swnkhasngchnid R ercisetxr txngmifild funct fngkchn ephimkhunmaephuxecaacngkardaeninkarthiaennxn fildthiichinkhasngsamchnidmidngni 6 5 5 5 5 6 bit op rs rt rd shamt funct chnid R op rs rt address immediate chnid I op target address chnid J rs rt aela rd khuxercisetxrthithukdaeninkar shamt khuxprimankareluxn address hrux immediate khuxkhathithukdaeninkarodytrng twxyang karbwkercisetxr 1 kbercisetxr 2 aelwekbphllphthiwinercisetxr 6 ekhiyniddngni op rs rt rd shamt funct 0 1 2 6 0 32 thansib 000000 00001 00010 00110 00000 100000 thansxng karbrrcukhaihkbercisetxr 8 odynakhamacakesllhnwykhwamcathi 68 thdcaktaaehnngthirabuinercisetxr 3 ekhiyniddngni op rs rt address immediate 35 3 8 68 thansib 100011 00011 01000 00000 00001 000100 thansxng karkraoddipthitaaehnng 1024 ekhiyniddngni op target address 2 1024 thansib 000010 00000 00000 00000 10000 000000 thansxngkhwamsamarthinkarxanidodymnusyrhsekhruxngimsamarthxanidxyangying dngechnthisanknganlikhsiththiaehngshrth United States Copyright Office imsamarthrabuidwa opraekrmthiekharhsaelwaetlaopraekrmepnphlngantnchbbkhxngphuthuxlikhsiththihruxim xyangirktamsanknganlikhsiththikxnuyatihcdthaebiynlikhsiththikhxngopraekrmkhxmphiwetxrid Douglas Hofstadter idepriybethiybrhsekhruxngkbrhsphnthukrrmwa karmxngduopraekrmthithukekhiynepnrhsekhruxng kethiybidxyangkwang kbkarmxngduomelkuldiexnexthilaxatxm xangxingaelaechingxrrthtwxyangechn phasaebsikhlayrun odyechphaarunaerk phasasmxllthxlk aemtaelb phasaephirl phasaiphthxn phasarubi aelaphasaskhripthruxphasaxunthimicudprasngkhechphaa Immediate operands Pamela Samuelson Sep 1984 CONTU Revisited The Case against Copyright Protection for Computer Programs in Machine Readable Form 1984 4 Duke Law Journal 663 769 JSTOR 1372418 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite journal title aemaebb Cite journal cite journal a Cite journal txngkar journal help CS1 maint postscript lingk Copyright Registration for Computer Programs PDF US Copyright Office August 2008 subkhnemux February 23 2014 D Hofstadter 1980 Godel Escher Bach An Eternal Golden Braid 290 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite journal title aemaebb Cite journal cite journal a Cite journal txngkar journal help CS1 maint postscript lingk bthkhwamkhxmphiwetxr xupkrntang hruxekhruxkhayniyngepnokhrng khunsamarthchwywikiphiediyidodykarephimetimkhxmuldkhk