รหัสเลขฐานสิบหก การแปลงเลขฐานสิบเป็นเลขฐานสิบหก - แอสเซมเบลอร์ การแปลงจากทศนิยมเป็นแอสเซมเบลอร์ฐานสิบหก

1. บทนำ

2. ข้อมูลทั่วไปเกี่ยวกับภาษาแอสเซมบลี

3. ส่วนซอฟต์แวร์

· คำอธิบายของโปรแกรม

· ขั้นตอนการพัฒนาโปรแกรมการประกอบ ___

· โปรแกรมแปลงเลขฐานสิบให้เป็นระบบเลขฐานสองและเลขฐานสิบหก

4. ข้อมูลอ้างอิง


การแนะนำ

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

ฮาร์ดแวร์ประกอบด้วยอุปกรณ์ดังต่อไปนี้:

· โปรเซสเซอร์กลาง

· แรม;

· อุปกรณ์ต่อพ่วง;

อุปกรณ์ทั้งหมดที่กล่าวมาข้างต้นสร้างขึ้นจากวงจรรวม (IC)

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

ตัวอย่างของไอซีได้แก่ วงจรอุปกรณ์ดิจิทัล: รีจิสเตอร์, ตัวบวก, ตัวบวกครึ่งตัว, ตัวนับ, ตัวเข้ารหัส, ตัวถอดรหัส ฯลฯ

ส่วนของซอฟต์แวร์ประกอบด้วย: ชุดโปรแกรมและกฎพร้อมเอกสารประกอบที่เกี่ยวข้องทั้งหมดซึ่งช่วยให้คุณสามารถใช้คอมพิวเตอร์เพื่อแก้ไขปัญหาต่างๆ

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

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


ข้อมูลทั่วไปเกี่ยวกับภาษาแอสเซมบลี

ภาษาแอสเซมบลีเชิงสัญลักษณ์สามารถกำจัดข้อเสียของการเขียนโปรแกรมภาษาเครื่องได้อย่างมาก

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

ชื่อสัญลักษณ์ที่ป้อนเมื่อเขียนโปรแกรมในภาษาแอสเซมบลีมักจะสะท้อนถึงความหมายของโปรแกรม และตัวย่อของคำสั่งสะท้อนถึงฟังก์ชันหลัก ตัวอย่างเช่น PARAM – พารามิเตอร์, TABLE – ตาราง, MASK – มาสก์, ADD – การบวก, SUB – การลบ ฯลฯ ฯลฯ ชื่อดังกล่าวง่ายต่อการจดจำสำหรับโปรแกรมเมอร์

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

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

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

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

การใช้ภาษาแอสเซมบลี โปรแกรมเมอร์สามารถตั้งค่าพารามิเตอร์ต่อไปนี้:

ตัวช่วยจำ (ชื่อสัญลักษณ์) ของคำสั่งภาษาเครื่องไมโครโปรเซสเซอร์แต่ละตัว

รูปแบบมาตรฐานสำหรับบรรทัดของโปรแกรมที่เขียนด้วยภาษาแอสเซมบลี

รูปแบบสำหรับระบุวิธีการกำหนดแอดเดรสและตัวเลือกคำสั่งต่างๆ

รูปแบบสำหรับระบุค่าคงที่อักขระและค่าคงที่จำนวนเต็มในระบบตัวเลขต่างๆ

คำสั่งหลอกที่ควบคุมกระบวนการประกอบ (แปล) โปรแกรม

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

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

แต่ละบรรทัดของโปรแกรมที่เขียนด้วยภาษาแอสเซมบลีประกอบด้วยสี่ฟิลด์:

ความคิดเห็นตัวดำเนินการรหัสป้ายกำกับ

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

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

ฟิลด์ CODE มีชื่อเชิงสัญลักษณ์ของคำสั่งหรือคำสั่งหลอกที่จะดำเนินการ ตัวช่วยจำสำหรับคำสั่งส่วนใหญ่คือคำย่อของประโยคในภาษาอังกฤษที่แสดงถึงลักษณะหน้าที่หลักของคำสั่งเหล่านั้น

