
Assemble
键盘上的疯兔
乐于钻研问题背后的规律,并乐于编程证实。
展开
-
汇编语言多文件程序设计
汇编语言多文件程序设计2011-11-7 晴 于韶关仁化变量的共享 关键字externdef跟C语言中的extern相似。在定义与引用模块(源文件)中的声明的一致的。声明格式: EXTERNDEF [[langtype]] name:type [[, [[langtype]] name:type]]...MSDN Remars:原创 2011-11-07 19:42:02 · 2424 阅读 · 0 评论 -
offset与lea
offset与lea offset是操作符(或说伪指令);lea是硬指令,其操作数必须为内存操作数;offset在编译阶段得出偏移地址;lea在程序执行的时候才去的偏移地址;offset经过编译后,得到的是操作数是一个数值。从速度上来说,要比lea来得快! 但是,从复杂度和灵活性来说,lea则远远超过offset。下面的指令是非法的:MOV AX,OFFSET [BX+200原创 2011-11-10 22:42:06 · 1485 阅读 · 0 评论 -
win32汇编实现汉诺塔
.386.model stdcall, flatoption casemap:noneinclude msvcrt.incincludelib msvcrt.lib.dataformat db '%d: %c->%c', 13, 10, 0tmp dword 41h, 42h, 43hcount dword 0.codeHanio proc,原创 2011-11-11 07:22:02 · 3036 阅读 · 5 评论 -
数据段与代码段穿插
;代码段不一定要连在一块;下面代码输出;hello shengfu;hello world.386.model stdcall, flatoption casemap:noneinclude msvcrt.incincludelib msvcrt.libexterndef string:byte.datastring2 db 'hello world原创 2011-11-10 23:03:04 · 669 阅读 · 0 评论 -
补码与算术右移指令
补码与算术右移指令补码杂谈补码的优越性,使得用最高位作符号的原码显得多余。正数的补码是它本身,负数的补码通过对其绝对值进行求补获得。求补运算是将数值按位取反,再加一。不要与补码的概念混淆。它具有许多的优良的特性。求补过程与反求补过程为同一过程,也就是说,对一个数求补两次后,还是这个数本身。通过补码的物理意义这是很好理解的。也可以分析求补的运算过程来说明。对某数按位取反后,加上1,这时开原创 2011-09-01 20:21:32 · 6507 阅读 · 0 评论 -
关于调用帧中的栈
写这篇文章,我想说明一些看起来不复杂,但要花些时间反应的问题。Q: esp指向哪?A: 就是栈顶,而不是栈顶的下一个元素。Q: 如何在windbg中查看当前栈?A: dp esp. p意指 Pointer-sized. 单列模式格式: dp /c1 esp因为栈是向下生长的,dp是向上显示的,所以dp esp从栈顶开始,向上显示的内存,刚好就是栈的内容。Q: c原创 2014-11-02 10:57:24 · 1859 阅读 · 0 评论