Tại sao hướng dẫn sao chép thường được đặt tên MOV?


23

Trong khá nhiều trình biên dịch, một hướng dẫn sao chép giá trị thường được đặt tên là "MOV" và mô tả của nó trong hướng dẫn sử dụng cũng thường chứa "di chuyển" (tuy nhiên, các từ khác có thể được sử dụng, như "tải", "lưu trữ", "giải nén", v.v. ) Rất hiếm khi tìm thấy một ISA ) không tuân theo quy ước này.

Mặt khác, trong các bối cảnh khác, "di chuyển" khác với "bản sao" theo nghĩa là nguồn bị phá hủy (ví dụ: "mv" so với "cp" trong Unix, Move [F6] trong Norton Commander và bản sao, v.v. ) "Di chuyển" của nhà lắp ráp thực sự có "bản sao" ngữ nghĩa, giữ nguyên giá trị nguồn.

Tôi đã thấy rằng điều này đã bắt đầu ít nhất kể từ IBM 1401 (1959), nhưng, IBM 360 chỉ sử dụng từ này để sao chép trong bộ lưu trữ, nhưng không dùng cho các hoạt động giữa các thanh ghi và lưu trữ (sử dụng "tải" và "lưu trữ") . Nhưng tại sao nó vẫn được sử dụng rộng rãi và không được thay thế bằng "bản sao" hoặc "cửa hàng"?


5
Wikipedia nói : "Chuyển động từ cho hoạt động này, nói đúng ra là một cách hiểu sai: nó không liên quan nhiều đến khái niệm vật lý của việc di chuyển một vật thể từ A đến B, với vị trí A sau đó trở nên trống rỗng, thay vào đó, MOV tạo ra một bản sao của trạng thái của đối tượng tại A và ghi đè trạng thái cũ của B trong quá trình này. Điều này được phản ánh trong một số ngôn ngữ lắp ráp khác bằng cách sử dụng các từ như tải , lưu trữ hoặc sao chép thay vì di chuyển. ".
Uwe Keim

@UweKeim hmm, tôi đã googled để giải thích trước câu hỏi nhưng không được cho ăn với bài viết này. Dù sao, điều này giải thích trạng thái hiện tại nhưng không đưa ra manh mối về nguồn gốc thực sự ...
Netch 24/12/13

2
@gnat Tôi có nghĩa là "Kiến trúc tập lệnh", không phải là bus ISA. Tôi đã làm lại nó.
Lấy

@ Xin cảm ơn! Bằng cách nào đó tôi đã xoay sở để bỏ lỡ điều đó trong một danh sách lớn các định hướng tại Wikipedia
gnat

1
Tôi nghi ngờ có bất kỳ cách nào để tìm hiểu lý do tại sao ban đầu nó được gọi là "di chuyển" thay vì "sao chép", nhưng suy đoán là thú vị. Trên trang wikipedia dành cho ngôn ngữ lắp ráp , nó mô tả MOV là một thao tác để "di chuyển một bản sao của dữ liệu", đây là một cách giải thích thú vị. Một khả năng khác là về mặt sử dụng thực tế của MOV, hoạt động về mặt khái niệm là sự chuyển động của dữ liệu; rằng chúng tôi không quan tâm đến nguồn nữa.
Ben Lee

Câu trả lời:


10

Trong một số bộ hướng dẫn, tồn tại các hướng dẫn riêng biệt để tải một thanh ghi từ bộ nhớ, lưu trữ một thanh ghi vào bộ nhớ hoặc chuyển các thứ giữa các thanh ghi. Trong khi một số hình thức ngôn ngữ lắp ráp sử dụng động từ "tải" cho tất cả mọi thứ (ví dụ như việc nhớ mật khẩu Z80 Zilog sử dụng ld a,(1234h), ld (1234h),ald a,b), và một số sử dụng chữ "T" ransfer (ví dụ như 6502 với TXA cho "Chuyển X để A"), một số sử dụng "di chuyển" cho các hoạt động regster-to-register để phân biệt chúng với tải và cửa hàng. Nếu một người có định dạng hướng dẫn như 68000 sử dụng cùng một hình thức hướng dẫn chung cho đăng ký để đăng ký, đăng ký vào bộ nhớ, đăng ký bộ nhớ và thậm chí các hoạt động từ bộ nhớ đến bộ nhớ, thì động từ "di chuyển" là có lẽ là một động từ có mục đích chung tốt hơn bất kỳ từ thay thế nào.

Tôi không biết về các bộ hướng dẫn máy tính mini hoặc máy tính lớn trước 8080, nhưng 8080 đã sử dụng "tải" và "lưu trữ" cho hầu hết các hướng dẫn truy cập bộ nhớ và "Mov" cho các hướng dẫn đăng ký để đăng ký, nhưng hầu hết các hướng dẫn có thể hoạt động trên một thanh ghi 8 bit tùy ý cũng có thể hoạt động trên "M", là vị trí bộ nhớ được xử lý bởi HL, do đó, "MOV" đến hoặc từ "M" thực sự sẽ hoạt động như một tải hoặc lưu trữ.