ตัวอย่างเช่น:

MOV (MOVE) - โอนไปข้างหน้า

เพิ่ม (เพิ่มเติม) - นอกจากนี้

SUB (SUBSTRACT) - การลบ

LDA (โหลดโดยตรง

ACCUMULATOR) - โหลดโดยตรง

INR (การเพิ่มแบตเตอรี่)

REGISTER) - ลงทะเบียนเพิ่ม

REGISTER) ลงทะเบียนลดลง

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

โดยปกติแล้วฟิลด์ OPERAND จะถูกกำหนดขึ้นอยู่กับฟิลด์รหัสคำสั่ง อาจมีตัวถูกดำเนินการตั้งแต่หนึ่งตัวขึ้นไป โดยคั่นด้วยเครื่องหมายจุลภาค หรืออาจไม่มีตัวถูกดำเนินการสำหรับคำสั่งเหล่านั้นที่ทำงานบนรีจิสเตอร์การทำงานภายใน

ตัวถูกดำเนินการคือนิพจน์ที่มีสัญลักษณ์ช่วยจำ ค่าคงที่ และตัวดำเนินการ

ตัวถูกดำเนินการที่ง่ายที่สุดประกอบด้วยตัวช่วยจำหนึ่งตัวหรือค่าคงที่หนึ่งตัว

ตัวระบุการลงทะเบียนการทำงานภายใน เลเบล และค่าปัจจุบันของตัวนับโปรแกรมสามารถใช้เป็นตัวช่วยจำได้

ค่าคงที่สามารถแสดงได้ในระบบตัวเลขต่างๆ

ส่วนซอฟต์แวร์

คำอธิบาย โปรแกรม

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

1. การป้อนตัวเลขจากแป้นพิมพ์

2. แสดงข้อความเกี่ยวกับหมายเลขที่ป้อน

3. การแปลงตัวเลขให้เทียบเท่ากับเลขฐานสอง

4. แสดงเลขฐานสอง

5. การแปลงตัวเลขให้เป็นเลขฐานสิบหก

6. แสดงเลขฐานสิบหก

7. วนรอบ (เราจะทำต่อหรือไม่) ถ้าใช่ ให้จุดที่ 1 หรือจุดที่ 8

8. ออกจากโปรแกรม

นี่คืออัลกอริธึมของโปรแกรมภาษาธรรมชาติ

ขั้นตอนการพัฒนาโปรแกรมแอสเซมเบลอร์

1. คำชี้แจงของปัญหา รวมถึงคำอธิบายที่มีความหมายของปัญหาและการพัฒนาอัลกอริทึม

2. การพัฒนาข้อความโปรแกรม

3. การป้อนข้อความลงในคอมพิวเตอร์ ข้อความของโปรแกรมในรหัสช่วยจำจะถูกป้อนลงในคอมพิวเตอร์โดยใช้โปรแกรมแก้ไขข้อความ นอกจากนี้ยังสร้างไฟล์ข้อความที่มีนามสกุล *.ASM

4. การรวบรวมหรือการประกอบ ไฟล์ข้อความที่มีนามสกุล *.ASM จะถูกแปลงเป็นไฟล์อ็อบเจ็กต์ที่มีโปรแกรมในรหัสเครื่องที่มีนามสกุล *.OBJ นอกจากนี้ในขั้นตอนนี้ ยังสามารถสร้างรายการโปรแกรมได้ ไฟล์ที่มีนามสกุล *.LST ซึ่งมีข้อมูลพื้นฐานเกี่ยวกับโปรแกรม รวมถึงไฟล์อ้างอิงโยงที่มีนามสกุล *.CRF ในขั้นตอนนี้ ข้อความของโปรแกรมจะถูกตรวจสอบหาข้อผิดพลาด การประกอบดำเนินการโดยใช้โปรแกรมแปล TASM.EXE (ASM.EXE - ในแอสเซมเบลอร์, MASM.EXE - ในแอสเซมเบลอร์แมโคร) TASM [ตัวเลือก] *.ASM [,] - คำสั่งสำหรับดำเนินการแปล หากมีการระบุเครื่องหมายจุลภาคในคำสั่ง รายการไฟล์จะถูกสร้างขึ้น TASM มีสองตัวเลือก: /ZI และ /N พวกเขาถูกเรียกว่า: TASM

5. เค้าโครง ในขั้นตอนนี้ โปรแกรมที่ย้ายตำแหน่งได้จะถูกสร้างขึ้นซึ่งสามารถโหลดลงในพื้นที่หน่วยความจำใดก็ได้ บันทึกเป็นไฟล์ที่มีนามสกุล *.EXE หรือ *.COM เมื่อต้องการทำเช่นนี้ ให้ใช้ TLINK.exe (สำหรับแมโครแอสเซมเบลอร์ LINK.EXE) ตัวเลือกคือ /T และ /X

6. การดำเนินการและการดีบัก (DEBUG)

7. การป้อนรหัสเครื่องของโปรแกรมลงใน ROM (อาจหายไป) ตอนนี้เราจะดูที่บล็อกไดอะแกรมของโปรแกรมของเรานั่นคือการดำเนินการที่ได้รับคำสั่ง


; โปรแกรมแปลงทศนิยมเป็น; ระบบไบนารีและฐานสิบหก; การสะสม

; ส่วนข้อมูล

;ตารางการแปลง“หลัก – ASCII-รหัส

tabl_ascii db "0123456789abcdef"

;____________________________________________________________________

;ตารางการแปลง“ASCII-รหัส-หมายเลข

ดีบี 0,1,2,3,4,5,6,7,8,9

ฐานข้อมูล 0ah,0bh, 0ch, 0dh, 0eh, 0fh

;____________________________________________________________________

;การสำรองและการเริ่มต้นตัวแปรในหน่วยความจำ

x_ascii db 20 ชม. ซ้ำ(?)

t1 db 0dh,0ah,"ป้อนตัวเลขแล้วกด Enter"

db 0dh, 0ah, "$"

t2 db 0dh,0ah,"คุณได้ป้อนตัวเลขแล้ว",0dh,0ah "$"

t3 db 0dh, 0ah, "ในไบนารี่มีลักษณะเช่นนี้"

t4 db 0dh, 0ah, "เป็นเลขฐานสิบหกเช่นนี้"

db 0dh, 0ah, "$"

buf db 16 ซ้ำ(?),"$"

t5 db 0dh,0ah "เราจะดำเนินการต่อไปหรือไม่ (ใช่/ไม่ใช่)?"

;____________________________________________________________________

; ส่วนรหัส

;ขั้นตอนหลัก

ง:ลีอา dx, t1

;ขั้นตอนการกรอกเลขทศนิยม

;ขั้นตอนการแสดงเลขทศนิยม

r1: mov ดล,

; การแปลงตัวเลข (ทศนิยม) เป็นไบนารี

เวอร์ชัน 1:มัลศรี

;ขั้นตอนการแสดงเลขฐานสอง

; ขั้นตอนการแปลงตัวเลข (ไบนารี) เป็นเลขฐานสิบหก

; และแสดงบนหน้าจอ

หมายเหตุ :

ด้านล่างนี้เป็นคำสั่งที่ใช้ในโปรแกรม:

ย่อย– การลบแบบไบนารี ลบเนื้อหาของตัวถูกดำเนินการตัวที่สองออกจากตัวถูกดำเนินการตัวแรก

ช่วยในการจำ:ย่อย< ตัวถูกดำเนินการ 1>,< ตัวถูกดำเนินการ 2>

เรียก– การเรียกขั้นตอน ถ่ายโอนการควบคุมไปยังขั้นตอนที่ตัวถูกดำเนินการระบุอยู่ หลังจากขั้นตอนเสร็จสิ้น การดำเนินการจะดำเนินต่อไปด้วยคำสั่งตามหลังคำสั่งการโทร

