实验5 编写、调试具有多个段的程序

本文介绍了汇编语言中内存分配与管理的基本概念,包括如何计算内存大小、段寄存器的使用以及通过循环进行数据处理的方法。此外,还详细说明了如何利用push指令实现数据逆序存储的技术细节。

这个实验开始的填空题我就不写了,想看的引入别人的文章:点击打开链接


解释一下三个填空题目的区别:

1和2的区别就是无论你的段申请够不够16个字节,计算机都会帮你直接申请够一行,也就是16个字节。

所以第2题最后一个填空题答案为((n/16)+1)*16    其中(n/16)就是判断你申请的有木有超过一行,因为会去掉小数,所以要加上1,最后乘回16就是答案


2和3的却别就是你定义的段在不同位置,他们开始的段地址也会不同


5、程序如下,编写code段总的代码。将a段和b段总的数据依次相加,结果保存在c段中

代码如下:

assume cs:code
a segment
	db 1,2,3,4,5,6,7,8
a ends
b segment
	db 1,2,3,4,5,6,7,8
b ends
c segment 
	db 0,0,0,0,0,0,0,0
c ends

code segment

start:
	mov ax,a 
	mov ds,ax	;将ds指向a数据段
	
	mov ax,b
	mov ss,ax	;将ss指向b数据段
	
	mov ax,c 
	mov es,ax	;es指向c的数据段
	mov bx,0
	
	mov cx,8
s0:	mov ax,ds:[bx]
	add ax,ss:[bx]
	mov es:[bx],ax
	inc bx
	loop s0
	

	mov ax,4c00h
	int 21h
	
code ends
	
end start

只需要将a、b、c段分给三个不同的段寄存器,然后循环8次相加就行,注意的是要用寄存器来写入内存,不能直接写入。


6、程序如下,编写code段总的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。
assume cs:code
a segment
	dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
	dw 0,0,0,0,0,0,0,0
b ends

code segment

start:
	mov ax,a 
	mov ds,ax
	mov bx,0

	mov ax,b
	mov ss,ax
	mov sp,10h
	
	mov cx,8
s:	push [bx]
	add bx,2
	loop s 
	
	mov ax,4c00h
	int 21h

code ends

end	start

分析:这个实验跟上一个实验是一样的想法,就是先定好段寄存器。然后push就ok了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值