โปรแกรมภาษาแอสเซมบลี 8086 อย่างง่ายพร้อมคำอธิบาย

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





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

การเขียนโปรแกรมระดับแอสเซมบลี 8086

การเขียนโปรแกรมระดับแอสเซมบลี 8086



การเขียนโปรแกรมระดับแอสเซมบลี 8086

ภาษาโปรแกรมแอสเซมบลี เป็นภาษาระดับต่ำซึ่งพัฒนาโดยใช้การจำ ไมโครคอนโทรลเลอร์หรือไมโครโปรเซสเซอร์สามารถเข้าใจเฉพาะภาษาไบนารีเช่น 0 หรือ 1 เท่านั้นดังนั้นแอสเซมเบลอร์จึงแปลงภาษาแอสเซมบลีเป็นภาษาไบนารีและเก็บไว้ในหน่วยความจำเพื่อดำเนินการ ก่อนที่จะเขียนโปรแกรมนักออกแบบแบบฝังต้องมีความรู้เพียงพอเกี่ยวกับฮาร์ดแวร์เฉพาะของคอนโทรลเลอร์หรือโปรเซสเซอร์ก่อนอื่นเราต้องรู้จักฮาร์ดแวร์ของโปรเซสเซอร์ 8086 ก่อน


ฮาร์ดแวร์ของโปรเซสเซอร์

ฮาร์ดแวร์ของโปรเซสเซอร์



สถาปัตยกรรมโปรเซสเซอร์ 8086

8086 เป็นโปรเซสเซอร์ที่แสดงสำหรับอุปกรณ์ต่อพ่วงทั้งหมดเช่นบัสอนุกรมและ RAM และ ROM อุปกรณ์ I / O เป็นต้นซึ่งทั้งหมดเชื่อมต่อกับ CPU จากภายนอกโดยใช้บัสระบบ ไมโครโปรเซสเซอร์ 8086 มี สถาปัตยกรรมที่ใช้ CISC และมีอุปกรณ์ต่อพ่วงเช่น 32 I / O การสื่อสารแบบอนุกรม , ความทรงจำและ เคาน์เตอร์ / ตัวจับเวลา . ไมโครโปรเซสเซอร์ต้องการโปรแกรมเพื่อดำเนินการที่ต้องใช้หน่วยความจำสำหรับอ่านและบันทึกฟังก์ชัน

สถาปัตยกรรมโปรเซสเซอร์ 8086

สถาปัตยกรรมโปรเซสเซอร์ 8086

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

การลงทะเบียนวัตถุประสงค์ทั่วไป : ซีพียู 8086 ประกอบด้วยรีจิสเตอร์สำหรับวัตถุประสงค์ทั่วไป 8 ตัวและรีจิสเตอร์แต่ละตัวมีชื่อของตัวเองดังแสดงในรูปเช่น AX, BX, CX, DX, SI, DI, BP, SP ทั้งหมดนี้เป็นรีจิสเตอร์ 16 บิตที่รีจิสเตอร์สี่ตัวแบ่งออกเป็นสองส่วนเช่น AX, BX, CX และ DX ซึ่งส่วนใหญ่จะใช้เพื่อเก็บตัวเลข

การลงทะเบียนวัตถุประสงค์พิเศษ : 8086 CPU ประกอบด้วย 2- ฟังก์ชั่นพิเศษรีจิสเตอร์เช่น IP และแฟล็กรีจิสเตอร์ การลงทะเบียน IP ชี้ไปที่คำสั่งการดำเนินการปัจจุบันและทำงานเพื่อรวบรวมกับทะเบียนเซ็กเมนต์ CS เสมอ หน้าที่หลักของแฟล็กรีจิสเตอร์คือการแก้ไขการทำงานของซีพียูหลังจากฟังก์ชั่นกลไกเสร็จสมบูรณ์และเราไม่สามารถเข้าถึงได้โดยตรง
การลงทะเบียนกลุ่ม: CPU 8086 ประกอบด้วยการลงทะเบียน 4 ส่วนเช่น CS, DS, ES, SS ซึ่งส่วนใหญ่ใช้เพื่อความเป็นไปได้ในการจัดเก็บข้อมูลใด ๆ ในการลงทะเบียนส่วนและเราสามารถเข้าถึงบล็อกหน่วยความจำโดยใช้การลงทะเบียนส่วน


โปรแกรมภาษาแอสเซมบลีอย่างง่าย 8086

การเขียนโปรแกรมภาษาแอสเซมบลี 8086 มีกฎบางอย่างเช่น

  • ระดับการประกอบ การเขียนโปรแกรม 8086 รหัสต้องเขียนด้วยตัวพิมพ์ใหญ่
  • ป้ายกำกับต้องตามด้วยเครื่องหมายจุดคู่ตัวอย่างเช่น label:
  • ป้ายกำกับและสัญลักษณ์ทั้งหมดต้องขึ้นต้นด้วยตัวอักษร
  • ความคิดเห็นทั้งหมดพิมพ์เป็นตัวพิมพ์เล็ก
  • บรรทัดสุดท้ายของโปรแกรมจะต้องจบลงด้วยคำสั่ง END

โปรเซสเซอร์ 8086 มีคำสั่งอื่นอีกสองคำสั่งในการเข้าถึงข้อมูลเช่น WORD PTR - สำหรับ word (สองไบต์), BYTE PTR - สำหรับไบต์

Op-Code และ Operand

