《汇编语言》实验报告
得分:
1)VC6平台下的汇编语言开发环境搭建(使用MASM32的汇编器
+VC6)
配置IDE环境:
–在VC的tools/option/Directories页面中添加Irvine32.inc等所在的目录到include files中; 添加
Irvine32.lib等所在的目录到library files.
–将masm32中的ml.exe和ml.err拷贝到VC的Microsoft Visual Studio\VC98\Bin目录中
创建与配置project:
–新建VC的win32 console类型空工程
–创建一个asm后缀的文件,并把汇编代码(教材第85页addsub3.asm)输入该文件中,然后将该asm文件添加到
Source Files
–选中asm文件,在project settings/Custom Build页面中命令行加:
ml /c /coff /Fo$(TargetDir)\$(InputName).obj
$(InputPath)
输出中加上:
$(TargetDir)\$(InputName).obj
–“Project setting”页面的”link”选项卡中“object/library module ”中加入irvine32.lib
2)汇编与链接不带输出的加减法程序(即教材第85页
addsubTest.asm);
3)在程序最后加入调用DumpRegs过程的语句,以输出各寄存器的
值。
4)以单步执行的方式调试该程序,查看每步结果,并解释每步结果,
并写成注释。
(特别注意对标志位的影响)
5)(可选)尝试修改程序。
6)(可选)单步跟踪课件中4.3.3节的程序“ptr应用示例”,结合
VC6的内存查看功能(通过菜单view debug windows Memory 调出内存查看窗口)理解每步的执行结果。
(注意课件中只是大部分代码,请补全头文件以及程序退出宏。
)
2、添加添加Irvine32.inc等所在的目录到include files中;
3. 将masm32中的ml.exe和ml.err拷贝到VC的Microsoft Visual Studio\VC98\Bin目录中
二、创建与配置project:
2.编辑教材85页不带输出的程序
代码如下:
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD DumpRegs PROTO
.data
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40
.code
main PROC
mov ax,1000h
inc ax
dec ax
mov eax,Xval
neg eax
mov ebx,Zval
add eax,ebx
mov Rval,eax
mov cx,1
sub cx,1
结果:
3.输出各寄存器的值。
DumpRegs PROTO
程序最后加入调用DumpRegs过程的语句
call DumpRegs
输出结果如下:
4.单步执行的方式调试该程序,查看每步结果,并解释每步结果,并写成注释。
(特别注意对标志位的影响)
1、按F10进行调试、alt+F5调出寄存器的变化信息框。
程序及标志位解读如下:
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
DumpRegs PROTO
.data
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40
.code
main PROC
mov ax,1000h //ax 4096 ;bx 57344;
inc ax //ax 4097;bx 57344(实现自增)
dec ax////ax 4096;bx 57344(实现自减)
mov eax,Xval //把Xval复制给eax
neg eax //ax 26;bx 57344(取反令ax=-26)
mov ebx,Zvalv //ax 65510 ;bx 40 ;cx(把Zval的40赋给ebx)add eax,ebx // ax 14 ;bx 40 (求和eax=ebx+eax=14)
mov Rval,eax//把eax复制给Rval
mov cx,1 //ax=14;bx=40;cx=1
sub cx,1
mov ax,0FFFFh
inc ax//ax 65535;bx=10;cx=0;
mov cx,0
sub cx,1
mov ax,7FFFh
add ax,2 //ax 32767 bx=40 cx =65535
mov al,0FFh//ax 32769
add al,1 //ax 33023
add al,1 //ax 32768
mov al,-128 //ax 32895
sub al,1 //ax 32896
call DumpRegs //ax 32895
INVOKE ExitProcess,0 //结束退出程序main ENDP
END main
(注:可编辑下载,若有不当之处,请指正,谢谢!)。