准备工作
1.下载并安装VC6++软件
2.下载Irvine32.lib库以及相关文件(Intel 汇编语言程序设计_irvine_lib文件内)
3.下载ml.exe和ml.err文件(ml_from_masm32文件内)
以上准备工作的文件均在我的yun盘内,点我下载
开始配置
一、在VC6++里面创建一个新的工程,这里我命名为"Na"。
二、在"Na"工程里面新建一个文件,取后缀为.asm。我把该文件命名为"nana.asm"。
三、点击该"Na"工程里面的:工具–>选项–>目录 。在Include File目录内添加Irvine32.lib库以及相关文件,也就是说把"Intel 汇编语言程序设计_irvine_lib"这个文件夹添加进来,这个文件夹就包含了Irvine32.lib这个库。
四、点击该"Na"工程里面的:工具–>选项–>目录 。在LibraryFile目录内添加Irvine32.lib库以及相关文件,也就是说把"Intel 汇编语言程序设计_irvine_lib"这个文件夹添加进来,这个文件夹就包含了Irvine32.lib这个库。
五、把ml.exe和ml.err文件放到VC6++的:VC98–>Bin目录下
六、点击VC6++左边的视图框的FileView,然后选中刚才的"nana.asm"文件。右键–>设置。在project settings/Custom Build页面中命令行加:
ml /c /coff /Fo$(TargetDir)\$(InputName).obj $(InputPath)
输出中加上:
$(TargetDir)\$(InputName).obj
七、点击"Na"工程,然后再点击:工程–>设置–>连接。在“Project setting”页面的”link”选项卡中“object/library module ”中加入irvine32.lib。
即在对象/库模块里面追加。
八、写入代码,运行并分析程序。
; Addition and Subtraction (AddSubTest.asm)
; Chapter 4 example. Demonstration of ADD, SUB,
; INC, DEC, and NEG instructions, and how
; they affect the CPU status flags.
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
.data
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40
.code
main proc
; INC and DEC
mov ax,1000h
inc ax ; 1001h
dec ax ; 1000h
; Expression: Rval = -Xval + (Yval - Zval)
mov eax,Xval
neg eax ; -26
mov ebx,Yval
sub ebx,Zval ; -10
add eax,ebx
mov Rval,eax ; -36
; Zero flag example:
mov cx,1
sub cx,1 ; ZF = 1
mov ax,0FFFFh
inc ax ; ZF = 1
; Sign flag example:
mov cx,0
sub cx,1 ; SF = 1
mov ax,7FFFh
add ax,2 ; SF = 1
; Carry flag example:
mov al,0FFh
add al,1 ; CF = 1, AL = 00
; Overflow flag example:
mov al,+127
add al,1 ; OF = 1
mov al,-128
sub al,1 ; OF = 1
invoke ExitProcess,0
main endp
end main
九、打上断点,开始简单的调试程序。
Debug调试快捷键:F10
Debug调试一步一步调试:F11
VC6++调出寄存器存储情况:查看–>调试窗口–>Registers
十、简单分析
把1000h十六进制移到AX寄存器里面,也就是十进制的4096
结束
打完收工~
后面会陆续介绍汇编的上机代码和分析。