- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验子程序全解
汇编语言子程序—实验报告
实验题目:子程序
班 级:
姓 名:
学 号:
日 期:
实验题目
实验目的
1、掌握子程序的设计方法和调用方法;
2、 深刻认识堆栈在子程序设计中所起的作用;
3、 掌握子程序调试的技巧。
实验设备
1、硬件环境:华硕笔记本
2、软件环境:win10系统下的DOSBox
3、 编辑程序 EDIT 或其它编辑程序; Notepad++
4、 汇编程序 MASM.EXE;
5、连接程序 LINK.EXE。
6、 调试程序 DEBUG.COM
实验内容和要求
实验内容:
内存中有一字型无符号数缓冲区 Data,长度为 20( 数据自己定义) 。 将 Data 缓冲区显示到屏幕上,分别用二进制和十进制。
实验要求:
1、 编写主程序将 Data 数据依次显示在屏幕上,在主程序中分别调用子程序 1、子 程序 2。
2、 编写子程序 1 将 Data 中所有字数据用二进制进行显示,参数用堆栈传递;
3、 编写子程序 2 将 Data 中所有字数据用十进制进行显示,参数用地址表传递;
4、 要求设计两个模块, 主程序在模块 1 中, 子程序 1-2 在模块 2 中;
实验步骤
1、调用某种编辑程序,在磁盘上建立扩展名为 ASM 的源程序 1 和 2(分别设计主 程序与子程序) ;
2、仔细检查源程序的语法和指令;
3、启动 DOS 操作系统
4、在 DOS 提示下,打入 MASM 调入宏汇编程序,分别对源程序 1-2( 对应 2 个模块) 进行汇编。根据汇编提示结果,排除一切命令和语法错误,并相应生成 2 个 OBJ 文件。
5、在 DOS 提示符下,打入 LINK 调用连接程序, 对 OBJ 文件 1 和 2 进行连接, 产 生可执行的 EXE 文件。
6、执行 EXE 可执行文件,并查看结果。
7、使用 DEBUG 命令对 EXE 可执行文件进行调试,利用反汇编查看机器代码以及 单步执行,可排查程序逻辑错误。
实验结果分析
子程序 1-2 是否与主程序在同一代码段? 子程序 1-2 所在的段地址和偏移地址各是什么? 请列出 Data 存储区的 20 个字内容。 (附图)
答:不在同一模块,不在同一代码段。
子程序1的段地址和偏移地址为:段地址为077E,偏移地址为0000
子程序2的段地址和偏移地址为:段地址为077E,偏移地址为0041
Data存储区的 2内容36, 45, 66, 12, 78, 89, 42, 63, 47, 87, 99, 10, 34, 72, 34, 61, 14, 21, 73, 49
使用堆栈传递参数时,绘制堆栈最满时的存储内容以及 BP 和 SP 所指向的位置;
提供显示到屏幕上的结果,提供完整的原始汇编代码。 (附图)
源代码:
;4.asm
public main
extrn binary:far, decimal:far
data segment
x dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
count dw 20
table dw 2 dup(?)
data ends
stack_seg segment
dw 100 dup(?)
tos label word
stack_seg ends
code1 segment
main proc far
assume cs:code1, ds:data, ss:stack_seg
start:
mov ax, data
mov ds, ax
mov ax, stack_seg
mov ss, ax
mov sp, offset tos
mov ax, offset x
push ax
mov ax, offset count
push ax
call binary ;二进制输出
mov dl, 10 ;输出换行
mov ah, 2
int 21h
mov bx, offset table
mov ax, offset x
mov [bx], ax
mov ax, offset count
mov [bx+2], ax ;十进制输出
call far ptr decimal
mov ax, 4c00h
int 21h
main endp
文档评论(0)