Opcode là gì

Opcode là gì

Tôi còn khá mới với điều này. Tôi đã cố gắng để hiểu sự khác biệt giữa các điều khoản được đề cập một cách rõ ràng, tuy nhiên, tôi vẫn còn bối rối. Đây là những gì tôi đã tìm thấy:

Trong ngôn ngữ trình biên dịch chương trình biên dịch (hoặc hội), mnemonic là tên viết tắt của một thao tác. Nó được nhập vào trường mã hoạt động của mỗi lệnh chương trình biên dịch chương trình. ví dụ AND AC,37 có nghĩa là AND đăng ký AC với 37. vì vậy AND, SUB và MUL là ghi nhớ. Chúng được dịch bởi trình biên dịch chương trình.

Bạn đang xem: Opcode là gì

Các hướng dẫn (câu lệnh) trong ngôn ngữ hội nói chung rất đơn giản, không giống như các hướng dẫn trong ngôn ngữ lập trình cấp cao. Nói chung, mnemonic là một tên tượng trưng cho một lệnh ngôn ngữ máy thực thi duy nhất (opcode) và có ít nhất một mnemonic opcode được xác định cho mỗi lệnh ngôn ngữ máy. Mỗi lệnh thường bao gồm một thao tác hoặc opcode, cộng với 0 hoặc nhiều toán hạng.

assembly
31
14 thg 7, 2013Ahmed Taher
OPCODE : Đó là một số được giải thích bởi máy của bạn (ảo hoặc silicon) đại diện cho hoạt động để thực hiện

BYTECODE : Giống như mã máy, ngoại trừ, phần lớn được sử dụng bởi trình thông dịch dựa trên phần mềm (như Java hoặc CLR)

MNEMONIC : Từ tiếng Anh MNEMONIC có nghĩa là “Một thiết bị như một mẫu chữ, ý tưởng hoặc liên kết giúp ghi nhớ một cái gì đó.”. Vì vậy, nó thường được các lập trình viên ngôn ngữ hội sử dụng để ghi nhớ “HOẠT ĐỘNG” mà máy có thể làm, như “THÊM” và “MUL” và “MOV”, v.v … Đây là trình biên dịch cụ thể.

MÃ MÁY: Đây là chuỗi các số bật và tắt các công tắc trong máy tính để thực hiện một công việc nhất định – chẳng hạn như thêm số, phân nhánh, nhân, v.v … Đây hoàn toàn là máy cụ thể và tài liệu tốt bởi những người thực hiện bộ xử lý.

Hội: Có hai “hội đồng” – một chương trình hội là một chuỗi các phép thuật và toán hạng được đưa đến một “trình biên dịch”, “lắp ráp” các ký hiệu và toán hạng thành mã máy thực thi. Tùy chọn một “trình liên kết” liên kết các hội đồng và tạo ra một tập tin thực thi.

“Hội” thứ hai trong các ngôn ngữ dựa trên “CLR” (ngôn ngữ .NET) là một chuỗi mã CLR được truyền thông tin siêu dữ liệu, một loại thư viện mã thực thi, nhưng không thể thực thi trực tiếp.

41
Aniket đã làm rất tốt, nhưng tôi cũng sẽ đi.

Trước tiên, hãy hiểu rằng ở cấp độ thấp nhất, các chương trình máy tính và tất cả dữ liệu chỉ là những con số (đôi khi được gọi là words), trong một số loại bộ nhớ. Thông thường nhất những từ này là bội số của 8 bit (1 và 0) (chẳng hạn như 32 và 64) nhưng không nhất thiết và trong một số bộ xử lý, mỗi từ lớn hơn đáng kể. Mặc dù vậy, đó chỉ là những con số được thể hiện dưới dạng một chuỗi 1 và 0, hoặc trên và ngoài nếu bạn muốn. Các con số có ý nghĩa gì tùy thuộc vào những gì/ai đã từng đọc chúng và trong trường hợp của bộ xử lý, nó đọc bộ nhớ một Word một lần và dựa trên số (hướng dẫn) mà nó nhìn thấy, thực hiện một số hành động. Những hành động như vậy có thể bao gồm đọc một giá trị từ bộ nhớ, ghi giá trị vào bộ nhớ, sửa đổi giá trị mà nó đã đọc, nhảy đến một nơi khác trong bộ nhớ để đọc hướng dẫn từ đó.