ช่วยในการจำ: เรียก< ชื่อขั้นตอน>

เกษียณ– กลับสู่ขั้นตอน

ฉีก– ย้ายไปทางขวาอย่างมีเหตุผล

เอ็กซ์ออร์– พิเศษหรือ

ช่วยในการจำ:xor<операнд 1>,<операнд 2>

ลี– ดาวน์โหลดอีเอ

ช่วยในการจำ:lea reg,<операнд>

ดัน– รวมไว้ในสแต็ค

ช่วยในการจำ: ดัน< ตัวถูกดำเนินการ>

โผล่– ดึงข้อมูลจากสแต็ก

ช่วยในการจำ: โผล่<операнд>

mov- ซึ่งไปข้างหน้า

ช่วยในการจำ:mov< ผู้รับ>,<источник>

อิงค์– เพิ่มขึ้น 1

ช่วยในการจำ:อิงค์<операнд>

ธ.ค– ลดลง 1

ช่วยในการจำ: ธ.ค< ตัวถูกดำเนินการ>

สโตสบี– ส่งต่อการเชื่อมต่อไปยังรีจิสเตอร์อัลหรือขวานที่ไดจิสเตอร์ชี้ไป

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

ช่วยในการจำ: วนซ้ำ< ฉลาก>

.รหัส– เปิดส่วนรหัส

. ข้อมูล-- เปิดส่วนข้อมูล

.สแต็ค เอ็น– กำหนดสแต็กส่วน (a); ในกรณีนี้ไม่ได้ใช้คำสั่งการปิดเซ็กเมนต์ N - แสดงขนาดของสแต็ก (a) เป็นไบต์

บันทึก : เมื่อใช้คำสั่งดังกล่าว การลงทะเบียน ds จะเริ่มต้นได้ดังนี้: mov ขวาน,@data

mov ds,ขวาน

ถือว่าไม่ได้ใช้ในกรณีนี้

อ้างอิง

1. “ฉันเป็นภาษาแอสเซมบลีสำหรับ IBM PC และการเขียนโปรแกรม” โรงเรียนมัธยมปลาย 1992

2. “คอมพิวเตอร์ส่วนบุคคล IBM และระบบปฏิบัติการ MS-DOS” วิทยุและการสื่อสาร 2534

3. Ilyushechkin V.N., Kostin A.E., Khoklov M.M. “ซอฟต์แวร์ระบบ”, M., “โรงเรียนมัธยม”, 1987

4. Norton P., Souhe D. “Assembly language for the IBM PC”, M., Publishing House “Computer”, 1993

ระบบเลขฐานสิบหก(หรือเรียกอีกอย่างว่ารหัสฐานสิบหก) เป็นระบบตัวเลขตำแหน่งที่มีฐานเป็นจำนวนเต็ม 16 คำว่า hex (ออกเสียงว่า hex ย่อมาจาก เลขฐานสิบหกในภาษาอังกฤษ) บางครั้งก็ใช้ในวรรณคดีด้วย ตัวเลขของระบบตัวเลขนี้มักจะใช้ในเลขอารบิค 0-9 เช่นเดียวกับอักขระตัวแรกของตัวอักษรละติน A-F ตัวอักษรสอดคล้องกับค่าทศนิยมต่อไปนี้:

  • * ก -10;
  • *ข—11;
  • *ค—12;
  • * ง -13;
  • * จ - 14;
  • * ฉ - 15

ดังนั้น เลขอารบิค 10 ตัวประกอบกับตัวอักษรละติน 6 ตัว จึงรวมกันเป็นตัวเลข 16 หลักของระบบ

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

