นี่เป็นภาษาแอสเซมบลีหรือไม่


70

ในวัยเด็กของฉันฉันเคยเขียนโปรแกรมเกี่ยวกับเครื่องคิดเลขโซเวียตMK-61 มีทะเบียนปฏิบัติการสี่ตัว (X, Y, Z, T) และที่เก็บข้อมูล 15 รายการ โปรแกรมอาจมี 105 ขั้นตอน

ในขณะที่ฉันจำได้มันมีคำสั่งเช่น:

  • สลับการลงทะเบียน X และ Y
  • Shift register (Z ถึง T, Y ถึง Z, X ถึง Y)
  • คัดลอกจากที่เก็บข้อมูลทะเบียน (1..15) ถึง X
  • คัดลอกจาก X ไปยังที่เก็บข้อมูลการลงทะเบียน (1..15)
  • ถ้า X <0 ให้ไปที่ขั้นตอนของโปรแกรม ##
  • ดำเนินการ (+, -, *, /) โดยใช้ค่า X และ Y และวางผลลัพธ์เป็น X

คำสั่งนี้ตั้งค่าภาษาแอสเซมบลีหรือไม่ ฉันมีความคิดพื้นฐานเกี่ยวกับภาษาแอสเซมบลีโดยใช้อุปกรณ์นี้หรือไม่?

เครื่อง

แต่กลับกลายเป็นว่ามันเป็นสิ่งที่เรียกว่า"การเขียนโปรแกรมการกดแป้นพิมพ์"

ตลกจริง: เครื่องคิดเลขที่คล้ายกัน (เช่นนี้ แต่มีหน่วยความจำพลังงานอิสระ) ถูกใช้เป็นฮาร์ดแวร์สำรองสำหรับการคำนวณเส้นทางการปฏิบัติภารกิจอวกาศในปี 1988 :-)


ดี! - ภาพนั้นนำความทรงจำกลับมา ฉันยังคงมี MK-52 ของฉันในห้องใต้ดินที่ใดที่หนึ่ง :)
DXM

ดูเหมือนว่าจะเป็นโคลนโซเวียตของ HP 65 มันอาจถูกตั้งโปรแกรมไว้ใน Reverse Polish Notation ด้วยการดำเนินการที่ผลักและดึงสแต็ก ตัวดำเนินการ RPN นั้นถูกบันทึกไว้ในหน่วยความจำและตีความโดยสิ่งที่อาจเทียบเท่ากับ 4004 CPU รหัสใน 4004 ROM อาจถูกรวบรวมจากแอสเซมเบลอร์ 4004 แต่การกดแป้นเป็นเหมือนมาโครสเปรดชีต
เมเรดิ ธ แย่

คำตอบ:


13

นี่ไม่ใช่ภาษาแอสเซมบลีนี่เป็นภาษาเครื่อง

ภาษาเครื่องเป็นสิ่งที่มีความหมายทางกายภาพกับเครื่อง ในกรณีของคอมพิวเตอร์พกพาก็จะเป็นการกดปุ่มเข้ารหัสเป็นตัวเลขในเครื่อง คุณไม่ได้ให้ข้อมูลเพิ่มเติมเกี่ยวกับเครื่อง Electronika MK61นี้ดังนั้นฉันจะให้ตัวอย่างของTI-57 : ภาษาเครื่องใช้หมายเลขของคีย์ที่ให้ไว้เป็นคอลัมน์ในหน่วยสิบและบรรทัดในหน่วย ตัวอย่างเช่นโปรแกรมที่จะเพิ่มหน่วยความจำ 8 จะเป็น:

33 8  57 1 58 23

นี่คือภาษาเครื่อง: เป็นสิ่งที่ตีความโดยเครื่องโดยตรง

ภาษาแอสเซมบลีจะเป็นข้อความที่มนุษย์อ่านได้ :

RCL 8 
+
1
=
STO 8

ในการแปลงข้อความนี้เป็นลำดับของรหัสเครื่องคุณจะต้องมีแอสเซมเบลอร์ซึ่งอาจเป็นโปรแกรมหรือคนที่จะแปลข้อความนั้นเป็นลำดับของตัวเลข