Trong những ngày đầu, một lập trình viên sẽ bật và tắt các công tắc theo nghĩa đen để thay đổi bộ nhớ, bật hoặc tắt đèn để đọc số 1 và 0, vì không có bàn phím, màn hình, v.v. Khi thời gian trôi qua, bộ nhớ ngày càng lớn hơn, bộ xử lý trở nên phức tạp hơn, các thiết bị hiển thị và bàn phím cho đầu vào được hình thành, và cùng với đó, cách dễ dàng hơn để lập trình.

Anaphet diễn giải:

OPCODE là một phần của Word hướng dẫn được bộ xử lý diễn giải là đại diện cho hoạt động cần thực hiện, chẳng hạn như đọc, viết, nhảy, thêm. Nhiều hướng dẫn cũng sẽ có OPERANDS ảnh hưởng đến cách thực hiện của lệnh, chẳng hạn như nói từ đâu trong bộ nhớ để đọc hoặc viết hoặc nhảy đến đâu. Vì vậy, nếu các lệnh có kích thước 32 bit chẳng hạn, bộ xử lý có thể sử dụng 8 bit cho opcode và 12 bit cho mỗi hai toán hạng.

Một bước tiến lên từ các công tắc bật tắt, mã có thể được nhập vào máy bằng chương trình gọi là “màn hình”. Lập trình viên sẽ sử dụng các lệnh đơn giản để nói bộ nhớ nào họ muốn sửa đổi và nhập MÃ SỐ MÃ, ví dụ: trong cơ sở 16 (hex) sử dụng 0 đến 9 và A đến F cho các chữ số.

Mặc dù tốt hơn so với chuyển đổi công tắc, nhập mã máy vẫn chậm và dễ bị lỗi. Một bước tiến lên từ đó là CODE hội, sử dụng MNEMONICS dễ nhớ hơn thay cho số thực tế đại diện cho một lệnh. Công việc của ASSEMBLER chủ yếu là chuyển đổi hình thức ghi nhớ của chương trình thành mã máy tương ứng. Điều này làm cho việc lập trình dễ dàng hơn, đặc biệt đối với các lệnh nhảy, trong đó một phần của lệnh là một địa chỉ bộ nhớ để chuyển đến hoặc một số từ để bỏ qua. Lập trình trong mã máy đòi hỏi các tính toán cần thiết để xây dựng hướng dẫn chính xác và nếu một số mã được thêm hoặc xóa, các lệnh nhảy có thể cần phải được tính toán lại. Trình biên dịch xử lý việc này cho lập trình viên.

Điều này để lại BYTECODE, về cơ bản giống như mã máy, ở chỗ nó mô tả các hoạt động cấp thấp như đọc và ghi bộ nhớ và các tính toán cơ bản. Mã byte thường được hình thành để tạo ra khi TẠO ngôn ngữ cấp cao hơn, ví dụ PHP hoặc Java và không giống như mã máy cho nhiều bộ xử lý dựa trên phần cứng, có thể có các hoạt động để hỗ trợ các tính năng cụ thể ở cấp cao hơn Một điểm khác biệt chính là bộ xử lý của mã byte thường là một chương trình, mặc dù bộ xử lý đã được tạo để giải thích một số thông số kỹ thuật của mã byte, ví dụ: bộ xử lý có tên SOAR (Smalltalk On A RISC) cho Smalltalk bytecode. Mã máy mã hóa, đối với một số loại bộ xử lý như CISC và EISC (ví dụ Linn Rekursiv, từ những người đã tạo trình phát bản ghi), bản thân bộ xử lý chứa một chương trình diễn giải các hướng dẫn của máy, do đó có sự tương đồng.

Xem thêm: Ligament Là Gì

Dòng sau đây là mã x86 được phân tách.

68 73 9D 00 01 Push 0x01009D73 68 opcode. Với các byte sau đây, nó đại diện cho Đẩy hướng dẫn của x86 hội = ngôn ngữ. Lệnh đẩy đẩy dữ liệu có độ dài 4 byte (32 bit) để xếp chồng. Word Push chỉ là một mnemonic đại diện cho opcode 68. Mỗi byte 68 , – 73 , 9D , 00 , 01 mã máy.

mã máy dành cho máy thật (CPU) nhưng mã byte là mã máy giả cho máy ảo.

Khi bạn viết a Java code. Java biên dịch mã của bạn và tạo mã byte. (Một tệp. Class) và bạn có thể thực thi cùng một mã tại bất kỳ nền tảng mà không thay đổi.