แอปพลิเคชัน. รหัสเลขฐานสิบหกใช้กันอย่างแพร่หลายในการเขียนโปรแกรมระดับต่ำรวมถึงในเอกสารอ้างอิงคอมพิวเตอร์ต่างๆ ความนิยมของระบบนั้นได้รับการพิสูจน์จากโซลูชันทางสถาปัตยกรรมของคอมพิวเตอร์สมัยใหม่: พวกเขามีไบต์ (ประกอบด้วยแปดบิต) เป็นหน่วยข้อมูลขั้นต่ำ - และค่าของไบต์นั้นเขียนได้อย่างสะดวกโดยใช้เลขฐานสิบหกสองหลัก ค่าไบต์สามารถอยู่ในช่วงตั้งแต่ #00 ถึง #FF (0 ถึง 255 ในรูปแบบทศนิยม) หรืออีกนัยหนึ่งคือการใช้ รหัสฐานสิบหกคุณสามารถเขียนสถานะใดๆ ของไบต์ได้ โดยจะไม่มีการใช้ตัวเลข "พิเศษ" ในการบันทึก

เข้ารหัสแล้ว ยูนิโค้ดเลขฐานสิบหกสี่หลักใช้ในการบันทึกหมายเลขอักขระ สัญลักษณ์สี RGB (แดง เขียว น้ำเงิน) มักใช้รหัสเลขฐานสิบหก (เช่น #FF0000 เป็นสัญลักษณ์สีแดงสด)

วิธีการเขียนรหัสฐานสิบหก

วิธีการเขียนทางคณิตศาสตร์- ในสัญกรณ์ทางคณิตศาสตร์ ฐานของระบบจะเขียนในรูปแบบทศนิยมเป็นตัวห้อยทางด้านขวาของตัวเลข สัญกรณ์ทศนิยมของตัวเลข 3032 สามารถเขียนเป็น 3032 10 ในระบบเลขฐานสิบหก หมายเลขนี้จะมีสัญกรณ์ BD8 16

ในไวยากรณ์ของภาษาโปรแกรม- ไวยากรณ์ของภาษาโปรแกรมต่างๆ จะกำหนดรูปแบบการเขียนตัวเลขโดยใช้แตกต่างกัน รหัสฐานสิบหก:

* ไวยากรณ์ของภาษาแอสเซมบลีบางประเภทใช้อักษรละติน "h" ซึ่งวางไว้ทางด้านขวาของตัวเลข เช่น 20Dh หากตัวเลขขึ้นต้นด้วยตัวอักษรละติน จะมีการวางศูนย์ไว้ข้างหน้า เช่น 0A0Bh สิ่งนี้ทำเพื่อแยกแยะค่าโดยใช้ค่าคงที่จากค่าคงที่ รหัสฐานสิบหก;

* แอสเซมเบลอร์ประเภทอื่นๆ เช่นเดียวกับ Pascal (และรูปแบบอื่น เช่น Delphi) และภาษาถิ่นพื้นฐานบางภาษา ให้ใช้คำนำหน้า "$": $A15;

* ในภาษามาร์กอัป HTML รวมถึงในไฟล์ CSS แบบเรียงซ้อน คำนำหน้า “#” ใช้เพื่อระบุสีในรูปแบบ RGB ด้วยเครื่องหมายฐานสิบหก: #00DC00

จะแปลงรหัสฐานสิบหกเป็นระบบอื่นได้อย่างไร?

แปลงจากเลขฐานสิบหกเป็นทศนิยมในการดำเนินการแปลงจากระบบเลขฐานสิบหกเป็นระบบทศนิยม คุณต้องแสดงตัวเลขเดิมเป็นผลรวมของผลิตภัณฑ์ของตัวเลขในหลักของเลขฐานสิบหกและยกกำลังของฐาน

ไบนารีเอสเอส

ฐานสิบหก SS

ตัวอย่างเช่น คุณต้องแปลเลขฐานสิบหก A14 โดยมีตัวเลขสามหลัก เมื่อใช้กฎนี้ เราเขียนมันเป็นผลรวมของเลขยกกำลังที่มีฐาน 16:

A14 16 = 10.16 2 + 1.16 1 + 4.16 0 = 10.256 + 1.16 + 4.1 = 2560 + 16 + 4 = 2580 10

การแปลงตัวเลขจากไบนารีเป็นเลขฐานสิบหกและในทางกลับกัน

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

ตารางสมุดบันทึกสำหรับการแปล

ในการแปลงจากเลขฐานสิบหกเป็นไบนารีคุณต้องดำเนินการย้อนกลับ: แทนที่แต่ละหลักด้วย tetrad จากตาราง

ไบนารีเอสเอส

อ็อกทอล SS

ตัวอย่าง การแปลงจากเลขฐานสิบหกเป็นไบนารี: A5E 16 = 1010 0101 1110 = 101001011110 2

ตัวอย่าง การแปลงจากไบนารีเป็นเลขฐานสิบหก: 111100111 2 = 0001 1110 0111 = 1E7 16

ในตัวอย่างนี้ จำนวนหลักในเลขฐานสองเดิมไม่ใช่สี่ (9) ดังนั้นจึงเพิ่มศูนย์นำหน้ารวมเป็น 12 หลัก

การแปลอัตโนมัติ- การแปลงอย่างรวดเร็วจากระบบเลขฐานสิบหกไปเป็นหนึ่งในสามระบบยอดนิยม (ไบนารี ฐานแปด และทศนิยม) รวมถึงการแปลงกลับด้าน สามารถทำได้โดยใช้เครื่องคิดเลขมาตรฐานที่มาพร้อมกับ Windows OS เปิดเครื่องคิดเลข เลือก View -> Programmer จากเมนู ในโหมดนี้คุณสามารถตั้งค่าระบบตัวเลขที่ใช้งานอยู่ได้ (ดูเมนูด้านซ้าย: Hex, Dec, Oct, Bin) ในกรณีนี้ การเปลี่ยนระบบตัวเลขปัจจุบันจะทำให้เกิดการแปลโดยอัตโนมัติ

สวัสดี! มีบรรทัดนี้:

วาร์ บีดี 2,2,3,3,4,4; 223344 ตัวเลข 6 หลักทศนิยมในรูปแบบที่แยกออกมามีความแม่นยำเพิ่มขึ้น (รูปแบบ ASCII)

ฉันจะแปลงตัวเลข 223344 นี้เป็นเลขฐานสิบหกได้อย่างไร ฉันพบรหัสนี้ที่แปลงจากเลขทศนิยมหลักเดียวและสองหลักเป็นตัวเลขสิบหกหลัก:

- วาร์ 17. ด้านหลัง 1. เขียนรูทีนย่อยเพื่อแปลงอาร์เรย์ของทศนิยมบางส่วน ไบต์ ASCII ไปยังอาร์เรย์ของไบต์ BCD ใช้รูทีนย่อยนี้เพื่อประมวลผลสองอาร์เรย์ ใช้สแต็กเพื่อส่งพารามิเตอร์ ชื่อโปรแกรม ; คำอธิบายของค่าคงที่ คำอธิบายของตัวแปร ส่วนข้อมูล x1 db 2h db 1h db 3h db 1h db 4h db 1h ; ตัวเลขในรูปแบบ ASCII y1 db 3 ซ้ำ (?) ; อาร์เรย์ในรูปแบบ BCD x2 db 8h ;98 db 9h db 5h ;95 db 9h db 7h ;87 db 8h db 2h ;92 db 9h ; อาร์เรย์ธันวาคม ไบต์ ASCII Y2 db 4 ซ้ำ (?) ; อาร์เรย์ธันวาคม ไบต์ BCD ข้อมูลสิ้นสุด Stack SEGMENT DW 16 ซ้ำ (?) StkTOp LABEL คำ Stack สิ้นสุดรหัส SEGMENT ASSUME CS: รหัส, DS: ข้อมูล, ES: ข้อมูล, SS: Stack ; รูทีนย่อย abc proc push bp mov bp, sp มีอธิบายไว้ที่นี่ สแน็ปไปที่ด้านบนของสแต็ก mov cx, ; อ่านพารามิเตอร์จากสแต็ก (จำนวนตัวเลข) mov di, ; ที่อยู่ของตัวแปร Y1 mov si, ; ที่อยู่ของตัวแปร X1 M1: mov al, +1 ; โหลดตัวเลขแรกในรูปแบบ ASCII shl ax, 1 ; เลื่อนไปทางขวา 4 หลัก shl ax, 1 shl ax ,1 shl ax, 1 หรือ al, ; เรียกคืนหมายเลขที่คุณจำได้ mov , al ; เขียนตัวเลขในรูปแบบ BCD inc si ; ย้ายไปที่หมายเลขอื่น inc si inc di ; แก้ไขที่อยู่ BCD - ตัวเลข ธ.ค. cx; ลดจำนวนตัวเลข jnz M1 ; หากยังไม่หมด ให้ไปที่ M1 pop BP ret 6 abc endp ; โปรแกรมหลักเริ่มต้น: mov AX, Data mov DS, AX mov ES, AX mov Ax, Stack mov SS, AX mov SP, ออฟเซ็ต StkTop ; โหลดพารามิเตอร์ลงบนสแต็กตามเงื่อนไขงาน mov ax, offset x1 ; โหลดที่อยู่ของอาร์เรย์แรก push ax mov ax, ชดเชย Y1 ; โหลดที่อยู่ของผลลัพธ์ ขวานผลัก mov ขวาน, 3 ; จำนวนตัวเลข กดขวาน โทร abc ; รูทีนย่อยเรียก mov ax, ออฟเซ็ต x2 ; โหลดที่อยู่ของอาร์เรย์ที่สอง push ax mov ax, ชดเชย Y2 ; โหลดที่อยู่ผลลัพธ์ผลักขวาน mov ขวาน, 4 ; จำนวนตัวเลข กดขวาน โทร abc ; การเรียกโค้ดรูทีนย่อยสิ้นสุด end start

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

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

ทฤษฎีเล็กน้อย

ก่อนอื่น ลองหาความแตกต่างระหว่างระบบตัวเลขกันก่อน เลขทศนิยมใดๆ สามารถแสดงได้ดังนี้:

123 10 = 1 10 2 + 2 10 1 + 3 10 0

ตัวห้อยด้านล่างระบุว่าเป็นเลขทศนิยม หลักของแต่ละหลักจะถูกคูณด้วย 10 ให้ยกกำลังเท่ากับตัวเลขหลัก หากนับจากศูนย์จากขวาไปซ้าย โดยทั่วไปมากขึ้น:

เอบีซี = ก 2 + ข 1 + ค 0 ,

โดยที่ a, b และ c เป็นตัวเลขจำนวนหนึ่ง และ r เป็นฐานของระบบตัวเลข สำหรับระบบทศนิยม = 10 สำหรับไบนารี่ - = 2 สำหรับแบบไตรภาค = 3 เป็นต้น เช่น หมายเลขเดียวกันในระบบอื่น:

443 5 = 4 5 2 + 4 5 1 + 3 5 0 = 4 25 + 4 5 + 3 1 = 123 10 (ระบบควินารี)

173 8 = 1 8 2 + 7 8 1 + 3 8 0 = 1 64 + 7 8 + 3 1 = 123 10 (ระบบฐานแปด)

1111011 2 = 1·2 6 + 1·2 5 + 1·2 4 + 1·2 3 + 0·2 2 + 1·2 1 + 1·2 0 = 1·64 + 1·32 + 1·16 + 1 8 + 0 4 + 1 2 + 1 1 = 123 10 (ไบนารี่)

ระบบเลขฐานสิบหก

ในระบบเลขฐานสิบหก ตัวอักษร A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 ใช้เพื่อแสดงถึงตัวเลขที่มากกว่า 9 ตัวอย่างเช่น

C7 16 = 12 16 1 + 7 16 0 = 12 16 + 7 1 = 199 10

ความสะดวกของระบบเลขฐานสิบหกคือการแปลงเลขฐานสองให้เป็นเลขฐานสองเป็นเรื่องง่ายมาก (และในทิศทางตรงกันข้ามด้วย) ตัวเลขสี่หลักของเลขฐานสอง (tetrad) จะแสดงด้วยเลขฐานสิบหกหนึ่งหลัก หากต้องการแปล เพียงแบ่งตัวเลขออกเป็นกลุ่มๆ ละ 4 บิต และแทนที่ tetrad แต่ละตัวด้วยเลขฐานสิบหกที่สอดคล้องกัน

ไบนารี่
เตตราด
เลขฐานสิบหก
ตัวเลข
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010
1011 บี
1100
1101 ดี
1110 อี
1111 เอฟ

หากต้องการเขียนหนึ่งไบต์ ต้องใช้เลขฐานสิบหก 2 หลักเท่านั้น:

0101 1,011 2 = 5B 16

0110 0000 2 = 60 16

1111 1111 2 = FF 16

ระบบฐานแปด

เลขฐานแปดยังมีประโยชน์ในการแสดงเลขฐานสองด้วย แม้ว่าจะใช้กันน้อยกว่าเลขฐานสิบหกก็ตาม หากต้องการแปลอย่างรวดเร็ว คุณต้องแบ่งเลขฐานสองออกเป็นกลุ่มละ 3 หลัก (แฝดสามหรือสามหลัก)

ไบนารี่
สามคน
ออกตัล
ตัวเลข
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

ตัวอย่างเช่น: 001 110 101 2 = 165 8

ไวยากรณ์แอสเซมเบลอร์ FASM

ตามค่าเริ่มต้น แอสเซมเบลอร์จะรับรู้ตัวเลขในโปรแกรมเป็นทศนิยม หากต้องการแสดงเลขฐานสอง คุณต้องเพิ่มสัญลักษณ์ที่ส่วนท้ายของเลขฐานสอง 'ข'- เลขฐานแปดจะถูกระบุในลักษณะเดียวกันโดยใช้สัญลักษณ์ 'โอ'- ในการเขียนเลขฐานสิบหก FASM รองรับรูปแบบสัญกรณ์ 3 รูปแบบ:

  • สัญลักษณ์จะเขียนอยู่หน้าตัวเลข '0x'(เช่นเดียวกับใน C/C++);
  • สัญลักษณ์เขียนไว้หน้าตัวเลข ’$’ (เช่นเดียวกับในภาษาปาสคาล);
  • สัญลักษณ์เขียนไว้หลังตัวเลข 'ชม'- หากเลขฐานสิบหกขึ้นต้นด้วยตัวอักษร คุณต้องเพิ่มศูนย์นำหน้า (ไม่เช่นนั้นจะไม่ชัดเจนว่าเป็นตัวเลขหรือชื่อป้ายกำกับ)

ไวยากรณ์นี้ใช้ทั้งในการประกาศข้อมูลและในคำสั่ง นี่คือตัวอย่างการเขียนตัวเลขทั้งสี่ระบบ:

ขวาน mov, 537 ;ระบบทศนิยม movbl, 11010001b ;ระบบไบนารี่ mov ch, 57o ;ระบบฐานแปด mov dl , $ C2 ;\ mov ศรี , 0x013A ; \mov อ่า 18 ชม - /ระบบเลขฐานสิบหก mov al , 0FFh ;/ mov al , FFh ;เกิดข้อผิดพลาด!

mov ax,537 ;ระบบทศนิยม mov bl,11010001b ;ระบบไบนารี mov ch,57o ;ระบบฐานแปด mov dl,$C2 ;\ mov si,0x013A ; \mov อ่า 18 ชม.; / ระบบเลขฐานสิบหก mov al,0FFh ;/ mov al,FFh ;ผิดพลาด!