start: mov ax,data mov ds,ax call writeGreatest2area2 mov ax,255 call findTheValue mov ax,4c00h int 21h code ends end start
结果测试:
对实验二进行编译链接:
运行程序,输出实验结果:
Debug:
显示寄存器内容,如下图所示:
用U命令反汇编可执行代码,如下图所示:
用g命令设置断点到CS:00D8处,如下图所示:
用t命令跟踪执行程序,如下图所示逐条跟踪三次的结果:
用q命令退出:
实验三
实验要求:熟悉Windows编程环境
⑴ 编写一个Windows界面汇编程序,显示一个带Yes,No选择按钮的消息框,标题显示为:自己的姓名;正文内容显示为:学号;选择Yes的返回:“你选择的是Yes”,选择No的返回:“你选择的是No”。 (2)(编写一个Windows 32位控制台程序,要求从键盘输入5个十六进制数,输出该数所对应的二进制数中所包含“0”的个数。)
(3)熟悉WINDBG调试环境。使用WINDBG调试程序察看机器码,并单步执行,观察每一条指令的执行结果、 寄存器的内容、内存变量和堆栈数据的变化情况。
实验代码:
.386 .model flat,stdcall option casemap:none MessageBoxA .386 .model flat,stdcall includelib msvcrt.lib printf PROTO C:dword,:vararg
PROTO :dword, :dword, :dword, :dword scanf PROTO C:dword,:vararg
MessageBox equ
invoke printf,offset szmsg,l0 invoke printf,offset szmsg,l1 invoke printf,offset szmsg,l2 invoke printf,offset szmsg,l3 invoke printf,offset msg,l4 ret end start
实验代码思路:
第一小题代码思路:
1.说明MessageboxA的调用规则和参数类型
2.将定义的MessageBoxA通过指令equ赋给MessageBox 3.使用伪指令invoke,首次输出显示一个带Yes,No选择按钮的消息框,标题显示为:自己的姓名;正文内容显示为:学号
4.通过比较MessageBox的返回值与1的大小确定其选择的yes还是no 5.再次使用伪指令INVOKE调用MessageBox二次输出选择Yes的返回:“你选择的是Yes”,选择No的返回:“你选择的是No”。
第二小题代码分析:
1. 说明scanf和printf的调用规则和
参数类型
2. 在数据区说明输入输出的表现形式 3. 设置一个外部变量esi确保循环五
次,即可以依次输入5个十六进制数;不断使数据右移即除二,与1做与运算,然后和0比较大小,若与0相等,则该数有一个0,用edx记录0的个数。
4. 把edx入栈,然后清零 5. 出栈,倒序输出
检测结果,验证正确性
(1) 对第一个小实验代码进行编译链接,如下图所示:
(2) 运行检测结果:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编语言程序设计实验报告(3)在线全文阅读。
相关推荐: