01/10/2018, 01:17

CPU "lấy" data như thế nào?

Ví dụ có lệnh như thế này 1+2-5*6 , CPU sẽ lấy data theo từng chu kỳ, vậy nếu trong 1 chu kỳ CPU lấy 1+2-5* để xử lý thì nó sẽ xử lấy như thế nào ạ?

Minh Hoàng viết 03:19 ngày 01/10/2018

Nó phải qua bộ dịch để chuyển thành mã máy trước bạn ơi.

Hưng viết 03:26 ngày 01/10/2018

Em biết là nó sẽ dịch thành mã nhị phân nhưng khi dịch đoạn trên nó sẽ tính như thế nào ạ? Rồi nó lấy “6” lên thì lúc này sẽ sao ạ?c

rogp10 viết 03:29 ngày 01/10/2018

Dịch làm sao thì bạn phải học 1 khóa về trình biên dịch mới biết được

Hưng viết 03:18 ngày 01/10/2018

Vậy lấy như nào thì nó cũng tính được ạ?

rogp10 viết 03:24 ngày 01/10/2018

Đại loại là nó phải chạy qua câu đó trước, sau đó biến đổi thành 1 ngôn ngữ trung gian để tối ưu hóa (dead code, unroll, alias, …) rồi mới dịch thẳng.

Hưng viết 03:27 ngày 01/10/2018

Ý em là CPU nó tính kiểu gì ấy ạ? Em không nói cái vụ compile! nó lấy đoạn kia lên tính toán rồi , sau đó lấy số 6 làm sao nó biết là nhân 6, với lại nhân chia trước thì phải nhân 5 với 6 trước! CPU tính kiểu gì mà ra đúng được kết quả ạ?

HelloWorld viết 03:24 ngày 01/10/2018

bạn học ctdl, stack với bài toán tiền tồ trung tố hậu tố chưa, hình như tương tự thế

Hưng viết 03:17 ngày 01/10/2018

Chưa anh ạ! (20 characters)

Văn Dương viết 03:25 ngày 01/10/2018

Trình biên dịch sẽ phải phân tích phép toán đó ra thành các phép toán đơn giản hơn như cộng trừ nhân chia 2 số. Sau đó sẽ dịch ra mã máy. CPU sẽ thực hiện tuần tư các mã này. Kết thúc 1 chuỗi mã thì sẽ thực hiện xong 1 phép toán.

Minh Hoàng viết 03:17 ngày 01/10/2018

Sử dụng Reverse Polish Notation để phân tích cú pháp của phép toán trước, xem toán tử nào thực hiện trước, sau đó thành mã mày, chuyển đến phần tính toán thì chỉ cần tính toán lần lượt là ra.

viết 03:17 ngày 01/10/2018

chắc ý bạn là học kiến trúc máy tính à?

cái hình này là của MIPS, đơn giản nhất rồi đó. Nhưng mà học xong quên rồi Giải thích thì mất công lắm

CPU của MIPS có khoảng 32 registers.
ví dụ tính x = a+b với a=1, b=2 thì:

li   $t1, 1         # gán $t1 = 1
li   $t2, 2         # gán $t2 = 2
add  $t0, $t1, $t2  # tính $t0 = $t1 + $t2

x = a + b*c, a,b,c=1,2,5

li   $t1, 2         # gán $t1 = 2
li   $t2, 5         # gán $t2 = 5
mutl $t1, $t2       # tính $lo = $t1 * $t2
li   $t3, 1         # gán $t3 = 1
add  $t0, $lo, $t3  # tính $t0 = $t3 + $lo

rồi ý bạn là lo tìm data path của nó trên cái hình MIPS ở trên hả? Học lâu quá quên rồi

Quân viết 03:26 ngày 01/10/2018

đoạn mã của bạn chắc là assembly rồi, assembly cũng là NN bậc cao hơn so với mã máy rồi, cpu đâu có hiểu được lệnh phức hợp như lệnh mutl đâu, nên đoạn mã này chắc chắn sẽ được dịch tiếp để chuyển thành mã máy cấp thấp hơn chỉ có mấy phép tính cơ bản như cộng/bit shift/…

Lê Nhật Thanh viết 03:33 ngày 01/10/2018

Theo mình biết thì đầu tiên phải biên dịch ra mã máy, mà cách để mình hiểu mã máy là dùng hợp ngữ hay ngôn ngữ Assembly. Phép nhân trong hợp ngữ đã là một phép toán phức tạp rồi. Phép toán của bạn nó biên dịch ra khá nhiệu lệnh mã máy. CPU từ đó thực hiện từng lệnh thôi. Nếu bạn từng học ngôn ngữ bậc thấp thì bạn biết, phép nhân là một phép khá phức tạp.

*grab popcorn* viết 03:33 ngày 01/10/2018

Đây đây:

en.wikipedia.org

Instruction cycle

An instruction cycle (also known as the fetch–decode–execute cycle or the fetch-execute cycle) is the basic operational process of a computer. It is the process by which a computer retrieves a program instruction from its memory, determines what actions the instruction dictates, and carries out those actions. This cycle is repeated continuously by a computer's central processing unit (CPU), from boot-up to when the computer is shut down. In simpler CPUs the instruction cycle is executed seque...

Đọc ở phần step, 4 bước đó.

Bài liên quan
0