Chào cả nhà,
Mình đang tìm hiểu cấu trúc vi điều khiển nên còn nhiều thắc mắc. Theo mình biết thì các instruction được lưu trên ROM khi nạp. Khi thực thi nó chuyển các instruction qua RAM và thực hiện (vì RAM gần ROM hơn nên chuyển qua để tăng tốc độ)
Trong khi bộ nhớ RAM nhỏ hơn ROM rất nhiều, vậy một chương trình dài thì quá trình chuyển sẽ như thế nào
Mình thấy khi viết code assembly thì đặt ORG vào một địa chỉ nào đó trên RAM, và khi dữ liệu chuyển từ ROM qua nó sẽ được bắt đầu từ đó
Cấu trúc và cách vận hành vi điều khiển
Vi điều khiển không chuyển dữ liệu lên ROM/Flash để thự hiện mà thực hiện trực tiếp trên ROM/Flash.
Lệnh ORG là chỉ đến địa chỉ trên ROM/Flash.
Chỉ có một số vi điều khiển cao cấp thường dùng để chạy hệ điều hành (vd uCLinux) thì mới cho phép kết nối RAM ngoài và chạy chương trình trên RAM.
2 Likes
Vậy sao một số chương trình mình thấy khởi đầu ở ORG 1000, tại sao ko dùng từ 0x0000 luôn?
0000 là vị trí khởi đầu của chương trình. ORG 0000 coi như chạy lại toàn bộ chương trình.
ORG 1000 bởi vì phía trước địa chỉ 1000 có những đoạn chương trình người ta không muốn cho nó chạy.
Ví dụ Bootloader.
1 Like