思想:由于基于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决定存放数据