汇编语言程序设计中有那些最重要的指令

2024-11-28 20:36:27
推荐回答(1个)
回答1:

如果你用的windows下masm系列工具,请cmd下执行ml /?,会获取到帮助(),简单的几条 它带的参数有几十条,你可以看下。
ML.EXE 参数说明(所有参数均有大小写之分)
ML [参数] 原始档之档名 [/link linkoptions]

/AT 极小记忆体模式致能(不同於 .model tiny)
/Bl filename 选译交替连结(不使用link连结而改用别的档案)
/c 仅进行组译而不连结
/Cp 区分所有名称(标名或记忆体变数名)之大小写
/Cu 将所以参数转成大小(预设值)
/Cx 区分公用和外部名称之大小写
/coff 产生coff格式的目的档
/Dsymbol[=value] 使用保留字定义文字巨集
/EP 产生预先处理的原始列表至萤幕
/F hexnum 设定堆迭大小为 hexnum
/Fb [filename] 产生限制性的可执行程式
/Fo filename 组译后指定.obj程式名称
/Fe filename 连结后指定.exe或.com程式名称
/Fl [filename] 组译后产生.lst档
/Fm [filename] 连结后产生.map档
/FPi 产生浮点运\\\\算模拟器(仅适用於混合语言)
/Fr [filename] 组译后产生.sbr程式(类似早期的功能呼叫)
/FR [filename] 组译后产生扩充.sbr程式
/Gc 指定FORTRAN或PASCAL型式的功能呼叫
/Gd 指定C语言型式的功能呼叫
/Gz 指定Stdcall型式的功能呼叫
/H number 限制外部名称的字数(预设为31字)
/Help 以ML呼叫QuickHelp
/I prthname 设定引入档(巨集档)的路径
/link options 同时指定连结时用的选项
/nologo 抑制版权(Copyright)讯息
/Sa 开启列表程式中所有有效资讯
/Sc 产生指令码的时序周期於列表档中
/Sf 加入第一阶段列表至列表程式中
/Sg 开启列表程式中组合语言产中码
/Sl width 设定列表程式每行的宽度(60~255或0)
/Sn 关闭列表程式中的符号表
/Sp length 设定列表程式每页的列数(10~255或0)
/Ss text 指定列表程式之副标题(与subtitle相同)
/St text 指定列表程式之标题(与title功能相同
/Sx 开启列表程式中错误条件
/Ta filename 指定原始档案名称(用於不为.asm而自行指定时)
/VM 致能虚拟记忆体
/W 设定警告的等级为0(与/W0功能相同)
/W[0/1/2/3] 设定警告等级(0,1,2,3)
/WX 传回警告的错误码
/X 删除(忽略)引入档include环境(set include=..)
/Zf 宣告所有符号为公用的
/Zd 产生CodeView列号於目的程式
/Zi 产生CodeView资讯於目的程式
/Zm 致能option M510以便相容於MASM 5.1
/Zp [alignment] 排列结构变数的起始位址於1,2,4的倍数位址
/Zs 只检查语法而不产生目的程式
/? 显示ML命令列的语法摘要

LINK.EXE 参数说明
LINK [objs],[exefile],[mapfile],[libs],[deffile]

/A:size 排列区段位址,不可用於DOS程式
/B 抑制.lib或.obj路径错误提示
/CO 加入CodeView的符号及列号
/CP:number 设定程式最大空间(单位16B)
/DO 以预设值(DOSSEG)排列区段顺序
/DS 载入资料至资料区段高位址
/E 压缩执行档,与/CO或/INC不容
/F 使远程呼叫致能与/PAC并用
/HE 显示link.exe选译项
/HI 执行时载入高记忆位址
/INC 准备加入ILINK连结
/INF 显示连结过程的讯息
/LI 加入列号与结合位址至MAP程式
/M 加入公用符号至MAP程式
/NOD[:library] 忽略指定程式库
/NOE 阻止LINK从程式库中搜寻扩充字
/NOF 远程呼叫失效
/NOI 区别大小写字母
/NOG 忽略群组的宣告,以便与古早版相容
/NOL 抑制LINK版权讯息
/NON 与/DO同,但不加程式起始位元组
/NOP 不压缩邻近程式区段
/OV 设定抑制插断
/PACKC:number 压缩邻近程式区段
/PACKD:number 压缩邻近资料区段
/PAU 暂停以便更换磁片
/PM 指定Windows或OS/2程式型态
/Q 建立程式库给Quick语言
/SE:number 设定连结时区段总数,预设为128
/ST:number 以此设定堆迭的大小(1~64KB)
/T 建立极小模式程式.COM(需设.model tiny)
/? 显示简单的LINK语法

驱动编译-链接的相关解析:

/nologo 不显示logo信息。
例如: ml /nologo XXX XXX XXX XXX
则不显示
“Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.”
/driver
编译驱动程序, 这个选项造成的最重要的影响是文件中会多出一个"INIT"节区.另外还有".idata"节区,里面包含了一些 IMAGE_IMPORT_DESCRIPTOR结构,指出了需要导入的函数和模块的名称。"INIT"节区的属性被标志为可丢弃,这样装载程序获取了相关的导入信息后,这个节区的内容即被丢弃

/subsystem: native ; 编译 驱动程序
windows ; 编译窗口程序
console ; 编译控制台程序
将对PE文件结构中的 IMAGE_OPTIONAL_HEADER32.Subsystem进行设置,
IMAGE_SUBSYSTEM_UNKNOWN equ 0
IMAGE_SUBSYSTEM_NATIVE equ 1
IMAGE_SUBSYSTEM_WINDOWS_GUI equ 2
IMAGE_SUBSYSTEM_WINDOWS_CUI equ 3
我们需要为驱动指定合适的环境,当链接.exe或者.dll文件的时候,一般指定为Win32子系统。内核模式驱动程序不需要任何子系统,所以我们使用的参数是native
/base:0x10000--将驱动映像的基地址设置为10000h
/align:32--系统内存是很宝贵的,所以最好使用更有效的节区对齐数值
/out:%dvr%.sys--链接器默认会创建以exe作为扩展名的文件,当指定了/DLL选项后,创建的是.dll文件,在这里,我们要强制让它创建以.sys为扩展名的文件