汇编语言程序设计上机实验

实验报告

班级

学号

姓名

指导教师 陆勤

实验一 汇编语言运行环境及方法、简单程序设计

一、程序说明

本程序用来比较两个字符串string1和string2所含的字符是否相同。若相同则显示‘Match’,否则显示‘Nomatch’。

在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。再代码段比较字符串string1和string2,通过比较判断是否相同。若相同则显示‘Match’,否则显示‘Nomatch’ 二、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论

用汇编程序masm对源文件汇编产生目标文件obj C:\masm5\sample

用连接程序link尝试执行文件

exe

执行程序

使用debug程序调试

-g命令运行程序

-u命令显示程序,了解命令地址

-g0b将断点设置在程序的主要部分以前

-d0根据其中只是的ds寄存器内容查看数据段情况,显示地址0及地址0后面数据

e命令修改数据区的字符串

q命令退出

debug

t命令逐条跟踪程序的执行

e命令修改一段字符串

三、调试中遇到的问题及解决方法

E命令修改数据区的一个字符,而不是一段字符串

实验二 用DEBUG编程:使用堆栈段将

AX和BX的内容进行交换等

一、程序说明:

1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

2、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

二、调试说明 第一部分先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试,用-t命令逐步运行程序,查看AX和BX中内容的变化。如果发现AX和BX中的内容进行了交换,则说明程序运行成功。

进入debug程序,先用—u指令查看一下程序,结果如下:

用—t指令逐步调试,结果如下:

第二部分:如前面第一章最终生成可执行程序。也可进入进入debug进行编写,如下:

三:程序清单和执行结果: 第一个程序清单:

DATAS SEGMENT DATAS ENDS

STACKS SEGMENT STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,3000H MOV BX,5000H PUSH AX MOV AX,BX POP BX

MOV AH,4CH

INT 21H CODES ENDS END START

在debug 中进行调试,逐步执行结果:

第二个程序清单: DATAS SEGMENT DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0300h MOV SI,0002h MOV AH,4CH INT 21H CODES ENDS END START

在debug中进行调试,逐步执行结果:

实验三、存储器块清零和内存块移动

一、 程序说明:

第一个程序是存储块清零。程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。

第二个程序是内存块移动。程序流程框图为:首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。 二、 调试说明:

第一个程序在进入debug后,先用-u指令查看一下程序,再将断点设置在指令Loop again之后,通过指令-g加上指令Loop again后的地址,将程序运行到Loop again之后停止,然后再通过-d指令查看相关内存内容是否被清零。 第二个程序在进入到debug后,先用-u指令查看一下程序,再将断点设置在指令rep movsb之前,通过指令-g运行后,然后用-d指令查看一下内存块的相关内容,得到的结果如下:

三:源程序代码和执行结果:

实验一: data segment

block db 256 dup(55h) data ends

code segment

assume cs :code ,ds:data start proc near mov ax,data mov ds ,ax

mov bx,offset block mov cx,256 again:

mov [bx],byte ptr 0 inc bx

loop again jmp $

code ends

end start

实验二: 源代码:

地址块加一方法移动块的源程序: DATAS SEGMENT

SOURCE DB 256 DUP(055H) TARGET DB 256 DUP(0AAH) DATAS ENDS

STACKS SEGMENT STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV ES,AX

MOV SI,OFFSET SOURCE

MOV DI,OFFSET TARGET MOV CX,256 REP MOVSB MOV AH,4CH INT 21H CODES ENDS END START

第二部分地址块减一方法移动块的源程序: DATAS SEGMENT

SOURCE DB 256 DUP(055H) T ARGET DB 256 DUP(0AAH) DATAS ENDS

STACKS SEGMENT STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV ES,AX

MOV SI,OFFSET SOURCE ADD SI,255

MOV DI,OFFSET TARGET MOV CX,256

NEXT:MOV AL,[SI] MOV [DI],AL DEC SI INC DI LOOP NEXT MOV AH,0 MOV AH,4CH INT 21H

CODES ENDS END START 执行结果:

实验四 将键盘输入的小写字母用大写字母显示出来

一、 程序说明

本程序用来将小写字母转变为大写,并在屏幕上显示出来。先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。若输入的是小写字母,则通过将其减去20h,从而变为大写字母。在通过DOS功能调用INT21H的2号功能显示出来。若输入的是Enter键,则结束程序。 二、 调试说明

