欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编语言程序设计实验一

程序员文章站 2022-07-06 11:04:05
...

一、实验目的

掌握汇编编程规范,熟悉编程环境。

二、实验内容

1.编程:向内存0:200-0:23F依次传送数据0-63(3FH)。
2.编程:编写code段代码,用push指令将a段中的word数据逆序存储到b段中。
汇编语言程序设计实验一
三、实验步骤算法及关键代码

第一题:
1.实验思路与算法

①思路:
实验要求是将0:200-0:23F中的内容依次传送0-63,分析一下题目就可以发现,本题不需要进行数据的逆置或者其他操作,因此可以直接采用循环赋值的方法实现。
②相关设置与算法:
设置DS为段地址0,BX存储偏移地址,起址为200,因此初始化BX为200;
设置CX为循环计数器,每循环一次BX与DX加一,由存储单元数可知需要赋值64次,因此设置CX=64;
设置DX存储每次循环需要赋到存储单元的具体数字。
初始化代码:

MOV AX,0
MOV DS,AX
MOV BX,200H
MOV CX,64	
MOV DX,0
循环代码:
S:MOV [BX],DX
INC DX
INC BX
LOOP S

2.实验代码

ASSUME CS:CODES
CODES SEGMENT
START:
    MOV AX,0
    MOV DS,AX
    MOV BX,200H
    MOV CX,64	
    MOV DX,0
  S:MOV [BX],DX
  	INC DX
  	INC BX
  	LOOP S
    MOV AH,4CH
    INT 21H
CODES ENDS
END START

3.实验结果
起始寄存器内容与指令地址:
汇编语言程序设计实验一
循环前
汇编语言程序设计实验一
循环后
汇编语言程序设计实验一
第二题:
1.实验思路与算法

①思路:
本题中需要使用栈,通过先入后出完成逆置,同时需要对已经设置的两个数据区域进行访问,最开始的思路其实是设置一个新栈,将a段内容入栈,然后再将所有内容出栈存到b段;但之后想到其实可以最开始就将b段设置为栈,这样减少了出栈与存值的操作。
②相关设置与算法:
设置B地址为栈的段地址,由SS寄存器存储;由于数据为字型数据,将栈底的下一个存储单元地址,即偏移地址为0010H,并由SP寄存器存储;
设置DS为A段地址,BX记录偏移地址,初始化为0;
设置CX为循环计数器,由于有八个数据需要传送,因此CX初始化为8;
设置DX用来暂存数据区取出的数据;
在循环时,将取出数据直接压栈,并将BX加一两次(由于数据为字型)。

2.实验代码

ASSUME CS:CODE
CODE SEGMENT
A SEGMENT
	DW 1,2,3,4,5,6,7,8
A ENDS
B SEGMENT
	DW 0,0,0,0,0,0,0,0
B ENDS
START:
    MOV AX,B
    MOV BX,0010H
    MOV SS,AX
    MOV SP,BX
    MOV AX,A
    MOV DS,AX
    MOV BX,0
    MOV CX,8
    MOV DX,0
  S:MOV DX,[BX]
  	PUSH DX
  	INC BX
  	INC BX
  	LOOP S
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START

3.实验结果
起始寄存器内容与指令地址:
汇编语言程序设计实验一
循环前:
a段:
汇编语言程序设计实验一
b段:
汇编语言程序设计实验一
寄存器:
汇编语言程序设计实验一
循环后:
汇编语言程序设计实验一

四、实验小结(简单说明实验过程中出现的问题和解决方法)
本次实验重点练习了这段时间学习过程中比较重要的循环与栈的相关知识,整体题目相对还是比较容易实现了,通过这次实验其实收获更多的是对实验环境IDE的熟悉与Debug语法的学习,这在之后的学习与实验中是一个不可或缺的技能点。
实验中暂未因为编程与思路的问题被难住,虽然题目难度其实不大,但从一方面讲自己近期的学习得到了一定的肯定;但Debug中指令的操作确实花了些时间,尤其是在一些需要给出确定内存地址的指令用的还不是很娴熟,希望之后能够再接再厉。

相关标签: 汇编语言 算法