汇编语言-实验4


前言

作者介绍:友友们好我是乱披风锤,大二学生党一枚
作者主页:乱披风锤的个人博客主页.跳转到个人简介

我和友友们一样喜欢编辑,天天敲代码🤭,沉迷学习,日渐消瘦。很荣幸能向大家分享我的所学,和大家一起进步,成为合格的卷王。如果文章有错误,欢迎在评论区指正。那么开始今天的学习吧!
那么今天的学习就到这里了。友友们觉得不错的可以给个关注,点赞或者收藏哦!感谢各位友友们的支持。以下的代码希望各位大佬们自行检验哦,毕竟亲手操作让记忆更加深刻。
在这里插入图片描述


一、实验目的

掌握Debug常见指令的使用,以及跟踪程序的运行。
掌握待执行指令地址的形成方法。
掌握物理地址的形成方法。
掌握数据段段基址的设置方法。
掌握堆栈段段基址和sp的设置方法。

二、实验过程和结果

1:生日数字(BCD码)还来一次。
①用a命令写入几条指令,这些指令需完成如下操作:
注意:以下操作需全部用汇编指令完成。
将数据段段基址设置成15E0H
将自己的生日数字(BCD码)存放在寄存器中。
将寄存器中的年数字存放在数据段中任意位置,隔开2个字节后,存放月和日的数字(参考下方参考图片)。
②执行上述指令。
③用d命令查看对应内存
思考:本题数据段在哪里?代码段在哪里?(填写地址范围)
答:数据段:15e0 代码段:13f0
截图如下:
在这里插入图片描述

2:用a命令写入几条指令,完成下述操作,并执行,最后用d命令检查。
在内存中物理地址是18020h开始的位置写入十六进制数据:6861707079
注意:不能使用r命令修改除了cs和ip以外寄存器的值,更不能使用e命令修改内存,使用数据段和代码段,不使用堆栈段。
思考:本题数据段在哪里?代码段在哪里?(填写地址范围)
答:数据段:1000:8020 8024 代码段:12f0 0000 001c

截图如下(可分多次截图):
在这里插入图片描述
在这里插入图片描述
3.接上题。用a命令写入几条指令,完成下述操作,并执行,最后用d命令检查。
将内存中物理地址是18022h处的三个字节的数据分别放入寄存器BL,CL,DL中。将这三个字节的数据看做ASCII码,转换成其字母对应的大写,并分别存入BL,CL,DL中。再写入物理地址是13ff0h开始的内存中。
思考:本题数据段在哪里?代码段在哪里?(填写地址范围)
答:数据段1000:8022 8024 代码段15f0:0000 0017

截图如下(可分多次截图):
在这里插入图片描述
在这里插入图片描述
4:用a命令写入下列指令并用t命令执行
mov ax,2000
mov ss,ax
mov sp,10
mov ax,3123
push ax
mov ax,3366
push ax
思考:这7条指令需要使用几个t命令才能执行完成?请仔细观察每次t命令结束后,各个寄存器的变化以及显示出来的下一条指令。

答:题意很明显,这7条指令需要使用6个t命令才能执行完成
在这里插入图片描述

5:用a命令将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
填空:
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ; 指令执行后ax=COEA H
add ax,[2] ; 指令执行后ax= COFC H
mov bx,[4] ; 指令执行后bx= 30f0 H
add bx,[6] ;bx= 6061 H

push ax ;指令执行后sp= 00FE H ,修改的内存单元地址是 2200:0010 修改后数值为 00FE
push bx ; 指令执行后sp=00FC H ,修改的内存单元地址是 2200:00FE 修改后数值为 00FC
pop ax ; 指令执行后sp= 00FE ,ax= 6021
pop bx ; 指令执行后sp= 0100 ,bx= COFC

push [4] ; 指令执行后sp= 00FE ,修改的内存单元地址是 2200:0100 修改后数值为 00FE
push [6] ; 指令执行后sp= 00FC ,修改的内存单元地址是 2200:00FE 修改后数值为 00FC
思考:本题数据段在哪里?代码段在哪里?堆栈段在哪里?(填写地址范围)
答:数据段ffff 代码段12f0: 0000 0024 堆栈段2200:0100
图解在下面:
在这里插入图片描述
在这里插入图片描述
5:堆栈好像是个不听话的东东。
①用a命令在自己指定位置写入下列指令
mov ax,2000
mov ss,ax
mov sp,10
mov ax,1234
push ax
mov ax,3355
push ax
②用e命令在堆栈空间(2000:0000~2000:000f)写入全0
③用t命令单步执行前三条指令(即初始化堆栈)后,请用d命令查看堆栈内容,还是全0吗,这些值在哪里出现过?再执行一条指令查看堆栈内容变化…请多次操作,看看堆栈里面到底放了什么,至于为什么,就先不用管啦。
不全是0
在这里插入图片描述
6.在16f0:0100处写入自己籍贯的拼音(ASCII码,例如:hu空格nan空格chang空格sha即68 75 20 6e 61 6e 20 63 68 61 6e 67 20 73 68 61),若不是偶数个字节,请在任意位置补空格,凑成偶数个字节。利用堆栈的入栈操作将上述数据逆序存放在16e0:0100处。不能使用mov指令传送上述数据,不能使用r命令修改除了cs和ip以外寄存器的值。
ASCII码参考http://www.ab126.com/goju/1711.html还可自行搜索转换器,也可以自己编写一个。
思考:本题数据段在哪里?代码段在哪里?堆栈段在哪里?(填写地址范围)
数据段16f0 代码段13f:0000 0019 堆栈段16e0 0100 0105
截图如下:

在这里插入图片描述
在这里插入图片描述
7.在16f0:0100处写入自己籍贯的拼音(ASCII码,例如:hu空格nan空格chang空格sha即68 75 20 6e 61 6e 20 63 68 61 6e 67 20 73 68 61),若不是偶数个字节,请在任意位置补空格,凑成偶数个字节。利用堆栈的出栈操作将上述数据逆序存放在16e0:0100处。不能使用mov指令传送上述数据,不能使用r命令修改除了cs和ip以外寄存器的值。
思考:本题数据段在哪里?代码段在哪里?堆栈段在哪里?(填写地址范围)
数据段16e0 代码段12ff:0000 0019 堆栈段16f0:0100 0105
截图如下:
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

进击攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值