Viết Phần Mềm Biên Dịch Mã 8051

NgoHungCuong

http://ngohungcuong.com
#1
phần mềm biên dịch mã cho 8051 thì đã có quá nhiều, kid cũng không có ý định làm để buôn bán hay cạnh tranh với ai cả, chỉ là hôm nay tự nhiên thấy có hứng thú với vấn đề này thì tìm hiểu thôi, bạn nào quan tâm thì cùng tìm hiểu với kid nhé
kid sẽ update thường xuyên những gì kid tìm hiểu được tại đây
:D:D:D
 

NgoHungCuong

http://ngohungcuong.com
#3
ta bắt đầu tìm hiểu 1 chút về định dạng file hex 8 bit cho 8051
kid viết 1 đoạn hợp ngữ đơn giản và cho biên dịch ra file hex
PHP:
org    0000h
main:
    mov P1,#0f0h
    jmp $
end
và kết quả sau biên dịch nội dung file hex như sau:
PHP:
:050000007590F080FE88
:00000001FF
Nội dung file Hex của chúng ta có 2 dòng
mỗi dòng là 1 bản ghi (Record) :D:D:D
đối với định dạng Hex 8 bit thì chỉ có 2 loại bản ghi
- Bản ghi chứa dữ liệu
banghi1.JPG

phân tích với file hex của ta:
PHP:
:050000007590F080FE88
bản ghi bắt đầu bằng ký tự :
trường RECLEN ở đây là 05 tức là có 5 byte dữ liệu
trường OFFSET là 00 00 tức là dữ liệu bắt đầu tại địa chỉ 00 00 (chúng ta dùng org 0000h ở mã ASM mà :D:D:D)
trường RECTYPE là 00 tức là bản ghi dữ liệu
nội dung data của bản ghi 05 byte: 75 90 F0 80 FE
88 là checksum (ta chưa cần bàn đến ở đây)
- Bản ghi thông báo kết thúc file
banghi2.JPG

PHP:
:00000001FF
cái này quá đơn giản các bạn tự tìm hiểu nhé :D:D:D
 

NgoHungCuong

http://ngohungcuong.com
#4
ta tiếp tục phân tích một chút về nội dung mã chương trình sinh ra từ mã nguồn asm
5 byte của ta là
PHP:
75 90 F0 80 FE
xem mã opcode
MOV direct, #immediate
75: lệnh mov
90: P1
F0 là dữ liệu gán cho P1
SJMP label
80 : lệnh sjmp
FE : bằng -2 tức là nhảy về thực hiện tiếp lệnh sjmp (dừng mãi mãi tại đây)
Đúng như mã nguồn asm của ta :D:D:D
 

NgoHungCuong

http://ngohungcuong.com
#5
bắt tay vào công việc
kid bắt đầu bằng giao diện DOS, khi nào hoàn thành thì sẽ thiết kế GUI sau
chương trình sẽ phân tích mã lệnh asm (text) và chuyển thành file hex tương ứng
thử lại tay nghề C/C++ chút bằng chương trình Hello World cho chắc ăn :D:D:D
PHP:
#include <STDIO.H>
#include <CONIO.H>
#include <WINDOWS.H>
void main() {
    printf("Hello World!");
    getch();
}
New Bitmap Image.JPG

ok, ngon rồi, tiếp tục code :D:D:D
 

robotden

Sinh viên đại học
#8
cố lên nào kidteam. trước mình cũng viết một chương trình disassemly và assemly cho 1 con uP của Nga. Thông cảm là mình k thể up lên đây được. Mình sẽ cố gắng theo dõi bài viết của kidteam để học hỏi
 

NgoHungCuong

http://ngohungcuong.com
#9
kid sẽ cố, mặc dù biết là khó và rất khó, nhưng kid thích, vậy thôi, trước kia kid có cái sologun Because I Can nhưng thấy mình chả làm nổi cái gì nên hồn nên gỡ rồi
:D:D:D
kid tính cấu trúc câu lệnh sẽ như masm32 chứ không như kiểu của keil C(ở đây là code asm bằng Keil C chứ kid không nói đến việc code C bằng Keil C nhé :):):)), code chán lắm
mong mọi người ủng hộ kid nhé :D:D:D
 

NgoHungCuong

http://ngohungcuong.com
#10
bắt đầu phân tích 8051 thuộc cấu trúc lệnh phức tạp, cái này kid thấy pic đơn giản hơn nè :D:D:D
có lệnh 1 byte, 2 byte, 3 byte...
nó làm cho kid mệt hơn thôi chứ chẳng có gì khác hết ấy
:(
 

Quảng cáo Google