摘要:
关于进制: 生活中有 7进制(星期)、60进制(小时)、10进制(算术)等等. 计算机要用到 10进制、16进制、2进制和 8进制. 8进制用得少了, 但也有, 譬如 Unix 服务器上的文件属性. 2进制是计算机容易识别的; 10进制是人容易识别的, 据说 10进制源自于人有十个手指. 计算机为什么会使用 8进制和 16进制呢? 因为: 23=8; 24=16; 这样比较容易和 2进制换算...
阅读全文
摘要:
前面提到 32 位的寄存器有: EAX EBX ECX EDX ESP EBP ESI EDI; 其中, EAX ECX EDX 是自由使用的. 那么剩下的 EBX ESP EBP ESI EDI 五个寄存器就是应该保护的! 所谓保护, 并不是不可以使用, 而是在使用前先把其中的值寄存在另外一个地方, 用完后再恢复其值. 如果不这样做, 有可能会发生意想不到的错误. 举例: //使用应该保护...
阅读全文
摘要:
//常量可以在汇编语句中运算 function Fun: Integer; const a = 11; b = 5; asm mov eax, a-b end; //测试 procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := Fun; ShowMessage(IntToSt...
阅读全文
摘要:
//关于地址参数(var/out) function Fun(var x,y: Integer): Integer; asm mov eax, x {现在 eax 中只是 x 的地址} mov eax, [eax] { [eax] 是取值, 是不是类似于 P^ ? } mov edx, y add eax, [edx] //mov @Result, e...
阅读全文
摘要:
//在汇编代码中使用 Result function Fun(x: Integer): Integer; asm mov ecx, &x dec ecx {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的} mov @Result, ecx {在本例中去掉 @ 也可以, 暂时不知怎么回事} end; //测试 procedure TForm1....
阅读全文