ความสับสนมักเกิดขึ้นบ่อยครั้งเนื่องจากมีการแปลโดยตรงจากภาษาแอสเซมบลีเป็นภาษาเครื่อง แต่นี่ไม่ใช่การแปลโดยตรงทั้งหมด: แอสเซมเบลอร์แมโครมีแมโครที่ทรงพลังซึ่งอาจทำงานได้มากในแอสเซมเบลอร์ คำแนะนำภาษาเครื่องจำนวนมากจากคำสั่งการประกอบเดียว การแปลที่อยู่เชิงสัญลักษณ์เพียงอย่างเดียวอาจเกี่ยวข้องกับการเปลี่ยน op-code ของคำสั่งสาขา (ตัวอย่างเช่นเมื่อเปลี่ยนจากที่อยู่ญาติสั้นไปเป็นญาติยาวหรือที่อยู่สมบูรณ์) ดังนั้นจึงไม่ตรงตามที่คุณคิด


36

ฉันจะบอกว่าคำตอบของคำถามทั้งสองส่วนของคุณคือไม่: คำสั่งของเครื่องคิดเลขนี้ไม่เหมือนภาษาแอสเซมบลีและการเขียนโปรแกรมเครื่องคิดเลขนี้แตกต่างจากการเขียนโปรแกรมในภาษาแอสเซมบลี

"ภาษา" เครื่องคิดเลขนี้ตั้งโปรแกรมอยู่ในระดับค่อนข้างต่ำ แต่ก็ยังคงเป็นนามธรรมที่ด้านบนของโครงสร้างระดับล่างที่ไม่ปรากฏให้คุณเห็นในฐานะโปรแกรมเมอร์ ฉันคาดเดาเล็กน้อย แต่จากคำอธิบายของคุณและจากการดูแป้นพิมพ์ (และเปรียบเทียบกับเครื่องคิดเลขที่มีลักษณะคล้ายกันจาก Hewlett Packard หรือ Texas Instruments จากปลายปี 1970 และต้นทศวรรษ 1980) ฉันบอกว่าแต่ละโปรแกรม "ขั้นตอน "ไม่เพียง แต่เป็นการดำเนินการอย่างง่ายเช่น" เพิ่ม "หรือ" สลับ X & Y "แต่ยังมีการดำเนินการที่ซับซ้อนมากขึ้นเช่นตรีโกณมิติการยกกำลังลอการิทึม ฯลฯ แต่ละขั้นตอนเหล่านี้อาจถูกนำมาใช้เป็นรูทีนไมโครโค้ดภายใน ไมโครโค้ดนั้นน่าจะถูกโปรแกรมในภาษาแอสเซมบลี แต่ฉันไม่คิดว่า '

