(译)win32asm教程-3

原创 2002年03月13日 08:59:00
 

40内存

这部分将解释在Windows中内存是如何管理的。

3.  1Doswin3.xx

在像用于DosWin3.xx16位程序中,内存被分成许多个段。这些段的大小为64kb。为了存储内存,需要一个段指针和一个偏移址指针。段指针标明要使用哪个段,offset指针标明在段本身的位置。看下图:

内存<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1

 (64kb)

2

(64kb)

3

 (64kb)

4

(64kb)

更多

注意下面关于16位程序的解释,后面有更多关于32位的(但不要跳过这部分,要理解32位的内存管理,这部分很重要)上表是全部的那内存,被划分成了64kb的多个段。最多有65536个段。现在取出一段:

1(64kb)

Offset 1

Offset 2

Offset 3

Offset 4

Offset 5

更多

为了指向段中的位置,需要使用offset。一个offset是段中内部的一个位置。每个段最多有65536offset。内存中地址的记法是:

SEGMENT:OFFSET

例如:

0030:4012(均为16进制)

它的意思是:段30offset4012。为了查看那个地址中有什么。你先要到段30,然后到该段的offset4012。在前一章中,你已经学过了段和指针寄存器。例如,段寄存器有:

CS

代码段

DS

数据段

SS

栈段

ES

扩展段

FS (only 286+)

全功能段

GS (only 386+)

全功能段

顾名思义:代码段(CS)包括了当前的代码执行到了哪部分。数据段是用来标明哪段中取出数据。栈指栈段(后面有更多)。ESFS, GS是全功能的寄存器,并且可以用于任何段(虽然在Windows中不行)。

指针寄存器大多数时装有offset,但全功能寄存器(ax, bx, cx, dx等)也可以这么用。Ip标明当前指令执行到了哪个offsetSp保存了当前栈的offset1,在ss(栈段中)。

42 32Windows

你可能已经注意到了关于段的一切是乏味的。在16位编程中,段是必不可少的。幸运的是,这个问题已经在32Windows95及以上)中得到解决。你仍然有段,但不用管他们了因为它们不再是64kb,而是4GB。你如果尝试着改变段寄存器中的一个,windows甚至会崩溃。这称为平坦(flat)内存模式。只有offset而且是32位的,因而范围从04,294,967,295。内存中的每一个地址都是用offset表示的。这真是32位胜于16位的最大优点。所以,你现在可以忘了段寄存器并把精神集中在其他的寄存器上。

(译)win32asm教程-2

 3.0 asm基础知识这章将教你汇编语言的基础知识1.  1伪代码(opcodes)汇编程序是用伪代码创建的。一个伪代码是一条处理器可以理解的指令。例如:ADDAdd指令把两个数加到一起。大部分伪代...
  • taowen2002
  • taowen2002
  • 2002年03月13日 08:59
  • 981

(译)win32asm教程-6

 7.0条件跳转在Code部分,你可以看到像这样的标签:.codemov eax, edxsub eax, ecxcmp eax, 2jz loc1xor eax, eaxjmp loc2loc1:x...
  • taowen2002
  • taowen2002
  • 2002年03月14日 09:51
  • 830

(译)win32asm教程-9

 10.0 masm的优点如果你不在使用masm,你可以跳过这章并尝试着转换所有的例子,或不论如何地读一下,并试着说服自己使用masm。当然,这是你的选择。但masm真的使汇编语言更容易了。10.1 ...
  • taowen2002
  • taowen2002
  • 2002年03月15日 09:00
  • 758

(译)win32asm教程-4

 5.0伪代码伪代码是给处理器的指令,它实际上是原始十六进制代码的可读版。因此,汇编是最低级的编程语言。汇编中的所有东西被直接翻译为十六进制码。换句话说,你没有把高级语言翻译为低级语言的编译器上的烦恼...
  • taowen2002
  • taowen2002
  • 2002年03月13日 08:58
  • 917

(译)win32asm教程-8

 9.0更多的伪代码这儿有更多的伪代码TESTTest对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器。结果本身不会保存。Test用来测试一个位,例如寄存器:Test eax, 10...
  • taowen2002
  • taowen2002
  • 2002年03月15日 09:01
  • 852

(译)win32asm教程-5

 6.0 文件结构汇编源文件被分成了几个部分。这些部分是code,data,未初始化data,constants,resource和relocations,资源部分是资源文件创建的,后面会有更多的讨论...
  • taowen2002
  • taowen2002
  • 2002年03月14日 09:51
  • 800

(译)win32asm教程-7

 8.0关于数的一些事情在大多数的编程语言中使用整数还是浮点数只取决于变量的声明。在汇编语言中,完全的不同。浮点数的计算是由特别的伪代码和FPU协处理器(浮点单元)完成的。浮点指令将会在后面讨论。先来...
  • taowen2002
  • taowen2002
  • 2002年03月15日 09:01
  • 837

(译)Win32Asm 教程-1

Win32Asm 教程这是我的Win32Asm教程。它总是创建中,但我会不停地添加内容。通过上面的next和prev链接,你可以转到后面和前面一页。介绍先来对这个教程做个小介绍。Win32Asm不是一...
  • taowen2002
  • taowen2002
  • 2002年03月11日 09:16
  • 1449

(译)win32asm教程-10

 11.0 Windows中的汇编基础现在你已经有了一些汇编语言的基础知识,你将要学习在Windows中怎样学习汇编。10.1APIWindows编程的根本在于Windows API,应用程序接口。这...
  • taowen2002
  • taowen2002
  • 2002年03月16日 18:54
  • 1075

(译)win32asm教程-11

 12.0 第一个程序是创建你的第一个程序的时候了。本章中的指导将这样组织:12.1第一步如果万事具备,你应该在你的masm同一个区上有一个win32(或win32asm)目录。为每个工程,你应该创建...
  • taowen2002
  • taowen2002
  • 2002年03月16日 18:52
  • 909
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(译)win32asm教程-3
举报原因:
原因补充:

(最多只允许输入30个字)