2010-12-29 46 views
9

Bạn sử dụng các hướng dẫn jump family như thế nào?Ví dụ về hướng dẫn JLE jmp lắp ráp

Đây là những gì họ đã có:

nhãn JL
"It" nhảy nếu nó là nhỏ hơn hoặc nếu nó không phải là lớn hơn hoặc bằng.

Câu hỏi của tôi là số trong câu này là gì? Giả sử tôi có một biến số trong ebx và tôi muốn chuyển đến nhãn there: nếu ebx<= 10.

Cụ Tôi quan tâm đến việc sử dụng gia đình x86 nhảy của hướng dẫn

Trả lời

12

Các bước nhảy tự kiểm tra cờ vào sổ đăng ký EFL. Chúng thường được thiết lập với TEST hoặc CMP (hoặc là một tác dụng phụ của nhiều hướng dẫn khác).

CMP ebx,10 
JLE there 
  • CMP tương ứng với tính toán sự khác biệt của các toán hạng, cập nhật cờ và loại bỏ kết quả. Thường được sử dụng để kiểm tra lớn hơn/nhỏ hơn
  • KIỂM TRA tương ứng với việc tính toán nhị phân AND của toán hạng, cập nhật cờ và hủy kết quả. Thường được sử dụng để kiểm tra bình đẳng.

Xem thêm: The art of assembly language on CMP

Là một sidenote: Bạn sẽ nhận được Intel reference manuals. Cụ thể là hai phần "Sách hướng dẫn của Nhà phát triển Phần mềm Kiến trúc Intel® 64 và IA-32 Tập 2: Hướng dẫn Thiết lập Lệnh" mô tả tất cả các lệnh x86.

+1

Trong ví dụ này, không JLE nhảy khi 10 là nhỏ hơn hoặc bằng EBX hoặc nhảy khi ebx nhỏ hơn hoặc bằng 10? –

+1

@AndersonGreen Nó nhảy khi nội dung của ebx là <= 10. – d0rmLife

3

Lắp ráp x86 sử dụng hệ thống cờ bit thể hiện kết quả so sánh. Hướng dẫn nhảy có điều kiện sử dụng các cờ này khi quyết định có thực hiện nhảy hay không.

Trong trường hợp của bạn, bạn muốn sử dụng hai hướng dẫn sau đây:

cmp ebx, 10  ; compare EBX and 10 
jle label  ; jump if the previous comparison is "less than or equal" 
… 
label: 
… 
5

JLE hướng dẫn thực sự kiểm tra hai lá cờ cùng một lúc:

  • Zero, Cờ (ZF)
  • Carry cờ (CF)

Nếu cờ Carry và Zero là 1 thì nhảy tương đối ngắn sẽ được thực thi.

Có thể chỉ là một từ cách hoạt động của CMP hướng dẫn. Hướng dẫn CMP giống như SUB (trừ), nhưng thanh ghi đích sẽ không được cập nhật sau khi thực thi. Vì vậy, mã sau sẽ thực hiện cùng một kết quả như CMP ebx, 10.Lệnh CMP và SUB ảnh hưởng đến cờ: Thẻ Carry, Parity, Auxiliary, Zero, Sign và Overflow.

push ebx   //store ebx value to stack 
sub ebx, 10 
pop ebx   //restore ebx value from stack 
1

JB - làm việc với số unsigned (Chuyển Dưới) <

JL - làm việc với số ký

mov bx,0  // BX := 0 
cmp bx,FF // 0 < -1 or 0 < 255 (Jump Flag and Sign Flag will change) 
jl butter // if you use JL jump will not occurs, cus 0 > -1 
jb butter // if you use JB jump will occurs, cus 0 < 255 
Các vấn đề liên quan