Op-Code และ Operand

รหัส Op: คำสั่งเดียวเรียกว่า op-code ซึ่ง CPU สามารถเรียกใช้งานได้ คำสั่ง 'MOV' เรียกว่า op-code

ตัวดำเนินการ: ข้อมูลชิ้นเดียวเรียกว่าตัวถูกดำเนินการที่สามารถดำเนินการได้โดยใช้รหัส op ตัวอย่างการลบจะดำเนินการโดยตัวถูกดำเนินการที่ถูกลบโดยตัวถูกดำเนินการ
ไวยากรณ์: ย่อย b, c

โปรแกรมภาษาแอสเซมบลีไมโครโปรเซสเซอร์ 8086

เขียนโปรแกรมสำหรับอ่านอักขระจากแป้นพิมพ์

MOV ah, 1h // โปรแกรมย่อยอินพุตแป้นพิมพ์
INT 21h // อินพุตอักขระ
// อักขระถูกเก็บไว้ในอัล
MOV c, al // คัดลอกอักขระจาก alto c

เขียนโปรแกรมสำหรับอ่านและแสดงตัวอักษร

MOV ah, 1h // โปรแกรมย่อยอินพุตแป้นพิมพ์
INT 21h // อ่านอักขระเป็นอัล
MOV dl, al // คัดลอกอักขระไปยัง dl
MOV ah, 2h // โปรแกรมย่อยเอาต์พุตอักขระ
INT 21h // แสดงอักขระใน dl

เขียนโปรแกรมโดยใช้รีจิสเตอร์วัตถุประสงค์ทั่วไป

ORG 100 ชม
MOV AL, VAR1 // ตรวจสอบค่าของ VAR1 โดยย้ายไปที่ AL
LEA BX, VAR1 // รับที่อยู่ของ VAR1 ใน BX
MOV BYTE PTR [BX], 44 ชม. // แก้ไขเนื้อหาของ VAR1
MOV AL, VAR1 // ตรวจสอบค่าของ VAR1 โดยย้ายไปที่ AL
ขวา
VAR1 DB 22 ชม
สิ้นสุด

เขียนโปรแกรมสำหรับแสดงสตริงโดยใช้ฟังก์ชันไลบรารี

รวม emu8086.inc // การประกาศมาโคร
ORG 100 ชม
พิมพ์ 'Hello World!'
GOTOXY 10, 5
PUTC 65 // 65 - เป็นรหัส ASCII สำหรับ 'A'
PUTC 'B'
RET // กลับสู่ระบบปฏิบัติการ
END // คำสั่งหยุดคอมไพเลอร์

คำแนะนำทางคณิตศาสตร์และลอจิก

กระบวนการ 8086 ของหน่วยเลขคณิตและตรรกะได้แยกออกเป็นสามกลุ่มเช่นการบวกการหารและการดำเนินการเพิ่ม มากที่สุด คำแนะนำทางคณิตศาสตร์และลอจิก ส่งผลต่อการลงทะเบียนสถานะโปรเซสเซอร์

การเขียนโปรแกรมภาษาแอสเซมบลี 8086 ช่วยจำอยู่ในรูปแบบของ op-code เช่น MOV, MUL, JMP เป็นต้นซึ่งใช้ในการดำเนินการ ตัวอย่างการเขียนโปรแกรมภาษาแอสเซมบลี 8086

ส่วนที่เพิ่มเข้าไป
ORG0000 ชม
MOV DX, # 07H // ย้ายค่า 7 ไปที่ register AX //
MOV AX, # 09H // ย้ายค่า 9 ไปยังตัวสะสม AX //
เพิ่ม AX, 00H // เพิ่มค่า CX ด้วยค่า R0 และเก็บผลลัพธ์ใน AX //
สิ้นสุด
การคูณ
ORG0000 ชม
MOV DX, # 04H // ย้ายค่า 4 ไปที่รีจิสเตอร์ DX //
MOV AX, # 08H // ย้ายค่า 8 ไปยังตัวสะสม AX //
MUL AX, 06H // ผลลัพธ์ที่คูณถูกเก็บไว้ใน Accumulator AX //
สิ้นสุด
การลบ
ORG 0000 ชม
MOV DX, # 02H // ย้ายค่า 2 เพื่อลงทะเบียน DX //
MOV AX, # 08H // ย้ายค่า 8 ไปยังตัวสะสม AX //
SUBB AX, 09H // ค่าผลลัพธ์ถูกเก็บไว้ใน Accumulator A X //
สิ้นสุด
แผนก
ORG 0000 ชม
MOV DX, # 08H // ย้ายค่า 3 เพื่อลงทะเบียน DX //
MOV AX, # 19H // ย้ายค่า 5 ไปยังตัวสะสม AX //
DIV AX, 08H // ค่าสุดท้ายถูกเก็บไว้ใน Accumulator AX //
สิ้นสุด

ดังนั้นนี่คือการแข่งขันระดับ Assembly Level Programming 8086, 8086 Processor Architecture ตัวอย่างโปรแกรมง่ายๆสำหรับโปรเซสเซอร์ 8086, คำแนะนำทางคณิตศาสตร์และลอจิกนอกจากนี้หากมีข้อสงสัยเกี่ยวกับบทความหรือโครงการอิเล็กทรอนิกส์นี้คุณสามารถติดต่อเราได้โดยการแสดงความคิดเห็นในส่วนความคิดเห็นด้านล่าง