Assemble
键盘上的疯兔
乐于钻研问题背后的规律,并乐于编程证实。
展开
-
汇编语言多文件程序设计
汇编语言多文件程序设计 2011-11-7 晴 于韶关仁化 变量的共享 关键字externdef跟C语言中的extern相似。在定义与引用模块(源文件)中的声明的一致的。 声明格式: EXTERNDEF [[langtype]] name:type [[, [[langtype]] name:type]]... MSDN Remars:原创 2011-11-07 19:42:02 · 2379 阅读 · 0 评论 -
offset与lea
offset与lea offset是操作符(或说伪指令);lea是硬指令,其操作数必须为内存操作数;offset在编译阶段得出偏移地址;lea在程序执行的时候才去的偏移地址; offset经过编译后,得到的是操作数是一个数值。从速度上来说,要比lea来得快! 但是,从复杂度和灵活性来说,lea则远远超过offset。 下面的指令是非法的: MOV AX,OFFSET [BX+200原创 2011-11-10 22:42:06 · 1376 阅读 · 0 评论 -
win32汇编实现汉诺塔
.386 .model stdcall, flat option casemap:none include msvcrt.inc includelib msvcrt.lib .data format db '%d: %c->%c', 13, 10, 0 tmp dword 41h, 42h, 43h count dword 0 .code Hanio proc,原创 2011-11-11 07:22:02 · 3003 阅读 · 5 评论 -
数据段与代码段穿插
;代码段不一定要连在一块 ;下面代码输出 ;hello shengfu ;hello world .386 .model stdcall, flat option casemap:none include msvcrt.inc includelib msvcrt.lib externdef string:byte .data string2 db 'hello world原创 2011-11-10 23:03:04 · 652 阅读 · 0 评论 -
补码与算术右移指令
补码与算术右移指令 补码杂谈 补码的优越性,使得用最高位作符号的原码显得多余。正数的补码是它本身,负数的补码通过对其绝对值进行求补获得。求补运算是将数值按位取反,再加一。不要与补码的概念混淆。它具有许多的优良的特性。 求补过程与反求补过程为同一过程,也就是说,对一个数求补两次后,还是这个数本身。通过补码的物理意义这是很好理解的。也可以分析求补的运算过程来说明。对某数按位取反后,加上1,这时开原创 2011-09-01 20:21:32 · 6454 阅读 · 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 · 1832 阅读 · 0 评论