Bạn có bất kỳ cách đơn giản nào để tạo một giá trị trong sổ đăng ký trong MIPS như một giá trị tuyệt đối không?giá trị tuyệt đối trong MIPS
Trả lời
Đây là một cách khá đơn giản để thực hiện.
#assume you want the absolute value of r1
ori $2, $zero, $1 #copy r1 into r2
slt $3, $1, $zero #is value < 0 ?
beq $3, $zero, foobar #if r1 is positive, skip next inst
sub $2, $zero, $1 #r2 = 0 - r1
foobar:
#r2 now contains the absolute value of r1
Cách dễ nhất chỉ cần thực hiện một chút phép toán nhị phân trên các giá trị.
http://en.wikipedia.org/wiki/Signed_number_representations mô tả cách các hệ thống khác nhau lưu trữ số âm của chúng. Tôi tin rằng MIPS sử dụng chương trình bổ sung hai của để lưu trữ số đã ký. Điều này làm cho nó khó hơn một chút so với cờ bit, có thể được tắt bằng cách ANDing số bằng 0b01111111, nhưng nó vẫn có thể thực hiện được.
Dưới đây là một biến thể chi nhánh-less:
# input and output in $t0
sra $t1,$t0,31
xor $t0,$t0,$t1
sub $t0,$t0,$t1
làm việc như thế này?
Đầu tiên, $t1
được lấp đầy với bit dấu của $t0
. Vì vậy, nếu $t0
là số dương $t1
sẽ được đặt thành 0 và nếu $t0
là âm $t1
sẽ được đặt thành 0xFFFFFFFF.
Tiếp theo, mỗi chút $t0
bị đảo ngược nếu $t1
là 0xFFFFFFFF, hoặc trái không thay đổi nếu $t1
là 0. Nó chỉ như vậy xảy ra mà đảo ngược tất cả các bit của một số giống như thiết lập nó để (-number)-1
(trong bổ sung hai nhân).
Cuối cùng, 0xFFFFFFFF (bằng -1) hoặc 0 bị trừ khỏi kết quả trung gian.
Vì vậy, nếu $t0
ban đầu là tiêu cực bạn sẽ nhận được:
$t0 = ($t0^0xFFFFFFFF) - 0xFFFFFFFF
== (-$t0 - 1) - -1
== (-$t0 - 1) + 1
== -$t0
.
Và nếu ban đầu nó dương tính bạn sẽ nhận được:
$t0 = ($t0^0) - 0
== $t0
.
Cảnh báo: Phương pháp này được bao trả bởi bằng sáng chế của Hoa Kỳ # 6073150. Có lẽ không hợp lệ như địa ngục, mặc dù, kể từ khi nó được biết đến dài hơn năm 1997. – Myria
Cách đơn giản nhất. Có một hướng dẫn giả mà thực hiện điều này:
abs $t1, $t1
sẽ lấy giá trị tuyệt đối của giá trị trong thanh ghi $ t1 và đặt nó trong $ t1
Lệnh giả này là trình tự 'sra/xor/sub' được hiển thị trong câu trả lời khác. – Myria
Dưới đây là một phiên bản tối ưu kích thước của nó. Đó là chậm hơn so với câu trả lời SRA/xor/Máy đóng, do các vấn đề dự đoán rẽ nhánh, nhưng nó là một hướng dẫn nhỏ:
bgtz $t0, label
label:
subu $t0, $zero, $t0
này hoạt động vì khe MIPS chậm trễ: nếu $t0
là tích cực, hướng dẫn subu
phủ nhận $t0
thực hiện hai lần. Bạn có thể cần phải kích hoạt .set noreorder
trong bộ lắp ráp của bạn.
- 1. giá trị tuyệt đối trong Haskell
- 2. Giá trị tuyệt đối trong vb.net
- 3. Giá trị tuyệt đối của NSInteger
- 4. Nhận giá trị tuyệt đối của một số trong Javascript
- 5. Giá trị tuyệt đối trong awk không hoạt động?
- 6. giá trị tuyệt đối cho nổi trong lõi OCaml
- 7. Đơn giản hóa Giá trị tuyệt đối trong Mathematica
- 8. giá trị tuyệt đối với khuôn khổ MongoDB hợp
- 9. Matlab - sắp xếp theo giá trị tuyệt đối
- 10. SQL giá trị tuyệt đối sum và lặp
- 11. Chuyển đổi giá trị tuyệt đối thành CSS tương đối bằng cách sử dụng Javascript
- 12. Tránh việc sử dụng cắt trong Prolog giá trị tuyệt đối vị
- 13. Trong tmux tôi có thể thay đổi kích thước cửa sổ thành giá trị tuyệt đối
- 14. Làm cách nào để tính giá trị tuyệt đối của một số trong XSLT?
- 15. Chuyển đổi thành giá trị tuyệt đối trong Mục tiêu-C
- 16. Hiển thị phạm vi Matplotlib yaxis sử dụng giá trị tuyệt đối thay vì giá trị offset?
- 17. Java, Cách xác định giá trị tuyệt đối và căn bậc hai
- 18. Dịch CSS và thay đổi giá trị định vị tuyệt đối
- 19. Mathematica không tính giá trị tuyệt đối của một số phức tạp với hệ số thực
- 20. Hủy bỏ bản sao giữ mục với giá trị tuyệt đối lớn nhất
- 21. Tại sao giá trị tuyệt đối của số nguyên âm tối đa-2147483648 vẫn là -2147483648?
- 22. MIPS hướng dẫn thiết lập di chuyển vs add/addi 0 để lưu trữ giá trị?
- 23. Url tuyệt đối trong jsp
- 24. Biểu đồ hình tròn Matplotlib: Cách thay thế giá trị tương đối được gắn nhãn tự động theo giá trị tuyệt đối
- 25. Đệ quy trong MIPS
- 26. giá trị đối tượng mặc định trong chức năng với đối số mặc định giá trị
- 27. đối tượng giá trị Null trong NHibernate
- 28. Đường dẫn tuyệt đối PHP trong requireonce
- 29. Sửa vị trí tuyệt đối trong Android
- 30. Có giá trị nào trong Python mà isinstance (giá trị, đối tượng) không đúng không?
số nguyên hoặc dấu phẩy động? – Gabe