汇编实验二 汇编语言程序初体验

一、实验目的

  1. 理解程序在CS和IP寄存器的控制下运行的过程
  2. 学会观察栈工作的过程
  3. 学会由汇编语言源程序到可执行文件的生成过程,学会用Debug运行程序

二、实验内容过程记录

任务1-理解程序的执行过程

内存中的情况如下图:

各寄存器的初始值为:(CS)=2000H, (IP)=0, (DS)=1000H, (AX)=0, (BX)=0

1-1 用“人脑”完成

序号

(1)写出CPU执行的指令序列

(2)CS、IP和相关寄存器中数值的变化

1

mov ax,6622

cs=2000 ip=0000 ds=1000 ax=6622 bx=0000

2

jmp 0ff0:0100

cs=0ff0 ip=0100 ds=1000 ax=6622 bx=0000

3

mov ax,2000

cs=0ff0 ip=0103 ds=1000 ax=2000 bx=0000

4

mov ds,ax

cs=0ff0 ip=0105 ds=2000 ax=2000 bx=0000

5

mov ax,[0008]

cs=0ff0 ip=0108 ds=2000 ax=c389 bx=0000

6

mov ax,[0002]

cs=0ff0 ip=010b ds=2000 ax=ea66 bx=0000

1-2 用“电脑”验证:

在debug中布置出如上所示的环境(预置内存和寄存器的值):

单步执行上面的程序,验证结论:

任务2-理解栈机制

已知(SS)=3000H,(SP)=200H,(AX)=785AH,(BX)=1234H

2-1 在下面空白处写下你的“人脑”run的结果(请在分析的过程中,在草稿纸上画出栈的结构来)

先执行下面的指令`

PUSH AX

PUSH BX

此时

  (SS)= __3000__

  (SP)= __01FC___

存放12H的字节数据的物理地址是__301FD____

再执行

POP AX

POP BX

此时

  (AX)= __1234______

  (BX)= ___785A_____

栈结构如下图所示(可以将草稿纸上内容拍照插入)   

2-2 用“电脑”验证:在debug中布置环境,运行上面的程序,通过查看栈区的数据,验证你的上述结论。

下面是验证过程的截屏:

任务3-编制第一个汇编程序

(1)将下面的程序保存为p1.asm,将其生成可执行文件p1.exe。

assume cs:codesg

codesg segment

         mov ax,0123H  ;(1)

         add ax,ax       ;(2)

         mov ax,4c00h

         int 21h

codesg ends

end

(2)在Debug中单步执行这个程序

(3)请修改这个程序,使其能完成的任务是

  1. 传送25H到AL寄存器
  2. 将AL的内容乘以2
  3. 传送15H到BL寄存器
  4. AL的内容加上BL的内容

完成程序的编辑、编译、连接、运行,并截图说明

提示:用4条指令替换p1.asm中的加注释(1)和(2)的两行即可。

三、实验总结

记录:

在实验过程中,我对于程序的顺序判断很准确,因为了解程序执行的开始是CS:IP指向的地址,对于jmp指令的知识较为了解。但在写程序的时候a指令没有在指定CS,IP的位置内存开始写指令。用记事本写文件时,发现一个很好用的编辑器editplus在看了贺老师的截图发现会有彩色标记关键字,在网上搜索了一下,添加了asm.sxt文件,可以更加简便的检查拼写错误等。在使用DOS中的edit编辑中,鼠标无法跳出界面,我当时强制打开任务管理器才好,后来搜了一下csdn,发现快捷键Ctrl+F10可以跳出鼠标;

感受:

纸上得来终觉浅,绝知此事要躬行。理论知识固然重要,可是真正操作的时候就会暴露很多问题,所以要多实践操作,遇到问题就要请教去解决。

学习这门语言时如果能联系上以前学过的其他高级语言的知识,最重要的是一些思考问题,实现功能的逻辑的思考,会帮助我们很快的找到编写程序的思路和方向。例如C语言程序的运行逻辑结构有顺序、分支结构,循环结构三种结构,也通过C语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。

思考:

学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构,学到这还没见到很多的指令和语句,但这是学习汇编前必须要知道和掌握的,只有知道了汇编的实质、如何工作及一些基本概念,才能进行下一步的学习。

  • 34
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀桃李不言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值