ดังที่คนอื่น ๆ อธิบายไว้ภาษาแอสเซมบลีมักจะอยู่ใกล้กันมาก (ถ้าไม่ใช่ 1: 1) การติดต่อกับสิ่งอำนวยความสะดวกของเครื่องต้นแบบ ฉันว่าการเขียนโปรแกรมภาษาแอสเซมบลีรวมถึงลักษณะต่อไปนี้ที่อาจไม่ปรากฏในการเขียนโปรแกรมเครื่องคิดเลขนี้

  • การดำเนินงานรวมถึงการดำเนินงานในระดับที่ต่ำกว่าเช่นบิตและ AND, OR, แฮคเกอร์; เลขจำนวนเต็มและ (อาจ) เลขทศนิยมสำหรับจำนวนข้อมูลที่หลากหลาย (เช่นความแม่นยำเดี่ยวหรือสองครั้ง) โหลด / จัดเก็บขนาดต่าง ๆ (ไบต์, ครึ่งคำ, คำอื่น ๆ )

  • การดำเนินการระดับสูงกว่า (ตรีโกณมิติลอการิทึม) มักเรียกรูทีนย่อยไม่ใช่คำสั่ง มีข้อยกเว้นบางประการเช่น DEC VAX ซึ่งมีคำแนะนำการประเมินพหุนาม [แก้ไข: OP ชี้ให้เห็นว่า x87 ยังมีฟังก์ชันตรีโกณฯ อีกด้วย]

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

  • การจัดเรียงหน่วยความจำถูกเปิดเผย ตัวอย่างเช่นในหลาย ๆ เครื่องคำ 4 ไบต์สามารถโหลดจากหรือเก็บไว้ในที่อยู่ที่มีหลายรายการเป็น 4 ไบต์เท่านั้น

  • การแสดงข้อมูลถูกเปิดเผย โดยทั่วไปแล้วแอสเซมบลีจะมีวิธีในการระบุข้อมูลตัวเลขในฐานสิบหกฐานแปดฐานสิบทศนิยมและข้อมูลอักขระบางครั้ง

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

  • รูทีนย่อยการเรียกการประชุมถูกเปิดเผย อาร์กิวเมนต์และค่าส่งคืนอาจถูกส่งผ่านในรีจิสเตอร์หรือส่งไปยังและแตกจากสแต็ก (สแต็กนี้มักจะเป็นพื้นที่ของหน่วยความจำที่ระบุโดยการลงทะเบียนสแต็กเตอร์พิเศษไม่ตั้งค่าคงที่เช่น XYZ และ T)

  • คุณอาจจำเป็นต้องรู้วิธีการโต้ตอบกับระบบปฏิบัติการหรือหากไม่มีวิธีการจัดการกับฮาร์ดแวร์ระดับต่ำ ด้วยระบบปฏิบัติการคุณจะต้องโหลดอาร์กิวเมนต์ลงในรีจิสเตอร์ (หรือสแต็ก) และดักจับลงในเคอร์เนล หากไม่มีระบบปฏิบัติการคุณอาจต้องจัดการกับอินเตอร์รัปต์และตัวจับเวลา

ความทรงจำเกี่ยวกับการเขียนโปรแกรมชุดประกอบของฉันคือมันเจ็บปวดมาก ฉันคิดว่าการเขียนโปรแกรมเครื่องคิดเลขนี้ง่ายและสนุกโดยการเปรียบเทียบ (ขออภัย.)


1
1) ดีก็มีการดำเนินการบางบิต AND, OR แฮคเกอร์, NOT - สัญลักษณ์สีฟ้า, , และИНВ(ซึ่งหมายความว่า INV) บนแป้นพิมพ์ 2) ฉันคิดว่า sine, cosine เป็นต้นเป็นคำแนะนำตามref.x86asm.net/coder32.htmlอ้างอิงนี้สำหรับโปรเซสเซอร์ x86 แต่แน่นอนฉันเห็นด้วยกับคุณว่าผู้ประกอบมีความซับซ้อนมากขึ้น
defhlt

หากคุณต้องการ refrence สำหรับการเรียนการสอน VMS ที่ตั้งการดำเนินงาน - deathrow.vistech.net/... บิตความสนุกอื่น ๆ สามารถพบได้ในesolangs.org/wiki/…

25

ใช่ว่าดูเหมือนภาษาแอสเซมบลีสำหรับฉัน

เป็นการยากที่จะบอกว่าจริง ๆ แล้วเป็นการชุมนุมเพียงคำอธิบายเพราะคำจำกัดความ - ภาษาที่คำสั่งแมป 1: 1 พร้อมกับรหัสเครื่องของแพลตฟอร์มเป้าหมาย - เป็นการยากที่จะกำหนดโดยปราศจากความรู้เกี่ยวกับรหัสเครื่องเอง แต่นั่นฟังดูเหมือนวิธี ASM ทำงานบนแพลตฟอร์มอื่น ๆ


11

มันมีความคล้ายคลึงกันอย่างใกล้ชิดกับภาษาแอสเซมบลี แต่ฉันจะเถียงว่านั่นไม่ใช่สิ่งที่มันเป็นจริง

ในภาษาแอสเซมบลีการดำเนินการส่วนใหญ่แมปคำสั่ง 1-to-1 กับ CPU มีข้อยกเว้นบางประการเช่นมาโครและ pseudo-ops (เช่นพูดคำสั่ง CLEAR ที่ XORs ลงทะเบียนด้วยตัวเองจริงๆ); จุดที่แท้จริงคือแอสเซมบลีโปรแกรมกำหนดคำสั่งของ CPU ที่จะสร้าง (นั่นคือความแตกต่างพื้นฐานระหว่างภาษาแอสเซมบลีและภาษาระดับสูงกว่าเช่น C ในตอนหลังโปรแกรมจะระบุพฤติกรรม )

