《汇编语言程序设计》 实验报告
实验名 顺序结构程序设计 实验室 实验楼 实验日期 2014-05-05
一、实验目的及要求 1. 熟悉命令格式,功能,加强对指令系统的理解 2.编写简单顺序结构程序 3.单步跟踪调试,观察寄存器的变化和指令执行的结果 二、实验环境 硬件环境:一台微型计算机 软件环境:windows xp,debug环境,masm 三、实验内容(至少写3个程序) 题目一: 求x+y+z的和,并把结果送给给w,其中x,y,z,w是数据段的标记符,用来存放三个数据 1.设计: 首先,在数据段中,定义x,y,z分别存5,6,7三个值,同时申请一个字单元,用标号w来表示,用来存放表达式的结果;在代码段中,首先初始化,然后将x中所存放的值传送给计算器A,再将计算器A中的内容和y中的内容相加,结果存放在计算器A中,再将计算器A中的内容和z中的内容相加,结果同样存放在计算器A中,最后将计算器A中的内容传送到w中。 2.源程序清单 data segment X dw 5 Y dw 6 Z dw 7 W dw ? data ends ;定义数据段,分别给X,Y,Z赋初值,并为W开辟存储空间 code segment ;代码段 main proc far assume cs:code,ds:data start: push ds xor ax,ax push ax mov ax,data ;初始化 mov ds,ax mov ax,X add ax,Y ;X和Y的和存入累加器A 第1页/共 10页
add ax,Z mov W,ax ;X,Y,Z之和存入W中 ret main endp code ends ;代码段结束 end start 3.调试过程: (1).用masm程序产生mwn1.obj文件,编译没有错误,如下图: (2).用link程序产生mwn1.exe文件,连接没有错误,如下图: (3).进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元; 第2页/共 10页
(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为5,6,7,接着下一个字的内容为0: (5).用t命令单步执行,前三次为初始化,具体的如下图: (6)用t命令执行,如下图,将[0000]单元中的内容05h传给ax,ax中的内容为0005,将[0002]单元中的内容和ax相加,并把结果存放在ax中,ax中的内容为000b=(5+6) (7)用t命令执行,如下图,将[0004]单元中的内容0bh和ax相加,并把结果存放在W中,W中的内容为0012=(0b+7) 第3页/共 10页
题目二: 1.设计: 首先,在数据段中,定义字符串存放在变量s1中,同时申请一个字单元,用标号s2来表示,用来存放计数次数;在代码段中,首先初始化,然后,根据cld与rep的组合递减,将字符一个一个根据地址的指示按顺序输出。 2.源程序清单 data segment s1 db 'This is a program!$' count equ $-s1 ;变量count代替$-s1 s2 db count dup(?) data ends ;定义数据段,变量s1为字符串 'This is a program!$', ;变量s2是重复计数次数 code segment ;代码段 assume cs:code,ds:data,es:data start: mov ax,data mov gt mov es,ax ;初始化 mov si,offset s1 ;将变量s1的偏移地址放入寄存器si中 mov di,offset s2 ;将变量s2的偏移地址放入寄存器di中 mov cx,count ;将计数次数存入寄存器cx中 Cld rep movsb ;在字符串的比较,di或si是可以自动增减,即si,di向前移动 mov dx,offset s2 mov ah,9 int 21h mov ax,4c00h
第4页/共 10页
int 21h ;输出结果 code ends end start 3.调试过程: (1).用masm程序产生mwn2.obj文件,编译没有错误,如下图: (2).用link程序产生mwn1.exe文件,连接没有错误,如下图: (3).进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元; 第5页/共 10页