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.