初学Delphi嵌入汇编[30]

寄存器表

类型 名称 二进制码 寄存器说明
多功能寄存器 AL 0 累加寄存器低八位
AH 100 累加寄存器低八位
AX 0 16 位累加寄存器
EAX 0 32 位累加寄存器
BL 11 基址寄存器低八位
BH 111 基址寄存器低八位
BX 11 16 位基址寄存器
EBX 11 32 位基址寄存器
CL 1 计数寄存器低八位
CH 101 计数寄存器低八位
CX 1 16 位计数寄存器
ECX 1 32 位计数寄存器
DL 10 数据寄存器低八位
DH 110 数据寄存器低八位
DX 10 16 位数据寄存器
EDX 10 32 位数据寄存器
指针寄存器 SP 100 16 位堆栈指针寄存器
ESP 100 32 位堆栈指针寄存器
BP 101 16位基址指针寄存器
EBP 101 32 位基址指针寄存器
变址寄存器 DI 111 16 位目标变址寄存器
EDI 111 32位目标变址寄存器
SI 110 16 位源变址寄存器
ESI 110 32位源变址寄存器
专用寄存器 IP * 16 位指令指针寄存器
EIP * 32 位指令指针寄存器
FLAGS * 16 位标志寄存器
EFLAGS * 32位标志寄存器
段寄存器 CS 1 代码段寄存器
DS 11 数据段寄存器
ES 0 附加段寄存器
SS 10 堆栈段寄存器
FS 100 标志段寄存器
GS 101 全局段寄存器
控制寄存器 CR0 0 控制寄存器零
CR1* 1 控制寄存器一
CR2 10 控制寄存器二
CR3 11 控制寄存器三
CR4 100 控制寄存器四
CR5* 101 控制寄存器五
CR6* 110 控制寄存器六
CR7* 111 控制寄存器七
调试寄存器 DR0 0 调试寄存器零
DR1 1 调试寄存器一
DR2 10 调试寄存器二
DR3 11 调试寄存器三
DR4* 100 调试寄存器四
DR5* 101 调试寄存器五
DR6 110 调试寄存器六
DR7 111 调试寄存器七
任务寄存器 TR0 0 任务寄存器零
TR1 1 任务寄存器一
TR2 10 任务寄存器二
TR3 11 任务寄存器三
TR4 100 任务寄存器四
TR5 101 任务寄存器五
TR6 110 任务寄存器六
TR7 111 任务寄存器七
浮点寄存器 ST0 0 浮点寄存器零
ST1 1 浮点寄存器一
ST2 10 浮点寄存器二
ST3 11 浮点寄存器三
ST4 100 浮点寄存器四
ST5 101 浮点寄存器五
ST6 110 浮点寄存器六
ST7 111 浮点寄存器七
多媒体寄存器 MM0 0 媒体寄存器零
MM1 1 媒体寄存器一
MM2 10 媒体寄存器二
MM3 11 媒体寄存器三
MM4 100 媒体寄存器四
MM5 101 媒体寄存器五
MM6 110 媒体寄存器六
MM7 111 媒体寄存器七
单指令流、多数据流寄存器 XMM0 0 单指令流、多数据流寄存器零
XMM1 1 单指令流、多数据流寄存器一
XMM2 10 单指令流、多数据流寄存器二
XMM3 11 单指令流、多数据流寄存器三
XMM4 100 单指令流、多数据流寄存器四
XMM5 101 单指令流、多数据流寄存器五
XMM6 110 单指令流、多数据流寄存器六
XMM7 111 单指令流、多数据流寄存器七
注: 英文名称有星号"*"的表示作为保留域, 实际并 没有使用, 二进制码有星号"*"表示无需二进制数表示

根据 www.olanguage.org 的资料整理.

时间: 2024-12-08 09:50:05

初学Delphi嵌入汇编[30]的相关文章

初学Delphi嵌入汇编[3]