Đối với sự phân biệt giữa "sao chép" và "di chuyển", tôi nghi ngờ điều đó có liên quan nhiều đến thực tế là mã không thể tạo hoặc hủy các thanh ghi; chúng chỉ tồn tại Khi mô tả hành vi của chuỗi mã mov bx,ax / mov ax,1234, việc nói lệnh đầu tiên sao chép bx sang ax và có nghĩa là sẽ phá hủy giá trị trong axvà thay thế nó bằng giá trị 1234 hoặc có ý nghĩa hơn khi xem lệnh đầu tiên hướng dẫn như đã chuyển giá trị từ bx sang ax (biến giá trị trong ax thành "không quan tâm") và lệnh thứ hai tải ax (không được quan tâm) với 1234? Đôi khi các thanh ghi nguồn vẫn có ý nghĩa sau một lệnh chuyển đăng ký, nhưng vì không có gì trong tập lệnh để cho biết liệu nó sẽ như thế nào,


Tôi không có bất kỳ bằng chứng nào hỗ trợ câu trả lời của bạn, nhưng nó chắc chắn nghe có vẻ đúng. Các hoạt động tải / lưu trữ sẽ có một đường dẫn khác trong CPU / microcode do chuyển sang bộ nhớ / bộ đệm, nhưng việc di chuyển giữa các thanh ghi có thể là một chu kỳ (không cần phải chờ ở các giai đoạn đường ống khác) và do đó có giá trị khác biệt. Nhưng điều này không giải thích di chuyển so với sao chép ...
JBRWilkinson

Đã đồng ý. Xem xét ví dụ như các thiết bị đầu vào được ánh xạ bộ nhớ. Đọc một vị trí nguồn có thể sửa đổi nó - ví dụ như loại bỏ mục mà bạn đọc từ hàng đợi phần cứng, thay thế nó bằng mục hàng đợi tiếp theo. Nghe có vẻ như là một động thái chứ không phải là một bản sao - nguồn không còn lưu giữ thông tin đó, chỉ có đích đến. Và hành vi đó không phải do CPU quyết định, nó được quyết định bởi thiết bị ánh xạ bộ nhớ đó.
Steve314

Ngôn ngữ hội sử dụng tính năng ghi nhớ "CPU-centric". Đó là, mọi thứ được đặt tên theo quan điểm của các thanh ghi của CPU. Do đó, "tải" thường sao chép một giá trị vào một thanh ghi, trong khi "lưu trữ" thường sao chép một giá trị từ một thanh ghi vào bộ nhớ. Điều gì sau đó để gọi sao chép một giá trị từ đăng ký này sang đăng ký khác? "Di chuyển" là một lựa chọn rõ ràng. Nếu cùng một hoạt động vi mã thực hiện cả hai (như trong 68000), "di chuyển" là một lựa chọn chung hơn cho tải / lưu trữ. "Sao chép" có thể đã được sử dụng nhưng có thể là dư thừa vì thực sự không có thứ gọi là "di chuyển" thực sự, nơi nguồn bị bỏ trống.
DocSalvager

@DocSalvage: Nếu thanh ghi 32 bit là một bó cố định gồm 32 flip flop hoặc chốt sẽ luôn tồn tại, "di chuyển" không nhất thiết phải có ý nghĩa. Tuy nhiên, trong các kiến ​​trúc có đổi tên đăng ký, toán hạng "di chuyển" cũng sẽ làm mất hiệu lực nguồn có thể cải thiện hiệu quả bằng cách giải phóng một thanh ghi ảo. Tôi chưa bao giờ nghe nói về một điều như vậy được thực hiện, nhưng tôi không biết bất kỳ kiến ​​trúc nào được thiết kế với mục đích đổi tên đăng ký.
supercat

@supercat: Trong phần cứng máy tính, tất cả các thanh ghi và tất cả các vị trí bộ nhớ đều chứa một giá trị mọi lúc. Thực tế không có thứ gọi là "null" hay "trống". Chúng tôi sử dụng các quy ước tùy ý để biểu thị khi đăng ký hoặc nội dung bộ nhớ không hợp lệ. Rất thường xuyên, chúng tôi để "0" biểu thị "null" nhưng không phải lúc nào cũng vậy. Chẳng hạn, trạng thái "null" của một khối bộ nhớ có thể được biểu thị bằng các địa chỉ bắt đầu và kết thúc được lưu trữ ở một vị trí khác. Có rất nhiều kỹ thuật khác. Cuối cùng, việc ghi nhớ ngôn ngữ là tùy ý mặc dù chúng tôi cố gắng cho tùy chọn được hiểu rộng rãi nhất.
DocSalvager

0

Bạn chắc chắn đúng. Hầu hết nếu không phải tất cả các phiên bản của một lệnh Mov thực sự là một bản sao.

Một số thậm chí không thực sự có một Mov nó là một hướng dẫn giả cho

add dest=source+zero.

