汇编课程设计之实现虚拟链表(基于8086CPU的dos系统)

在8086CPU的DOS系统下,由于无法动态分配内存和使用结构体,本文采用了一种特殊方式实现虚拟链表。每个链表节点在内存中分配连续的4个字节,前2字节存储数据,后2字节存储下一个节点地址。为了标识链表,开头设置了一个无数据的头节点。
摘要由CSDN通过智能技术生成

思想:由于基于8086CPU的汇编语言无法实现动态分配内存和结构体,于是我们在给链表的节点中分配了连续的内存单元,就是每插入一个节点,该节点的内存空间都在最后一段内存单元中。链表的逻辑顺序是通过节点中的数据来标识的,每一个节点分配4个字节的内存单元,前2个内存单元中存放节点数据,后两个节点中存放下一个节点的地址。

注意:必须要在最开始存放一个没有数据的头节点来指明链表的每一个节点。

源代码如下:

;汇编中链表的实现
assume cs:code
;如何实现动态分配空间
name1 segment
	dw 128 dup(0)			;name1:0为头结点,,,,0存放值,1存放下一个段的段地址
name1 ends

data segment
	dw 3,10,2,8,7,13,15,20,11,9
	dw 20,12,15,88,19			;要插入的数据
	dw 4,5,11,1,8 			;插入后的结点位置,首节点位置为1
	dw 6,8,2,7			;删除的结点位置,首结点位置为1
	divisors dw 10000,1000,100,10,1	;用于将数字的每个位分开变成相应的字符串
	results db 0,0,0,0,0,0,0,'$'		;用来显示数据,最后2个0选择换行和空格
data ends

stack segment
	dw 0,0,0,0,0,0,0,0			;栈用来临时保存数据
stack ends

code segment
start:	mov ax,data
	mov ds,ax			;ds存放数据源的段地址
	mov ax,name1
	mov es,ax				;es存放存放目的数据的段地址
	mov ax,stack
	mov ss,ax	
	mov sp,10h			;利用栈来临时保存数据

	mov cx,10			;cx决定插入的数据个数
	mov bx,0				;bx决定了存放值的偏移地址
	mov di,0				;di决定存放数据
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值