前面知道了一个汇编的赋值指令(MOV), 再了解一个加法指令(ADD), 就可以做个例子 了. 譬如: ADD AX,BX; 这相当于 Delphi 中的 AX := AX + BX; 另外提前来个列表 - Delphi 可以用汇编管理以下寄存器: 32 位寄存器: EAX EBX ECX EDX ESP EBP ESI EDI 16 位寄存器: AX BX CX DX SP BP SI DI 8 位寄存器 : AL BL CL DL AH BH CH DH 16 位段寄存器: CS DS SS

初学Delphi嵌入汇编[21]

除了 Byte.Word.Cardinal.Integer 外, Delphi 的整数类型还有: Longint.Longword.Shortint.Smallint.Int64 其中 Longint 相当于 Integer; Longword 相当于 Cardinal. 这样还有三种类型: Shortint.Smallint.Int64//Shortint 是1字节(8位)有符号整数 var I: Shortint; begin //其最大值是: 011111112 asm mov I, 01

初学Delphi嵌入汇编[18]

汇编中的SHL(左移).SHR(右移)命令也是和 Delphi 一样的.var ByteNum: Byte; begin //右移 shr asm mov al, 10000000B {128} shr al, 1 {shr 10000000 一次会得到 01000000} mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {64; shr 相当于 ÷2} //左移 shl asm mov al, 00000001B {1} shl al,

初学Delphi嵌入汇编[16]

关于进制: 生活中有 7进制(星期).60进制(小时).10进制(算术)等等. 计算机要用到 10进制.16进制.2进制和 8进制. 8进制用得少了, 但也有, 譬如 Unix 服务器上的文件属性. 2进制是计算机容易识别的; 10进制是人容易识别的, 据说 10进制源自于人有十个手 指. 计算机为什么会使用 8进制和 16进制呢? 因为: 23=8; 24=16; 这样比较容易和 2进 制换算. 从这里也能看出, 2进制和 10进制的换算相对复杂些. 下面例子中说明了进制的表示方法, 七个函数

初学Delphi嵌入汇编[12]

//在汇编代码中使用 Result function Fun(x: Integer): Integer; asm mov ecx, &x dec ecx {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的} mov @Result, ecx {在本例中去掉 @ 也可以, 暂时不知怎么回事} end; //测试 procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := 100; i := Fu

初学Delphi嵌入汇编[11]

//Delphi 函数function DelphiFun(x: Integer): Integer; begin Result := x * 2; end; //汇编函数, 和上面的函数是同样的功能function AsmFun(x: Integer): Integer; asm add eax, eax {eax 可以获取第一个参数, 同时又是函数的返回值, 所以可以如此 简洁!} end; //测试 DelphiFunprocedure TForm1.Button1Click(Sender

初学Delphi嵌入汇编[9]

//可以用 asm 代替 begin function Fun(x: Integer): Integer; asm mov eax, x inc eax end; { 汇编中的 inc 指令和 Delphi 中的 inc 是一样的; 本例也同时证明 eax 寄存器确实保存着函数的返回值. } procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := 8; i := Fun(i); ShowMessage(

初学Delphi嵌入汇编[6]

//在汇编中访问 Delphi 的变量可以使用 & 操作符 procedure Proc(str1,str2: string); var s1,s2: string; begin asm mov ecx, &str1 {} mov edx, &str2 mov &s1, ecx {} mov &s2, edx end; ShowMessage(s1 + s2); end; {在没有歧义的情况下, 操作符 & 是可以省略的, 譬如上面的例子就可以省略} //测

初学Delphi嵌入汇编[1]

非科班出身, 现在才接触汇编, 惭愧呀, 好好学! 主选课本是清华大学王爽老师的<汇编语言>. 推荐 王爽老师的汇编网 ------------------------------------------------------------------------- ------- 汇编语言之前是机器语言. 机器语言是机器指令的集合, 机器指令是一系列二进制数字, 计算机将之转换为一系 列高低电平, 而实现运算. 在 PC 机上运行机器指令的是 CPU; 不同的 CPU 有不同的指令, 所以某