2024年3月31日发(作者:)
MASM32
Introduction to Assembler ................................................................................................................... 2
MASM Reference ............................................................................................................................. 11
宏参考MACRO Reference ...................................................................................................... 11
伪指令参考 .............................................................................................................................. 16
语法参考 .................................................................................................................................. 30
其它参考 .......................................................................................................................................... 36
寄存器大全 .............................................................................................................................. 36
标志寄存器 Processor Flags ................................................................................................... 36
80位数据寄存器Stack of 80-bit Data Registers ..................................................................... 37
Ascii 字符表Ascii Characters ................................................................................................. 38
奔腾指令优化参考. 39
调用格式Calling Conventions ................................................................................................. 42
命令行工具Command Line Tools ........................................................................................... 42
Introduction to Assembler
汇编概述
直线内存模式FLAT Memory Model
32位(二进制位,bit。下同)Windows程序使用“直线内存模式”。这样的程序实际只有一
个段,包括程序的所有代码和数据,而且只能在386以上的INTEL处理器上运行。早期的
16位程序使用段和偏移来代表地址,每个段的大小不能超过64KB,而“直线内存模式”只
有偏移,它的大小是4G,即0XFFFFFFFF,这种地址表示方式使汇编程序更易于开发。
在FLAT模式下,所有的段寄存器都自动设置成为同一个值,32位Windows程序中段/偏移
形式的地址在不是必须的。对于DOS程序员来说,32位Windows PE格式的应用程序好象
是.COM程序一样,使用单一的段包括了代码和数据,只操作偏移地址,而不是用段/偏移地
址。
直线内存模式时,应用程序在4G内存空间内所有的引用都是近程地址(NEAR code
addressing)和近程数据(NEAR data addressing)。GS和FS段寄存器在普通的FLAT模式应
用程序中并不使用,一般是操作系统用于操作实例(used in instances)。
保护模式内存Protected Mode Memory
DOS是真实地址内存模式,这样应用程序可能改写操作系统的代码,而引起系统瘫痪。例如
在编写CGA(注:早期显示模式,显示缓存地址在B800处开始)程序时,使用B800内存
区域,如果LOOP循环写的不对,就可能改写高位内存中的DOS代码或BIOS设置,造成死
机。设计保护模式就是用来防止这样的事情发生,内存管理器控制并保护应用程序访问的地
址,阻止应用程序访问没有权限的内存区域。16位Windows是模拟多任务的操作系统,它
的应用程序也可能改写其它应用程序甚至是操作系统的内存。
改写了操作系统代码,应用程序调用某个系统函数时就会引起死机,最常见的就是“蓝屏”
(注:Windows95/98常见故障)死机。如果开发的应用程序本身存在逻辑混乱,应该是一个
“黑屏”死机。
更改硬件、在多任务基础上使用硬件的时候,保护模式会更加可靠。因为汇编语言编程时允
许读写任何地址,所以要留心读写的句柄和地址。如果分配了10K内存来读而却试图读20K
内容,就会引起页错误。也可能因为使用变量或寄存器指向的地址超出了应用程序权限范围,
而引起内存读写失败。操作系统会将页异常传递给造成出错的应用程序,如果应用程序没有
处理异常,操作系统就会关闭应用程序。这给应用程序提供一个在保护模式下,得到有读写
权限的地址范围的一种方法。
操作数Instruction Operands
操作数被用来做汇编指令助记符(mnemonic)中的参数。一条指令可能有0到3个操作数,
有两个操作数的逻辑或数学指令当中,位于右边的是源操作数,左边的是目的操作数。如
mov eax,1;mov是汇编代码助记符,eax是目的操作数,1是源操作数。指令的操作结果是
将1放入eax。在其它处理器的汇编语言中,操作数使用顺序不同的都会特别注明。
指令码和助记符Opcodes and Mnemonics
Intel极兼容处理器的硬件层面,内建指令(instructions)叫opcodes(注:二进制的指令码),以


发布评论