Delphi内联汇编实现的十进制转二进制

指令介绍:

LEA指令是取地址指令,Delphi的@运算符相当于LEA指令

JC/JNC:测试CF标志。JC为CF=1转移到标号所指示的指令处执行;JNC指令,CF=0则跳转到标号所指示的指令处执行。

JZ/JNE:测试ZF标志。JZ为ZF=1转移到标号所指示的指令处执行;JNE指令,ZF=0则跳转到标号所指示的指令处执行。
SHL指令:左位移指令,最后移出的位送进CF标志寄存器。

BYTE PTR:指定读写内存是以字节为单位,相应的有 WORD PTR、DWORD PTR...

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    BinaryString:Array[0..32] of char;
    i:Integer;
begin
    i:=StrToInt(Edit1.Text);
    asm
        //取得BinaryString数组的首地址,放到EDX寄存器
        LEA EDX,BinaryString;
        //把ECX进行异或操作,即置0
        XOR ECX,ECX;
        MOV ECX,32;
        MOV EAX,DWORD PTR[i];
   @@L1:
        //把EAX的值左移1位
        SHL EAX,1;
        //把'0'送到EDX所指的地址中
        MOV BYTE PTR [EDX],'0';
        //如果左移一位,最后移出的位是0的话就跳转
        JNC @@ZERO;
        //把'1'送到EDX所指的地址中
        MOV BYTE PTR [EDX],'1';
   @@ZERO:
        //EDX加1
        INC EDX;
        //ECX减1
        DEC ECX;
        CMP ECX,0;
        //如果ECX等于0则跳转
        JNE @@L1;
    end;
    Edit2.Text:=BinaryString;
end;

end.

                                     

转载于:https://www.cnblogs.com/JiangHuakey/archive/2010/10/26/1861884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值