调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm 集成实验环境 2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。调试时可通过-t指令来逐步运行程序,观察相关内容变化,来调试程序。

三:源程序代码和执行结果:

DATAS SEGMENT

string1 db ' this not is a zimu!Please input between a to z!',0ah,0dh,'$'

string2 db ' $'

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

L0:mov ah,1

int 21h

cmp al,0dh

jz exit

cmp al,'a'

jae L1

jb L3

L1: cmp al,'z'

jna L2

ja L3

L2:sub al,20h

mov cl,al

lea dx,string2

mov ah,9 int 21h

mov dl,0

mov dl,cl

mov ah,2

int 21h

mov dl,0ah

mov ah,2

int 21h

mov dl,0dh

mov ah,2

int 21h

jmp L0

L3: lea dx,string1

mov ah,9

int 21h

jmp L0

exit: MOV AH,4CH

int 21H codes ends end start 运行结果:

实验报告

班级

学号

姓名

指导教师 陆勤

实验一 汇编语言运行环境及方法、简单程序设计

一、程序说明

本程序用来比较两个字符串string1和string2所含的字符是否相同。若相同则显示‘Match’,否则显示‘Nomatch’。

在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。再代码段比较字符串string1和string2,通过比较判断是否相同。若相同则显示‘Match’,否则显示‘Nomatch’ 二、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论

用汇编程序masm对源文件汇编产生目标文件obj C:\masm5\sample

用连接程序link尝试执行文件

exe

执行程序

使用debug程序调试

-g命令运行程序

-u命令显示程序,了解命令地址

-g0b将断点设置在程序的主要部分以前

-d0根据其中只是的ds寄存器内容查看数据段情况,显示地址0及地址0后面数据

e命令修改数据区的字符串

q命令退出

debug

t命令逐条跟踪程序的执行

e命令修改一段字符串

三、调试中遇到的问题及解决方法

E命令修改数据区的一个字符,而不是一段字符串

实验二 用DEBUG编程:使用堆栈段将

AX和BX的内容进行交换等

一、程序说明:

1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

2、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

二、调试说明 第一部分先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试,用-t命令逐步运行程序,查看AX和BX中内容的变化。如果发现AX和BX中的内容进行了交换,则说明程序运行成功。

进入debug程序,先用—u指令查看一下程序,结果如下:

用—t指令逐步调试,结果如下:

第二部分:如前面第一章最终生成可执行程序。也可进入进入debug进行编写,如下:

三:程序清单和执行结果: 第一个程序清单:

DATAS SEGMENT DATAS ENDS

STACKS SEGMENT STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,3000H MOV BX,5000H PUSH AX MOV AX,BX POP BX

MOV AH,4CH

INT 21H CODES ENDS END START

在debug 中进行调试,逐步执行结果:

第二个程序清单: DATAS SEGMENT DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0300h MOV SI,0002h MOV AH,4CH INT 21H CODES ENDS END START

在debug中进行调试,逐步执行结果:

实验三、存储器块清零和内存块移动

一、 程序说明:

第一个程序是存储块清零。程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。

第二个程序是内存块移动。程序流程框图为:首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。 二、 调试说明:

第一个程序在进入debug后,先用-u指令查看一下程序,再将断点设置在指令Loop again之后,通过指令-g加上指令Loop again后的地址,将程序运行到Loop again之后停止,然后再通过-d指令查看相关内存内容是否被清零。 第二个程序在进入到debug后,先用-u指令查看一下程序,再将断点设置在指令rep movsb之前,通过指令-g运行后,然后用-d指令查看一下内存块的相关内容,得到的结果如下:

三:源程序代码和执行结果:

实验一: data segment

block db 256 dup(55h) data ends

code segment

assume cs :code ,ds:data start proc near mov ax,data mov ds ,ax

mov bx,offset block mov cx,256 again:

mov [bx],byte ptr 0 inc bx

loop again jmp $

code ends

end start

实验二: 源代码:

地址块加一方法移动块的源程序: DATAS SEGMENT

SOURCE DB 256 DUP(055H) TARGET DB 256 DUP(0AAH) DATAS ENDS

STACKS SEGMENT STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV ES,AX

MOV SI,OFFSET SOURCE

MOV DI,OFFSET TARGET MOV CX,256 REP MOVSB MOV AH,4CH INT 21H CODES ENDS END START

第二部分地址块减一方法移动块的源程序: DATAS SEGMENT

