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

实验任务

(1)

(2)

(3)

(4)

 若将最后一条指令”end start“改为”end“,(3)中的程序仍然可以正常执行。

原因:如果不指明程序的入口,程序的cs:ip值没有被设置为指向该入口,就会以程序段的第一条指令为默认入口了,然后程序会在end处结束,无法运行到代码段。

(5)

①实验代码

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
c1 segment   ; 在集成软件环境中,请将此处的段名称由c→改为c1或其它名称
  db 8 dup(0)
c1 ends     ; 改的时候要成对一起修改
code segment
start:
mov ax,c1
mov es,ax
mov bx,0
mov cx,8
s: 
mov ax,a
mov ds,ax
mov dl,[bx]
mov es:[bx],dl
mov ax,b
mov ds,ax
mov dl,[bx]
add es:[bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
 
 

②在实现数据相加前,逻辑段c的8个字节

 

③ 执行完实现加运算的代码后,逻辑段c的8个字节

④验证是否完成正确的数据相加

c1中数据符合a的数据与b的数据加和。

(6)

①程序代码

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 8 dup(0)
b ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov cx,8h
mov bx,0
mov sp,10h
s:
push[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
②查看逻辑段b的8个字单元信息截图

 

③执行 push操作,然后再次查看逻辑段b的8个子单元信息

 ④:对比②和③

 经验证,已成功实现逆序存储。
总结与体会
通过本次实验,我掌握了如何来编写、调试具有多个段的一个程序,
具有多个段的程序相对于仅具有一个段的程序而言,能把数据,代码和栈段分开存储,不仅提高了程序整体的存储容量,还使程序显得井然有条,通过对多个段的定义,使我们对数据的操作更方便清晰了。 
大致清楚了为具有多个段的一个程序分配储存空间的方式,以16个字节为倍数,将其连续地分配在一个储存空间中。
 
posted @ 2018-11-25 22:29  折风  阅读(173)  评论(0编辑  收藏  举报