Java CODE | | BYTE CODE ________________|_______________ | | | x86 JVM SPARC JVM ARM JVM | | | | | | x86 SPARC ARM MACHINE CODE MACHINE CODE MACHINE CODE
“Hội” bắt nguồn từ mã “trình biên dịch” rất sớm sẽ “lắp ráp” các chương trình từ nhiều tệp (cái mà bây giờ chúng ta sẽ gọi là các tệp “bao gồm”). . trình biên dịch “không hỗ trợ bao gồm các tệp và do đó không” lắp ráp “.

Thật thú vị khi lưu ý rằng “trình biên dịch” được phát minh để hỗ trợ “chương trình con”. Ban đầu có các chương trình con “bên trong” và “bên ngoài”. Các chương trình con “nội bộ” là những gì chúng ta sẽ gọi là “nội tuyến”, trong khi các chương trình con “bên ngoài” được tiếp cận thông qua cơ chế “gọi” nguyên thủy. Có nhiều tranh cãi vào thời điểm đó về việc liệu các chương trình con “bên ngoài” có phải là một ý tưởng tốt hay không.

“Mnemonic” xuất phát từ tên của vị thần Hy Lạp Mnemosyne, nữ thần của ký ức. Bất cứ điều gì giúp bạn ghi nhớ công cụ là một “thiết bị ghi nhớ”.

Gần đây tôi đã đọc một bài viết hay về điều này, Sự khác biệt giữa Opcode và Bytecode , do đó muốn chia sẻ với bất cứ ai sau một lời giải thích tốt về chủ đề này. Tất cả tín dụng thuộc về tác giả gốc .

*

Opcode :

Opcode là viết tắt của mã hoạt động. Như tên gọi của nó, opcode là một loại mã cho máy biết phải làm gì, tức là phải thực hiện thao tác nào. Opcode là một loại hướng dẫn ngôn ngữ máy.

Mã byte :

Bytecode tương tự như opcode về bản chất, vì nó cũng cho máy biết phải làm gì. Tuy nhiên, bytecode không được thiết kế để bộ xử lý thực thi trực tiếp, mà là một chương trình khác.<.__.> Nó được sử dụng phổ biến nhất bởi một trình thông dịch dựa trên phần mềm như Java hoặc <~ # ~> clr <~ # ~> . Họ chuyển đổi từng tổng quát hướng dẫn máy thành a cụ thể hướng dẫn hoặc hướng dẫn máy để bộ xử lý của máy tính hiểu.

Xem thêm:

<.__.> Trong thực tế, tên bytecode xuất phát từ các tập lệnh có các opcode một byte theo sau là các tham số tùy chọn .

Mã C ++ để kiểm tra phỏng đoán Collatz nhanh hơn hội viết tay – tại sao?

Thay thế bộ đếm vòng lặp 32 bit bằng 64 bit giới thiệu độ lệch hiệu suất điên rồ

Tại sao GCC không tối ưu hóa a * a * a * a * a * a thành (a * a * a) * (a * a * a)?

Mục đích của hướng dẫn LEA là gì?

Có thể “dịch ngược” Windows .exe không? Hoặc ít nhất là xem hội?

Làm cách nào để đạt được tối đa lý thuyết là 4 FLOP mỗi chu kỳ?

Làm thế nào để bạn có được đầu ra của trình biên dịch từ nguồn C/C++ trong gcc?

Tại sao các chương trình không được viết trong hội thường xuyên hơn?

Làm thế nào để chạy một chương trình mà không có hệ điều hành?

Khi nào hội nhanh hơn C?

Điểm kiểm tra% eax% eax

Tại sao GCC sử dụng phép nhân với một số lạ trong việc thực hiện phép chia số nguyên?

Chức năng của các hướng dẫn Push / pop được sử dụng trên các thanh ghi trong cụm x86 là gì?

Mục đích của thanh ghi RBP trong trình biên dịch x86_64 là gì?

Num ++ có thể là nguyên tử cho “int num” không?

Mục đích của ESI & EDI đăng ký?

Là “chuyển đổi” nhanh hơn “nếu”?

Bảo vệ thực thi từ kỹ thuật đảo ngược?

Làm thế nào người ta có thể thấy nội dung của ngăn xếp với gdb

Chuyên mục: Hỏi Đáp

=> Xem thêm: Tin tức tổng hợp tại Chobball

Comments are closed.