2012-03-22 39 views

Trả lời

0

Nó không; scr (thay đổi với carry). Tuy nhiên, thử nghiệm có thể có nghĩa là để (và không) kiểm tra như thế nào bit mang được thiết lập TRƯỚC KHI được thực hiện.

+1

Bạn có chắc chắn không? Cuốn sách của tôi đưa ra ví dụ tiếp theo: Trước khi chuyển: AL = 10101110 ; shr AL, 1 ; Sau ca làm việc: 01011100, CF = 1 ; Có sai không? –

+1

Nguồn: http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate Bên cạnh đó, nếu nó đã làm, những gì sẽ là điểm của scr có được? –

+3

Không có 'scr'. 'shr' và' shl' chuyển sang bit mang. Nguồn: http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2b-manual.pdf – ughoavgfhw

9

shr AL, 1 di chuyển tất cả các bit trong AL đúng một nơi.

Bit ngoài cùng bên phải ban đầu được chuyển ra khỏi thanh ghi AL vào cờ mang theo (và bit ngoài cùng bên trái mới được đặt thành 0). Ví dụ:

+------------------------+    +------------------------+ 
| 1 0 0 1 0 1 0 1 |    | 0 1 1 0 0 1 0 0 | 
+------------------------+    +------------------------+ 
    \ \ \ \ \ \ \ \  or   \ \ \ \ \ \ \ \ 
    \ \ \ \ \ \ \ \     \ \ \ \ \ \ \ \ 
+------------------------+ CF   +------------------------+ CF 
|(0) 1 0 0 1 0 1 0 | 1    |(0) 0 1 1 0 0 1 0 | 0 
+------------------------+    +------------------------+ 

Trong xét của bạn về câu trả lời khác:

Cuốn sách của tôi đưa ra ví dụ sau: Trước khi thay đổi: AL = 10.101.110; shr AL, 1; Sau ca làm việc: 01011100, CF = 1; Có sai không?

Nếu đó là những gì nó nói, thì có. Đó là một sự dịch chuyển trái (shl AL, 1), không phải là một sự dịch chuyển đúng: các bit trong AL tất cả được di chuyển sang trái một chỗ và cờ mang theo đã được đặt thành bit được dịch chuyển từ đầu bên trái.

0

để thêm một số giải thích:

shr AL, 1; nó sẽ (SH) ift (R) ight (1) x giá trị chứa trong thanh ghi AL, là 8 byte thấp hơn của thanh ghi AX. Do đó nó sẽ chia cho 2 giá trị chứa trong AL.

Nếu AL trước đây thậm chí là 0b100 (4), nó sẽ trở thành 0b10 (2) và đặt 0 vào cờ mang theo. Cờ mang theo bit 0 trong thanh ghi cờ https://en.wikipedia.org/wiki/FLAGS_register

Nếu trước đây AL là giá trị lẻ như 0b101 (5) thì nó sẽ trở thành 0b10 (2) và đặt 1 vào thanh ghi cờ. Do đó, cờ thực hiện sẽ hoạt động như phần còn lại nếu bạn chia cho 2.

jnc bit_0; Nó sẽ (J) ump để nhãn 'bit_0' nếu (N) o (C) cờ arry được thiết lập, tức là nếu giá trị là ngay cả (như 0b100 trong ví dụ trên) trước khi thay đổi.

Các vấn đề liên quan