คำถามติดแท็ก assembly

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

17
การเรียนรู้การชุมนุมช่วยในการเขียนโปรแกรมได้อย่างไร [ปิด]
ฉันเขียนโปรแกรมในภาษาระดับสูงกว่า (Python, C #, VBA, VB.NET) เป็นเวลาประมาณ 10 ปีและฉันไม่มีความเข้าใจอย่างสมบูรณ์เกี่ยวกับสิ่งที่เกิดขึ้น "ภายใต้ประทุน" ฉันสงสัยว่าการประชุมการเรียนรู้มีประโยชน์อย่างไรและจะช่วยฉันในฐานะโปรแกรมเมอร์ได้อย่างไร คุณช่วยให้ฉันมีทรัพยากรที่จะแสดงให้ฉันเห็นการเชื่อมต่อระหว่างสิ่งที่ฉันเขียนในรหัสระดับที่สูงขึ้นกับสิ่งที่เกิดขึ้นในการชุมนุม?
132 assembly 

7
นี่เป็นภาษาแอสเซมบลีหรือไม่
ในวัยเด็กของฉันฉันเคยเขียนโปรแกรมเกี่ยวกับเครื่องคิดเลขโซเวียต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 …

9
คอมไพเลอร์ตัวแรกทำยังไง?
ฉันมักจะสงสัยในสิ่งนี้และบางทีฉันต้องการบทเรียนประวัติศาสตร์ที่ดีเกี่ยวกับภาษาการเขียนโปรแกรม แต่เนื่องจากคอมไพเลอร์ส่วนใหญ่ในปัจจุบันทำใน C คอมไพเลอร์ตัวแรกที่สร้างขึ้น (AKA ก่อนหน้า C) หรือแปลภาษาทั้งหมดแค่ไหน? เมื่อพูดถึงเรื่องนี้ฉันยังไม่เข้าใจว่าภาษาแอสเซมบลีตัวแรกได้ทำอะไรฉันเข้าใจว่าภาษาแอสเซมบลีนั้นคืออะไร แต่ฉันไม่เห็นว่าพวกเขาใช้ภาษาแอสเซมบลีครั้งแรกได้อย่างไร คำสั่ง (เช่นmov R21) หรือ w / e ตั้งค่าให้เทียบเท่าไบนารี?

12
คอมพิวเตอร์ทำงานอย่างไร [ปิด]
นี่เป็นคำถามที่น่าอายเกือบ ... ฉันมีปริญญาด้านวิทยาศาสตร์คอมพิวเตอร์ (และกำลังอยู่ในขั้นที่สอง) ฉันทำงานเป็นนักพัฒนา. NET แบบเต็มเวลาเกือบห้าปี ฉันมักจะดูเหมือนมีอำนาจในสิ่งที่ฉันทำ แต่ฉันไม่รู้ว่าคอมพิวเตอร์ทำงานอย่างไร! ได้โปรดเปลือยกับฉันสักครู่ Google อย่างรวดเร็วของ 'วิธีการทำงานของคอมพิวเตอร์' จะให้ผลลัพธ์มากมายและมาก แต่ฉันพยายามหาที่ตอบสิ่งที่ฉันกำลังมองหา ฉันรู้ว่านี่เป็นคำถามที่ยิ่งใหญ่มากดังนั้นจริงๆถ้าคุณสามารถให้คำหลักหรือทิศทางได้ ฉันรู้ว่ามีส่วนประกอบ .... แหล่งจ่ายไฟ, เมนบอร์ด, RAM, CPU, ฯลฯ ... และฉันได้รับ 'ความคิดทั่วไป' ของสิ่งที่พวกเขาทำ แต่ฉันไม่เข้าใจว่าคุณไปจากสายของรหัสเช่นConsole.Readline()ใน. NET (หรือ Java หรือ C ++) และมีจริงทำสิ่ง แน่นอนว่าฉันรู้ตัว MSIL (ในกรณีของ. NET) และความมหัศจรรย์บางอย่างเกิดขึ้นกับคอมไพเลอร์ JIT และเปลี่ยนเป็นรหัสเนทีฟ (ฉันคิดว่า) ฉันบอกว่า Java นั้นคล้ายกันและ C ++ ตัดขั้นตอนกลางออกไป ฉันได้ทำการประกอบเมนเฟรมแล้วไม่กี่ปีมานี้ …

4
กระบวนการพัฒนาใช้สำหรับโค้ดในภารกิจของ Apollo 11 หรือไม่?
ภารกิจของ Apollo นั้นมีเทคโนโลยีไม่ซับซ้อนกว่าเครื่องคิดเลขพกพา จากลิงค์ที่นี่มีข้อมูลเกี่ยวกับ Apollo Guidance Computer (AGC) คอมพิวเตอร์แนะนำ Apollo บนบอร์ด (AGC) มีขนาดประมาณ 1 ลูกบาศก์ฟุตพร้อม RAM ขนาด 16 บิต 2K และ 36K ของหน่วยความจำแกนเชือกแบบมีสายแข็งที่มีสายทองแดงเป็นเกลียวหรือไม่มีเกลียวผ่านแกนแม่เหล็กขนาดเล็ก คำ 16- บิตโดยทั่วไปคือ 14 บิตของข้อมูล (หรือสอง op-codes), 1 sign bit และ 1 parity bit รอบเวลาคือ 11.7 ไมโครวินาที การเขียนโปรแกรมทำในภาษาแอสเซมบลีและในภาษาที่สื่อความหมายในโปแลนด์กลับ ดังนั้นฉันจึงสะดุดกับซอร์สโค้ดบางอย่างเมื่อฉันค้นคว้าสิ่งที่เกิดขึ้นที่นั่นและฉันสังเกตเห็นความคิดเห็นที่ดี (เช่นชั่วคราวฉันหวังว่าจะเป็นความหวัง) VRTSTART TS WCHVERT # Page 801 CAF …

3
ทำไมเรายังคงเติบโตสแต็คย้อนหลังได้
เมื่อทำการคอมไพล์รหัส C และดูแอสเซมบลีมันทั้งหมดจะมีสแต็กเติบโตแบบย้อนกลับดังนี้: _main: pushq %rbp movl $5, -4(%rbp) popq %rbp ret -4(%rbp)- หมายความว่าตัวชี้ฐานหรือตัวชี้สแต็คกำลังเคลื่อนย้ายที่อยู่หน่วยความจำแทนที่จะไปขึ้นหรือไม่? ทำไมถึงเป็นอย่างนั้น? ฉันเปลี่ยน$5, -4(%rbp)ไป$5, +4(%rbp)คอมไพล์และรันโค้ดและไม่มีข้อผิดพลาด เหตุใดเราจึงต้องย้อนกลับไปในหน่วยความจำสแต็ค
46 c  memory  assembly 

5
สิ่งนี้จะพอดีกับขนาด 64kb ได้อย่างไร?
ดังนั้นฉันมาที่แอสเซมบลี 2011 และมีการสาธิตตัวอย่างนี้เล่น: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded มันเป็นไฟล์เดียวเท่านั้นมันบอกว่าในกฎ ดังนั้นฉันจึงทำซ้ำพวกเขาทำให้มันเป็นไฟล์ขนาดเล็กได้อย่างไร
45 assembly 

15
ภาษามีอิทธิพลต่อการออกแบบ CPU อย่างไร [ปิด]
เรามักจะบอกว่าฮาร์ดแวร์ไม่สนใจภาษาที่โปรแกรมเขียนเนื่องจากเห็นเฉพาะรหัสไบนารี่ที่คอมไพล์ แต่นี่ไม่ใช่ความจริงทั้งหมด ยกตัวอย่างเช่นพิจารณา Z80 ผู้ต่ำต้อย ส่วนขยายไปยังชุดคำสั่ง 8080 มีคำแนะนำเช่น CPIR ซึ่งจะเป็นประโยชน์สำหรับการสแกนแบบ C (NULL สิ้นสุด) strlen()สตริงเช่นการดำเนินการ ผู้ออกแบบจะต้องระบุว่าการรันโปรแกรม C (ตรงข้ามกับ Pascal ที่ความยาวของสตริงอยู่ในส่วนหัว) เป็นสิ่งที่การออกแบบของพวกเขาน่าจะใช้ อีกตัวอย่างที่คลาสสิกเป็นเครื่องเสียงกระเพื่อม มีตัวอย่างอะไรอีกบ้าง? เช่นคำแนะนำจำนวนและประเภทของการลงทะเบียนโหมดการกำหนดแอดเดรสที่ทำให้ตัวประมวลผลเฉพาะสนับสนุนหลักการของภาษาเฉพาะหรือไม่ ฉันสนใจเป็นพิเศษในการแก้ไขครอบครัวเดียวกัน

10
แอสเซมบลีตัวแรกเขียนด้วยรหัสเครื่องหรือไม่
ฉันกำลังอ่านหนังสือองค์ประกอบของระบบคอมพิวเตอร์: การสร้างคอมพิวเตอร์สมัยใหม่จากหลักการแรกซึ่งมีโครงการที่ครอบคลุมการสร้างคอมพิวเตอร์จากบูลีนเกตจนถึงการใช้งานระดับสูง (ตามลำดับ) โครงการปัจจุบันที่ฉันกำลังทำอยู่กำลังเขียนแอสเซมเบลอร์โดยใช้ภาษาระดับสูงที่ฉันเลือกเพื่อแปลจากรหัสการแฮ็กไปเป็นรหัสเครื่องแฮ็ก (แฮ็คเป็นชื่อของแพลตฟอร์มฮาร์ดแวร์ที่สร้างขึ้นในบทก่อนหน้า) แม้ว่าฮาร์ดแวร์ทั้งหมดจะถูกสร้างขึ้นในเครื่องจำลอง แต่ฉันพยายามที่จะแกล้งทำเป็นว่าฉันกำลังสร้างแต่ละระดับโดยใช้เครื่องมือที่มีให้ฉัน ณ จุดนั้นในกระบวนการจริง ที่กล่าวว่ามันทำให้ฉันคิด การใช้ภาษาระดับสูงในการเขียนแอสเซมเบลอร์ของฉันนั้นสะดวกมาก แต่สำหรับแอสเซมเบลอร์แรกที่เคยเขียน (เช่นในประวัติศาสตร์) มันไม่จำเป็นต้องเขียนในรหัสเครื่องเนื่องจากเป็นสิ่งที่มีอยู่ในเวลานั้นหรือไม่? และคำถามที่มีความสัมพันธ์ ... แล้ววันนี้ล่ะ ถ้าสถาปัตยกรรม CPU ใหม่เอี่ยมออกมาพร้อมชุดคำสั่งใหม่และไวยากรณ์แอสเซมบลีใหม่เอี่ยมแอสเซมเบลอร์จะสร้างขึ้นได้อย่างไร ฉันสมมติว่าคุณยังคงสามารถใช้ภาษาระดับสูงที่มีอยู่เพื่อสร้างไบนารีสำหรับโปรแกรมแอสเซมเบลอร์เพราะถ้าคุณรู้ไวยากรณ์ของทั้งแอสเซมบลีและภาษาเครื่องสำหรับแพลตฟอร์มใหม่ของคุณแล้วงานเขียนแอสเซมเบลอร์ งานวิเคราะห์ข้อความและไม่เกี่ยวข้องโดยธรรมชาติกับแพลตฟอร์มนั้น (เช่นจำเป็นต้องเขียนในภาษาเครื่องของแพลตฟอร์มนั้น) ... ซึ่งเป็นเหตุผลที่ฉันสามารถ "โกง" ในขณะที่เขียนแอสเซมเบลอร์แฮ็คของฉันในปี 2012 และใช้มาก่อน ภาษาระดับสูงเพื่อช่วยฉัน

11
มันเป็นการฉลาดสำหรับนักพัฒนาระดับสูงที่จะใช้เวลาศึกษาประกอบหรือไม่? [ปิด]
เป็นที่ชัดเจนว่าความรู้เกี่ยวกับสิ่งต่าง ๆ ในระดับต่ำมีความสำคัญมากในการทำงานของเรา แต่ในสถานการณ์ที่คุณกำลังพัฒนาซอฟต์แวร์เชิงพาณิชย์อยู่ในระดับสูงและเมื่อคุณมีทิศทางที่เลือกอยู่แล้ว แต่ไม่มีทักษะการประกอบใด ๆ มันไม่สมเหตุสมผลหรือไม่ที่จะมุ่งเน้นศึกษาเรื่องที่เกี่ยวข้องกับทิศทางของคุณ? หรือมีเหตุผลที่คุณควรใช้เวลาในการเรียนรู้พื้นฐานระดับต่ำหรือไม่? มันจะสายเกินไปและเมื่อใด และถ้ามันยังไม่สายเกินไปคนเราจะเรียนรู้ได้อย่างเหมาะสมที่สุดอย่างไร (ในแง่ของการไม่ใช้เวลามากเกินไปในการทำความเข้าใจอย่างลึกซึ้ง)

13
การเขียนโปรแกรมระดับต่ำ - มีอะไรให้ฉันบ้าง [ปิด]
เป็นเวลาหลายปีที่ฉันได้พิจารณาการขุดลงไปในสิ่งที่ฉันคิดว่าเป็นภาษา "ระดับต่ำ" สำหรับฉันนี่หมายถึง C และการชุมนุม อย่างไรก็ตามฉันยังไม่มีเวลาสำหรับเรื่องนี้และมันก็ไม่จำเป็นเลย ตอนนี้เพราะฉันไม่เห็นความจำเป็นที่จะเกิดขึ้นฉันรู้สึกว่าฉันควรจะกำหนดเวลาในการศึกษาหัวข้อหรือวางแผนตลอดไป ตำแหน่งของฉัน ในช่วง 4 ปีที่ผ่านมาฉันได้มุ่งเน้นไปที่ "เทคโนโลยีเว็บ" ซึ่งอาจเปลี่ยนแปลงได้และฉันเป็นผู้พัฒนาแอปพลิเคชันซึ่งไม่น่าจะเปลี่ยนแปลงได้ ในการพัฒนาแอพพลิเคชั่นฉันคิดว่าการใช้งานเป็นสิ่งที่สำคัญที่สุด คุณเขียนแอปพลิเคชันที่จะ "บริโภค" โดยผู้ใช้ ยิ่งแอปพลิเคชั่นเหล่านั้นใช้งานได้มากเท่าไหร่คุณก็ยิ่งสร้างมูลค่าได้มากขึ้นเท่านั้น เพื่อให้บรรลุการใช้งานที่ดีฉันเชื่อว่าสิ่งต่อไปนี้เป็นไปได้ การออกแบบที่ดีดี: คุณสมบัติที่ถึงผู้ใช้สามารถเข้าถึงได้ผ่านส่วนต่อประสานผู้ใช้ที่มีความคิดดี ความถูกต้อง : การออกแบบที่ดีที่สุดไม่คุ้มค่าอะไรเลยหากใช้ไม่ถูกต้อง ความยืดหยุ่น : แอปพลิเคชัน A ควรมีการพัฒนาอยู่ตลอดเวลาเพื่อให้ผู้ใช้ไม่จำเป็นต้องเปลี่ยนไปใช้แอปพลิเคชัน B อื่นที่มีคุณสมบัติใหม่ที่ A สามารถนำไปใช้ได้ แอปพลิเคชันที่แก้ไขปัญหาเดียวกันไม่ควรมีคุณสมบัติแตกต่างกัน แต่ใช้หลักปรัชญา ประสิทธิภาพการทำงาน : ประสิทธิภาพก่อให้เกิดประสบการณ์การใช้งานที่ดี แอปพลิเคชันตอบสนองต่อความนึกคิดเสมอและทำงานได้อย่างรวดเร็วพอสมควร (ขึ้นอยู่กับความถี่) มูลค่าของการปรับประสิทธิภาพให้ดีขึ้นกว่าจุดที่ผู้ใช้สงสัย ฉันคิดว่าการเขียนโปรแกรมระดับต่ำจะไม่ช่วยฉันยกเว้นเรื่องประสิทธิภาพ แต่การเขียนแอพทั้งหมดในภาษาระดับต่ำเพื่อประสิทธิภาพการทำงานก็คือการปรับให้เหมาะสมก่อนเวลาสำหรับฉัน คำถามของฉัน การเขียนโปรแกรมระดับต่ำสามารถสอนอะไรฉันได้ภาษาอื่นจะไม่สอนฉัน ฉันขาดอะไรบางอย่างหรือเป็นเพียงทักษะที่ใช้ในการพัฒนาแอพพลิเคชั่นน้อยมาก? โปรดเข้าใจว่าฉันไม่ได้ตั้งคำถามเกี่ยวกับคุณค่าของ C และชุดประกอบ เป็นเพียงแค่ในชีวิตประจำวันของฉันฉันมีความสุขมากที่ความสลับซับซ้อนทั้งหมดของโลกนั้นถูกแยกออกไปและจัดการให้ฉัน …

1
คำอธิบายตัวชี้เฟรม
ในชุด MIPSมีการลงทะเบียนสำหรับตัวชี้สแต็กและการลงทะเบียนอีกครั้งสำหรับตัวชี้เฟรม ตัวชี้เฟรมคืออะไรและมีจุดประสงค์อะไร? มันแตกต่างจากตัวชี้สแต็คอย่างไร
28 assembly  stack 

5
มีหนังสือบัญญัติในชุด x86 หรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา มีหนังสือมากมายในการชุมนุม อย่างไรก็ตามพวกเขามักจะจัดการกับ ISAs ซึ่งฉันไม่สนใจเช่น MIPS หรือ ARM ฉันไม่ได้จัดการกับสถาปัตยกรรมเหล่านี้ ไม่มีเหตุผลที่ฉันจะพยายามเรียนรู้พวกเขา แต่หนังสือประกอบ x86 ดูเหมือน ... ไม่มีอยู่จริง สมมติว่าฉันกำลังพยายามสร้างคอมไพเลอร์ของเล่นที่สร้างไฟล์ Windows Portable Executable มีหนังสือออกบ้างไหมว่าเป็นมาตรฐาน de-facto สำหรับอธิบายวิธีปฏิบัติที่ดีที่สุดวิธีการออกแบบและข้อมูลที่เป็นประโยชน์อื่น ๆ ในชุดประกอบ x86? หนังสือเล่มไหนที่ทำให้มันพิเศษ?
25 learning  books  assembly  x86 

3
ทำไมคำสั่งการคัดลอกมักใช้ชื่อว่า MOV?
ในแอสเซมบลีค่อนข้างมากคำสั่งการคัดลอกค่ามักจะชื่อ "MOV" และคำอธิบายในคู่มือมักจะมี "ย้าย" (อย่างไรก็ตามคำอื่น ๆ สามารถใช้เช่น "โหลด", "เก็บ", "เก็บ", "แยก" ฯลฯ ) ) เป็นเรื่องแปลกที่จะหาISA ) ที่ไม่ปฏิบัติตามอนุสัญญานี้ ในทางตรงกันข้ามในบริบทอื่น ๆ "ย้าย" แตกต่างจาก "คัดลอก" ในแง่ที่แหล่งที่ถูกทำลาย (ตัวอย่างเช่น "mv" กับ "cp" ใน Unix ย้าย [F6] ในนอร์ตันผู้บัญชาการและโคลน ฯลฯ ) "การย้าย" ของ Assembler มีความหมาย "การคัดลอก" จริง ๆ ทำให้ค่าของแหล่งข้อมูลครบถ้วน ฉันพบว่าสิ่งนี้เริ่มต้นอย่างน้อยตั้งแต่IBM 1401 (1959) แต่IBM 360ใช้คำนี้เฉพาะสำหรับการคัดลอกในหน่วยเก็บข้อมูล แต่ไม่ได้สำหรับการดำเนินการระหว่างการลงทะเบียนและหน่วยเก็บข้อมูล (ซึ่งใช้ "load" …
23 history  assembly 

3
ฉันต้องการสร้างเครื่องเสมือนมีการอ้างอิงที่ดีหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังมองหาการสร้างเครื่องเสมือนเป็นวิธีที่เป็นอิสระจากแพลตฟอร์มในการรันโค้ดเกมบางส่วน เสมือนเครื่องที่ฉันรู้ในการเล่นเกมจะค่อนข้างเก่า: Infocom ของZ-เครื่อง , LucasArts' SCUMM , id ซอฟต์แวร์ของ3 Quake ในฐานะนักพัฒนา. net ฉันคุ้นเคยกับCLRและดูคำแนะนำ CILเพื่อดูภาพรวมของสิ่งที่คุณใช้จริงในระดับ VM (เทียบกับระดับภาษา) ฉันได้ขลุกอยู่ที่6502 Assemblerในช่วงปีที่แล้ว สิ่งนี้คือตอนนี้ที่ฉันต้องการที่จะใช้หนึ่งฉันต้องขุดลึกลงไปอีกนิด ฉันรู้ว่ามี stack based และลงทะเบียน VMs แต่ฉันไม่รู้จริงๆว่าอันไหนดีกว่าในเรื่องอะไรและถ้ามีแนวทางแบบไฮบริดมากกว่านี้ ฉันต้องจัดการกับการจัดการหน่วยความจำตัดสินใจว่าประเภทระดับต่ำเป็นส่วนหนึ่งของ VM และต้องเข้าใจว่าทำไมสิ่งเช่นldstr จึงทำงานเหมือนที่เป็นอยู่ หนังสืออ้างอิงเดียวของฉัน (นอกเหนือจากสิ่งของ Z-Machine) คือมาตรฐานการทำหมายเหตุประกอบของ CLIแต่ฉันสงสัยว่ามีการบรรยายที่ดีกว่าทั่วไป / พื้นฐานสำหรับ VM หรือไม่ …

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