Cũng hiểu rằng cú pháp ascii là tùy ý, mã máy có nghĩa là một cái gì đó và được xác định và sửa cho bộ xử lý đó. Hầu hết, nếu không phải tất cả thời gian, người tạo / nhà cung cấp bộ xử lý sẽ tạo một cú pháp một phần để xác định tập lệnh (mã máy) và một phần để xác định cú pháp hoạt động với một công cụ mà họ cũng đã tạo hoặc ủy quyền để chuyển đổi ngôn ngữ lắp ráp đó thành máy mã cho bộ xử lý của họ. Ví dụ, bạn chắc chắn có thể đi vào trình biên dịch gnu (có xu hướng tự làm việc của mình và không tuân theo cú pháp của nhà cung cấp bộ xử lý nào) và thêm một lệnh giả sao chép.

Các trường hợp sử dụng: ngày nay hầu hết mã ngôn ngữ lắp ráp là trình biên dịch được tạo và lệnh Mov thường được sử dụng để thực sự di chuyển một giá trị từ thanh ghi này sang thanh ghi khác để có thể sử dụng lại thanh ghi nguồn (vị trí bộ nhớ, v.v.). Vì lý do của quy ước gọi cho bộ xử lý đó hoặc vì một số lệnh hoặc tập lệnh không trực giao, do đó bạn phải di chuyển mọi thứ xung quanh. Chắc chắn có những lúc mà một bản sao của một giá trị được mong muốn và Mov có thể được sử dụng để tạo bản sao đó.

Tôi nghi ngờ một cách nghiêm túc, chúng tôi sẽ không bao giờ biết cá nhân hoặc nhóm nào đã đưa ra thuật ngữ đầu tiên và lý do tại sao họ chọn di chuyển qua bản sao. Bởi vì chúng tôi đã quen với nó, chúng tôi có xu hướng sử dụng lại nó với mỗi bộ hướng dẫn mới. Như đã đề cập, một số bộ hướng dẫn sử dụng tải dựa trên thanh ghi và hướng dẫn lưu trữ trong đó một toán hạng là một thanh ghi và cái kia là một địa chỉ và Mov cho chỉ thanh ghi để đăng ký trường hợp. Và các tập lệnh khác sử dụng Mov để đăng ký hoặc mem cho toán hạng. Mặc dù bạn chắc chắn có thể thêm bản sao vào bất kỳ / nhiều trình biên dịch mã nguồn mở nào, việc sử dụng lực kéo sẽ khó khăn hơn. Nếu bạn làm việc ở đâu đó nơi bạn có quyền kiểm soát cú pháp ban đầu (làm việc cho một nơi tạo bộ xử lý mới), nơi bạn có thể ra lệnh đăng ký để đăng ký di chuyển được gọi là sao chép,


-4

Thay thế một hướng dẫn có nghĩa là phá vỡ tính tương thích ngược. Trình biên dịch với cú pháp mới sẽ không thể tập hợp mã được viết bằng cú pháp cũ - trừ khi mã đó không sử dụng hướng dẫn đó (và nơi duy nhất bạn sẽ thấy mã lắp ráp không sử dụng MOVlà trong các ví dụ cú pháp hiển thị các hướng dẫn khác ...)

Trình biên dịch thường tạo mã lắp ráp và tự động chuyển nó cho trình biên dịch chương trình, do đó chúng sẽ phải được sửa đổi để phù hợp với trình biên dịch mới. Nếu một ngôn ngữ cho phép lắp ráp nội tuyến, mã nguồn cũ sử dụng trình biên dịch nội tuyến với các MOVhướng dẫn sẽ không hoạt động nữa.

Vì vậy, chúng ta đang nói về một sự phá vỡ mã khổng lồ, và để làm gì? nó sẽ không làm cho ngôn ngữ trở nên dễ đọc hơn, bởi vì không giống như một số ngôn ngữ cấp cao, bạn không có cơ hội nói mã lắp ráp làm gì mà không biết lắp ráp, và nếu bạn biết lắp ráp, bạn biết MOVnó làm gì .

Chi phí lớn với mức tăng bằng không dễ dàng giải thích lý do tại sao hướng dẫn chưa được đổi tên.


3
Làm thế nào để trả lời câu hỏi này?
gnat

2
Câu duy nhất kết thúc bằng dấu chấm hỏi là 'Nhưng tại sao nó vẫn được sử dụng rộng rãi và không được thay thế bằng "bản sao" hoặc "cửa hàng"?'.
Idan Arye

2
Nó không giải thích lý do tại sao hướng dẫn được đặt tên như vậy để bắt đầu, bởi vô số ISA được thiết kế từ đầu (nghĩa là không có ràng buộc tương thích ngược) trong nhiều thập kỷ. Ngoài ra, nếu một nhà cung cấp muốn thay đổi tính năng ghi nhớ mặc dù khả năng tương thích ngược, họ có thể cung cấp bí danh và thúc đẩy việc sử dụng nó.

1
"OP" có nghĩa là gì? Và, tôi chưa thấy một lời giải thích thực sự.
Lấy

1
Tôi là người đăng ban đầu và tôi sẽ nói rằng việc sao chép giữa các ô nhớ trong S / 360 không phải là "hoạt động hơi khác" mà chỉ là trường hợp đặc biệt của cùng một bản sao. Câu hỏi vẫn chưa được giải quyết.
Lấy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.