เครื่องคิดเลขนั้นมีซีพียูอย่างแน่นอน แต่ฉันสงสัยว่าคำสั่งซีพียูแต่ละตัวอ้างถึง X, Y, Z และ T "รีจิสเตอร์" หรือดำเนินการในระดับสูงเช่นxyหรือsin(หรือПРГอะไรก็ตามที่มีความหมาย!)

แต่ฉันแน่ใจว่าการดำเนินการที่มองเห็นได้ส่วนใหญ่หรือส่วนใหญ่จะทำในขณะที่เรียกรูทีนย่อย และสำหรับการดำเนินการแต่ละครั้งจะต้องมีงานพิเศษจำนวนมากที่ต้องทำเพื่อแสดงผลลัพธ์

คุณสามารถนึกถึงการดำเนินการที่มองเห็นได้เป็นภาษาแอสเซมบลีสำหรับเครื่องเสมือนระดับสูง แต่เครื่องเสมือนนั้นได้รับการติดตั้งผ่านทางบางอย่างเช่นล่ามที่ทำงานบน CPU จริง

ยังฉันจะบอกว่าคำตอบสำหรับส่วนที่สองของคำถามของคุณ:

ฉันมีความคิดพื้นฐานเกี่ยวกับภาษาแอสเซมบลีที่ใช้อุปกรณ์นี้หรือไม่?

ใช่


1
กล่องของเราไม่มี AX, BX, CX & DX อย่างใดอย่างหนึ่ง - ภาษาประกอบได้รับอนุญาตการแปลสัญลักษณ์ ฉันเห็นด้วยว่าฟังก์ชั่นระดับสูงอย่างแน่นอนที่สุดไม่ได้ประกอบ แต่ทราบว่าสิ่งที่เขาแสดงไม่รวมถึงพวกเขา ในขณะที่ฉันคิดว่ามันไม่น่าเป็นไปได้ที่มันจะเป็นภาษาแอสเซมบลี (ทุกอย่างจะต้องมีความยาวคงที่สำหรับโหมดการกำหนดแอดเดรสให้ทำงาน) ไม่มีคำสั่งใด ๆ ที่แสดงรายการอยู่เหนือสิ่งที่แอสเซมเบลอร์บนพีซี
Loren Pechtel

2
"ถ้า X <0 ให้ไปที่ขั้นตอนของโปรแกรม ##" คือคำสั่งการประกอบ BMI (สาขาถ้าลบ) อย่างง่าย
mouviciel

1
@mouviciel และแม้ว่าแพลตฟอร์มจะไม่สนับสนุนบางสิ่งบางอย่างโดยตรงBMIตัวอย่างIF ... THEN ...มักจะอ่านเป็นสองคำแนะนำ: การเปรียบเทียบครั้งแรก ( x < 0ในกรณีนี้) แล้วการกระทำตามผลของการเปรียบเทียบ (น่าจะกระโดดเมื่อทำงาน ในภาษาแอสเซมบลี) ใน Intel 8086 บางอย่างเช่น (สมมติว่าอยู่ในขวาน)x CMP AX, 0 JNL After_IfThen_Block(JNL กำลังจะกระโดดถ้าไม่น้อยกว่าในภาษาระดับสูงกว่านี้จะอ่านเป็นสิ่งที่ต้องการif not (x < 0) then goto After_IfThen_Blockซึ่งเป็นเช่นเดียวกับif (x >= 0) then {code until there}.)
CVn

1
ПРГ(PRG - การเขียนโปรแกรม) เป็นเพียงเมตาคีย์เพื่อเปลี่ยนเป็นโหมดการเขียนโปรแกรมไม่ใช่ฟังก์ชั่นบางอย่าง
Oleg V. Volkov

