汇编(实验一)

一、实验目的
掌握汇编编程规范,熟悉编程环境。

二、实验内容

  1. 编程:向内存0:200-0:23F依次传送数据0-63(3FH)。
  2. 编程:编写code段代码,用push指令将a段中的word数据逆序存储到b段中。

三、实验步骤算法及关键代码
第一题
分析:0:200-0:23F,等价于0020:0000-0020:003F。需要循环把0-3fH(63)一个一个输入到其中。考虑到要输入的内容和输入的偏移地址内容相等,可以直接使用同一个寄存器;而bx可以用于寻址,所以选择bx来存储。
算法:先让ds中存储0020h,然后通过循环把bx从0-63的值输入到ds:[bx]中。
关键代码:

start: mov ax, 0020h
	   mov ds, ax
	   
	   mov cx, 64
	   mov bx, 0
	s: mov [bx], bx
	   inc bx
	   loop s
	   
	   mov ax, 4c00h
	   int 21h

第二题
分析:push指令直接就相当于默认逆序存储(从高位到低位)。所以把a设为数据段,目标段b设为堆栈段就可以通过循环逆序存储数值。
算法:先将ds中的地址设为a,ss中的地址设为b。然后通过循环压栈就可以逆序存储。
关键代码:

start: mov ax, a
	   mov ds, ax
	   
	   mov ax, b
	   mov ss, ax
	   mov sp,16
	   
	   mov cx, 8
	   mov bx, 0
	s: push [bx]
	   add bx, 2
	   loop s
	   
	   mov ax, 4c00h
	   int 21h

四、实验小结(简单说明实验过程中出现的问题和解决方法)
第二题在第一次调试的时候出了问题,执行之后发现ss中没有存储数据。于是我又查看了ds:[0]中的数据,发现和我开始想的不一样:数据都是01 00 02 00 03 00…。我在写程序的时候由于粗心,以为要是想1, 2, 3,…这样存放数据,就都会是字符型的,在内存中是01, 02, 03…。于是又看了一下源程序,发现定义数据的时候是dw关键字,定义的是字型数据。于是把循环的inc改成了+2。
然后还是有问题,并没有解决。堆栈段还是0 0 0 0 0。重新认真读源程序,发现是由于没有设置sp。设置sp为16,解决了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值