位测试操作

点击下载演示工程

BT指令
  功能:用于对指定位进行位测试(将该位送往CF),但并不改变该位的值。
BTS指令
  功能:用于对指定位进行位测试(将该位送往CF),并将该位置1。
BTC指令:

  功能:用于对指定位进行位测试(将该位送往CF),并将该位取反。
BTR指令:

  功能:用于对指定位进行位测试(将该位送往CF),并将该们清0。

JC指令:

  功能:用于跳转,如果CF标志位等于1则跳转。

JNC指令:

     功能:用于跳转,如果CF标志位等于0则跳转。

关于二进制串的位:

  00001001  这是一个有8个位的二进制串,从最右边数起第1个数字'1'称为第0位,第2个数字称为第1位,其它的依此类推。最高位最左边的数字,最低位最右边的数字。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
label
    NotZero;
begin
      {如果二进制串(00001001b)的第3位(从右数起第1个二进制位叫做第0位,那么第3位即是'1')
       为1那么跳转到NotZero,否则退出过程。}
      asm
          XOR EAX,EAX;
          MOV AL,00001001b;
          BT EAX,3;
          JC NotZero;
      end;
      Exit;
NotZero:
      ShowMessage('程序名称:位测试操作'+#13+
                  '版本:1.0.0.0'+#13+
                  '日期:2010-10-14'+#13+
                  '作者:江湖一键客'+#13+
                  '业务联系QQ:82530662');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    i:Integer;
label
    NotZero;
begin
      {如果二进制串(00001001b)的第3位为1那么跳转到NotZero,(并且把第3位取反,即执行BTC指令后
       EAX=00000001),否则退出过程。}
      asm
          XOR EAX,EAX;
          MOV AL,00001001b;
          BTC EAX,3;
          MOV i,EAX;
          JC NotZero;
      end;
      Exit;
NotZero:
      ShowMessage('位测试并取反后i的值为:'+IntToStr(i));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
    i:Integer;
label
    NotZero;
begin
      {如果二进制串(00001001b)的第3位为1那么跳转到NotZero,(并且把第3位复位,即执行BTR指令后
       EAX=00000001),否则退出过程。}
      asm
          XOR EAX,EAX;
          MOV AL,00001001b;
          BTR EAX,3;
          MOV i,EAX;
          JC NotZero;
      end;
      Exit;
NotZero:
      ShowMessage('位测试并复位后i的值为:'+IntToStr(i));
end;

procedure TForm1.Button4Click(Sender: TObject);
var
    i:Integer;
label
    IsZero;
begin
      {如果二进制串(00000001b)的第3位为0那么跳转到IsZero,(并且把第3位置位,即执行BTS指令后
       EAX=00001001),否则退出过程。}
      asm
          XOR EAX,EAX;
          MOV AL,00000001b;
          BTS EAX,3;
          MOV i,EAX;
          JNC IsZero;
      end;
      Exit;
IsZero:
      ShowMessage('位测试并置位后i的值为:'+IntToStr(i));
end;

end.

转载于:https://www.cnblogs.com/JiangHuakey/archive/2010/10/14/1851662.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值