1
@mouviciel: ฉันสงสัยว่า "ถ้า X <0 จากนั้นไปที่ขั้นตอนโปรแกรม ##" ถูกนำมาใช้จริงเป็นคำสั่ง CPU ของฮาร์ดแวร์เดียว ฉันคาดเดาว่าโปรแกรมที่ป้อนในเครื่องคิดเลขไม่ได้ถูกจัดเก็บตามลำดับของคำสั่ง CPU ค่อนข้างจะจัดเก็บตามลำดับขั้นสูงที่ตีความโดยโปรแกรมเฟิร์มแวร์ ฉันไม่เคยทำงานกับเครื่องคิดเลขนี้มาก่อน แต่ฉันใช้ HP-48 แล้ว ชุดคำสั่งที่ผู้ใช้มองเห็นได้นั้นแตกต่างจากชุดคำสั่งของ Saturn CPU มาก
Keith Thompson

9

ถูกต้องแล้วส่วนของโค้ดที่โพสต์ดูเหมือนภาษาแอสเซมบลี การแปลงรหัสนี้อย่างเหมาะสมจะเป็นตัวกำหนดรุ่น

แก้ไข:มันมีบางภาษาที่เฉพาะเจาะจงสำหรับอุปกรณ์นี้ แต่มันไม่ได้ประกอบ

นอกจากนี้ยังมีลักษณะเหมือนเครื่องคิดเลขที่ทำจากสหภาพโซเวียต มันทำงานบนแบตเตอรี่ / สายโค้งมนหรือไม่?


3
ถูกต้องมันถูกผลิตในยูเครนโซเวียตตั้งแต่กลางยุค 80 ฉันมีหนึ่งที่ทำในปี 1991 มันมีทั้งช่องสำหรับแบตเตอรี่ 3 AA และอะแดปเตอร์ 220v
defhlt

1
นี่เป็นความคิดถึงสำหรับฉันจริงๆ ฉันจำชื่อแบรนด์นี้ "Elektronika" :)
EL Yusubov

3

ฉันจะโต้แย้งว่าคุณเข้าใกล้ไฮบริดภาษาแอสเซมบลีพื้นฐาน แต่มันขึ้นอยู่กับซีพียูและสถาปัตยกรรมพื้นฐานจริงๆ ไม่จำเป็นต้องเข้าถึงหน่วยความจำโดยตรงหากคุณไม่มี RAM จริงที่จะพูด การดำเนินการจุดลอยตัวก็ไม่จำเป็นต้องมีอยู่หากปราศจาก FPU

ฉันคิดว่าการทดสอบอย่างง่ายจะเป็นการเพิ่มเลขทศนิยมและจำนวนเต็ม ภาษาโปรแกรมระดับสูงส่วนใหญ่จะยอมรับ ADD 2.5, 7 และกลับ 9.5 ภาษาแอสเซมบลีอย่างไรก็ตามจะแตกต่างเอาท์พุทตามคำสั่งที่เรียกว่าและขึ้นอยู่กับการแสดงหมายเลขพื้นฐานในไบนารี ภาษาแอสเซมบลีส่วนใหญ่ต้องการคำสั่งต่าง ๆ ที่จะใช้ขึ้นอยู่กับการใช้ floating point และการดำเนินการจำนวนเต็ม ข้อยกเว้นนี้อาจเป็นรูปแบบจุดคงที่บางประเภท


มันสามารถปฏิบัติต่อตัวเลขทั้งหมดเป็นแบบลอยและพิจารณาหนึ่งในข้อโต้แย้ง 7.0
Oleg V. Volkov

@ OlegV.Volkov อาจอย่างไรก็ตามคุณเพียงแค่เลือกตัวเลขทศนิยมสองตัวที่ผลรวมไม่มีการแทนค่าจริง นอกจากนี้คุณสามารถตามล่าหาข้อผิดพลาดในการยกเลิกการลบ
ปีเตอร์สมิ ธ

3

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

คุณสามารถ "หมุน" สแต็กเพื่อย้ายค่าเนื่องจากค่าที่แสดงคือสมาชิกสแต็ก ผลลัพธ์อาจถูกสลับหรือซ้อนกันตามความจำเป็นเพื่อทำการคำนวณที่ซับซ้อน หากคุณเข้าใจฮาร์ดแวร์สแต็กและภาษาแอสเซมบลีเครื่องคิดเลขนี้เป็นเรื่องง่ายที่จะเรียนรู้เนื่องจากกระบวนทัศน์ของมันคล้ายกันมากที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.