SOURCE DB 256 DUP(055H) T ARGET DB 256 DUP(0AAH) DATAS ENDS

STACKS SEGMENT STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV ES,AX

MOV SI,OFFSET SOURCE ADD SI,255

MOV DI,OFFSET TARGET MOV CX,256

NEXT:MOV AL,[SI] MOV [DI],AL DEC SI INC DI LOOP NEXT MOV AH,0 MOV AH,4CH INT 21H

CODES ENDS END START 执行结果:

实验四 将键盘输入的小写字母用大写字母显示出来

一、 程序说明

本程序用来将小写字母转变为大写,并在屏幕上显示出来。先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。若输入的是小写字母,则通过将其减去20h,从而变为大写字母。在通过DOS功能调用INT21H的2号功能显示出来。若输入的是Enter键,则结束程序。 二、 调试说明

调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm 集成实验环境 2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。调试时可通过-t指令来逐步运行程序,观察相关内容变化,来调试程序。

三:源程序代码和执行结果:

DATAS SEGMENT

string1 db ' this not is a zimu!Please input between a to z!',0ah,0dh,'$'

string2 db ' $'

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

L0:mov ah,1

int 21h

cmp al,0dh

jz exit

cmp al,'a'

jae L1

jb L3

L1: cmp al,'z'

jna L2

ja L3

L2:sub al,20h

mov cl,al

lea dx,string2

mov ah,9 int 21h

mov dl,0

mov dl,cl

mov ah,2

int 21h

mov dl,0ah

mov ah,2

int 21h

mov dl,0dh

mov ah,2

int 21h

jmp L0

L3: lea dx,string1

mov ah,9

int 21h

jmp L0

exit: MOV AH,4CH

int 21H codes ends end start 运行结果:


相关内容

  • C语言实践心得体会
  • 在科技高度发展的今天,计算机在人们之中的作用越来越突出.而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要. 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习.在这之前,我们已经对c语言这门课程学习了一个学期 ...

  • C语言实践心得体会范文
  • 在科技高度发展的今天,计算机在人们之中的作用越来越突出.而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要. 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习.在这之前,我们已经对c语言这门课程学习了一个学期 ...

  • c语言实训心得体会
  • 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期 ...

  • 山东大学汇编语言上机实验--实验一
  • 汇编语言程序设计实验报告(一) 一.预备知识 汇编语言程序设计是一门实践性很强的课程.编写程序.上机调试.运行程序是进一步学习和掌握汇编语言程序设计的必要手段. 二.实验目的 1. 掌握实验运行汇编语言所用的计算机机型 2. 熟悉常用编辑程序(行编辑程序EDLIN.全屏幕编辑程序QE及其它用于文件编 ...

  • 10-11-2c实验报告(答案)
  • <C程序设计> 实验报告 学 期:2010--2011学年第二学期 教师姓名: 教研室: 实验1 熟悉C语言程序的运行环境,掌握数据描述 1.1 实验目的 1.了解在开发环境中如何编辑.编译.连接和运行一个C语言程序. 2.通过运行简单的 C语言程序,初步了解C语言程序的结构特点. 3. ...

  • [高级语言程序设计]
  • <高级语言程序设计>教学大纲 王林平 编 一.总则 1. 教学目的与要求 (1)教学目的 <高级语言程序设计>是学习研究计算机及其应用的一门很重要的专业基础课程.它为<数据结构>.<操作系统>等其它专业基础课或专业课程奠定程序设计的基础,又是其它专业课 ...

  • 大连理工大学工程力学2010
  • 工程力学专业 工程力学本科专业培养方案 执行单位: 运载工程与力学学部 2010年入学适用 四 年制本科生 一. 类别或专业 工程力学 二. 包含专业 工程力学 三. 专业设置简介 工程力学属于应用科学的范畴,研究工程中具有共性的各种力学问题.近代计算机技术和近代实验技术的应用,使工程力学增强了解决 ...

  • 微机接口实验报告
  • 武汉大学 微机接口实验报告 目录 目录................................................................................................................................... ...

  • 支撑材料目录
  • 支撑材料目录 附件一.编写的主要教材情况 1.<C 语言程序设计教程(第二版)>封面与扉页 2.<C 语言程序设计教程习题与上机指导(第二版)>封面与扉页 3.<计算机应用基础(第五版)>封面与扉页 4.<计算机应用基础习题与上机指导(第五版)>封面与 ...