汇编语言程序设计实验报告(3)

2020-04-17 07:03

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 .data Includelib user32.lib szmsg byte '%d',0ah,0 Includelib msvcrt.lib msg byte '%d',0 NULL equ 0 szformat byte '%x',0 MB_OK equ 1 buf dword 40 dup(?) .stack 4096 l0 dword ? .data l1 dword ? SzTile byte '陈强!',0 l2 dword ? SzMsg byte '1120131888!',0 l3 dword ? NO1 byte '我选的是确定!',0ah,0 l4 dword ? NO2 byte '我选的是取消!',0ah,0 .code .code start: start: mov esi,0 invoke MessageBox, L: invoke scanf,offset NULL, szformat,offset buf offset SzMsg, mov eax,buf offset SzTile, mov ecx,4 MB_OK mov edx,0 cmp eax,1 t: mov ebx,eax jz A and ebx,1 cmp eax,1 cmp ebx,0 jnz B jz yz A: invoke MessageBox, cmp ebx,0 NULL, jnz ty offset NO1, yz: inc edx offset SzTile, ty: shr eax,1 MB_OK loop t ret push edx B: invoke MessageBox, INC ESI NULL, cmp esi,5 offset NO2, jb L offset SzTile, pop l4 MB_OK pop l3 ret pop l2 ret pop l1 end start pop l0

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) 运行检测结果:


汇编语言程序设计实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014-2015学年浙江省杭州市西湖区第一学期期末考试八年级数学试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: