分享
 
 
 

(译)win32asm教程-8

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

9.0更多的伪代码

这儿有更多的伪代码

TEST

Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器。结果本身不会保存。Test用来测试一个位,例如寄存器:

Test eax, 100b;b后缀意为二进制

jnz bitset

如果eax右数第三个位被设置了,jnz将会跳转。Test的一个非常普遍的用法是用来测试一方寄存器是否为空:

test ecx, ecx

jz somewhere

如果ecx为零,Jz跳转

关于栈的伪代码

在我讲栈的伪代码之前,我会先解释什么是栈。栈是内存的一个地方,esp为指向栈的指针。栈是用来保存临时数值的地方,有两个指令来放入一个指和再把它取出来:push和pop。Push把一个指压入栈。Pop再把它弹出来。最后一个放入的值最先出来。一个值被放入栈中,栈指针步减,当它移出来的时候,栈指针步增。看这个例子:

(1)mov ecx, 100

(2) mov eax, 200

(3) push ecx ; save ecx

(4) push eax

(5) xor ecx, eax

(6) add ecx, 400

(7) mov edx, ecx

(8) pop ebx

(9) pop ecx

解释

1、 把100放入ecx中

2、 把200放入eax中

3、 把ecx(等于100)压入栈中(第一个压入)

4、 把eax(等于200)压入栈中(最后压入)

5、 /6/7:对ecx执行操作,使ecx的值改变

8弹出ebx:ebx成为200(最后压入,最先弹出)

9弹出ecx:ecx又成为100(最先压入,最后弹出)

为了说明再压栈和弹栈时,内存中发生了什么,看下图:

Offset

1203

1204

1205

1206

1207

1208

1209

120A

120B

Value

00

00

00

00

00

00

00

00

00

ESP

(栈在这里是初始化为0,但实际上并不是这样。ESP表示ESP指向的offset)

mov ax, 4560h

push ax

Offset

1203

1204

1205

1206

1207

1208

1209

120A

120B

Value

00

00

60

45

00

00

00

00

00

ESP

mov cx, FFFFh

push cx

Offset

1203

1204

1205

1206

1207

1208

1209

120A

120B

Value

FF

FF

60

45

00

00

00

00

00

ESP

pop edx

Offset

1203

1204

1205

1206

1207

1208

1209

120A

120B

Value

FF

FF

60

45

00

00

00

00

00

ESP

Edx现在是 4560FFFFh 了.

CALL和RET

Call跳转到某段代码而且一发现RET指令就返回。你可以把它们看成在其他编程语言中的函数或子程序。例如:

……代码……

call 0455659

……更多代码……

455659处的代码:

add eax, 500

mul eax, edx

ret

当执行这条指令时,处理器跳到455659处的代码,执行指令一直到ret为止,并返回到调用处的下一条。Call跳转到的代码被成为过程(procedure)。你可以把你反复使用的代码写进一个过程并在你每次需要它的时候调用。

更深入的细节:call把EIP(指向将要执行指令的指针)压入栈,而ret指令在它返回的时候把它弹出来。你也可以给一个call指定的参数。这是由压栈来完成的:

push something

push something2

call procedure

在一个调用的内部,参数从栈中读出并使用。注意,只在过程中需要的局部变量也储存在栈中。我不会在此深入下去,因为它可以在masm和tasm中很轻易的完称。只要记住你可以写过程,而且它们可以由参数。一个重要的地方:

eax几乎总是用来装一个过程的返回值。

对于windows函数也是如此。但然,你可以在你的过程使用其他的寄存器,但这是标准。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有