汇编语言实验五
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息科学技术学院实验报告
课程名称汇编语言班级16软件工程1班实验名称编写、调试具有多个段的程序教导教师
姓名学号日期2018.04.06
一、实验目的
掌握在汇编代码中正确使用多个段
二、实验设备与环境
计算机
DOS操作系统或Windows 操作系统
MASM.EXE, LINK.EXE, 或宏汇编集成环境
三、实验内容、程序清单及运行结果
(1)实验内容:
程序清单:
Assume cs:code,ds:data,ss:stack
Data segment
Dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h Data ends
Stack segment
Dw 0,0,0,0,0,0,0,0
Stack ends
Code segment
Start: mov ax,stack
Mov ss,ax
Mov sp,16
Mov ax,data
Mov ds,ax
Push ds:[0]
Push ds:[2]
Pop ds:[2]
Pop ds:[0]
Mov ax,4c00h
Int 21h
Code ends
End start
运行结果:
Data段的内容
①CPU执行程序,程序返回前,data段即ds段中的数据为0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h。(红色标记处)
②CPU执行程序,程序返回前,cs=0774h、ss=0773h、ds=0772h。(绿色标记处)
③设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。
(2)实验内容:
程序清单:
Assume cs:code,ds:data,ss:stack Data segment
Dw 0123h,0456h
Data ends
Stack segment
Dw 0,0
Stack ends
Code segment
Start: mov ax,stack
Mov ss,ax
Mov sp,16
Mov ax,data
Mov ds,ax
Push ds:[0]
Push ds:[2]
Pop ds:[2]
Pop ds:[0]
Mov ax,4c00h
Int 21h
Code ends
End start
运行结果:
Data段的内容
①CPU执行程序,程序返回前,data段即ds段中的数据为0123h,0456h,0,0,0,0,0,0。(红色标记处)
②CPU执行程序,程序返回前,cs=0772h、ss=0771h、ds=0770h。(绿色标记处)
③设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。
④对于如下定义的段:
name segment
···
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为(N/16+1)*16
(3)实验内容:
程序清单:
Assume cs:code,ds:data,ss:stack Code segment
Start: mov ax,stack
Mov ss,ax
Mov sp,16
Mov ax,data
Mov ds,ax
Push ds:[0]
Push ds:[2]
Pop ds:[2]
Pop ds:[0]
Mov ax,4c00h
Int 21h
Code ends
Data segment
Dw 0123h,0456h
Data ends
Stack segment
Dw 0,0
Stack ends
End start
运行结果:
Data段的内容
①CPU执行程序,程序返回前,data段即ds段中的数据为0123h,0456h,0,0,0,0,0,0。(红色标记处)
②CPU执行程序,程序返回前,cs=0772h、ss=0776h、ds=0775h。(绿色标记处)
③设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。
(4)实验内容:
结果:第(3)个程序能够执行,(1)、(2)将无法执行,因为当去掉“start”后,程序将不知道第一句执行语句的入口,默认从程序的开头执行程序,而(1)、(2)程序的开头是数据段,故而导致执行出错。
(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
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov ax,c
mov es,ax
mov ax,a
mov ds,ax
mov cx,8
mov ax,0
mov bx,0
again1:
mov al,ds:[bx]
mov es:[bx],al
inc bx
loop again1 //第一个循环,将a段的数据填入c段
mov ax,b
mov ds,ax
mov bx,0
mov cx,8
again2: