汇编语言-实验4

一、实验目的

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

二、实验过程和结果

1:生日数字(BCD码)还来一次。

  • ①用a命令写入几条指令,这些指令需完成如下操作: 注意:以下操作需全部用汇编指令完成。

  • 将数据段段基址设置成15E0H
    将自己的生日数字(BCD码)存放在寄存器中。
    将寄存器中的年数字存放在数据段中任意位置,隔开2个字节后,存放月和日的数字(参考下方参考图片)。

  • ②执行上述指令。

  • ③用d命令查看对应内存 思考:本题数据段在哪里?代码段在哪里?(填写地址范围)

1.数据段:15E00110 0115 将段地址放在DS:15E0,
用MOV访问内存单元的指令时,CPU就将我们定义的
数据段中的内容当作数据来访问;
2.代码段:13F00100 0116将段地址放在CS:13F0,
将段中的第一条指令的偏移地址放在IP:0110中,这
样CPU就将执行我们定义的代码段中的指令。

截图如下:
在这里插入图片描述
在这里插入图片描述

2:用a命令写入几条指令,完成下述操作,并执行,最后用d命令检查。

  • 在内存中物理地址是18020h开始的位置写入十六进制数据:6861707079
  • 注意:不能使用r命令修改除了cs和ip以外寄存器的值,更不能使用e命令修改内存,使用数据段和代码段,不使用堆栈段。

思考:本题数据段在哪里?代码段在哪里?(填写地址范围)

数据段:10008020 8024;将段地址放在DS:1000,
用MOV访问内存单元的指令时,CPU就将我们定义的数
据段中的内容当作数据来访问;
代码段:11F00000 001C;将段地址放在CS:11F0,
将段中的第一条指令的偏移地址放在IP:0000中,这样
CPU就将执行我们定义的代码段中的指令。

在这里插入图片描述在这里插入图片描述

3.接上题。用a命令写入几条指令,完成下述操作,并执行,最后用d命令检查。

  • 将内存中物理地址是18022h处的三个字节的数据分别放入寄存器BL,CL,DL中。将这三个字节的数据看做ASCII码,转换成其字母对应的大写,并分别存入BL,CL,DL中。再写入物理地址是13ff0h开始的内存中。

思考:本题数据段在哪里?代码段在哪里?(填写地址范围)

数据段:10003FF0 3FF2;将段地址放在DS:1000,
用MOV访问内存单元的指令时,CPU就将我们定义的数
据段中的内容当作数据来访问;
代码段:12F00000 001D;将段地址放在CS:12F0,
将段中的第一条指令的偏移地址放在IP:0000中,这样
CPU就将执行我们定义的代码段中的指令。

截图如下(可分多次截图):
在这里插入图片描述
在这里插入图片描述
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= C0EA H
add ax,[2]    ;ax= C0FC H
mov bx,[4]    ;bx= 30F0 H 
add bx,[6]    ;bx= 6021H
push ax  ;sp= 00FE H ,修改的内存单元地址是 0100修改后数值为00FE
push bx ;sp=  00FCH ,修改的内存单元地址是 00FE 修改后数值为00FC
pop ax      ;sp= 00FE  ,ax=  6021 
pop bx  ;sp= 0100  ,bx=  C0FC
push [4]   ;sp= 00FE ,修改的内存单元地址是 0100 修改后数值为00FE
push [6]   ;sp= 00FC ,修改的内存单元地址是 00FE 修改后数值为00FC

思考:本题数据段在哪里?代码段在哪里?堆栈段在哪里?(填写地址范围)

1.数据段:FFFF:0000 将段地址放在DS:FFFF,
用MOV访问内存单元的指令时,CPU就将我们定
义的数据段中的内容当作数据来访问;
2.代码段:13FF0000 0024;将段地址放在
CS:13FF,将段中的第一条指令的偏移地址放
在IP:0000中,这样CPU就将执行我们定义的代码段中的指令。
3.堆栈段:22000100,将段地址放在SS中,将栈顶单元的
偏移地址放在SP中,这样CPU在需要进行栈操作的时候,
比如PUSH、POP指令等,就将为我们定义的栈段当作栈空间来用

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,之前好像写过,眼熟,ax,ip,ss?

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码参考可转换为十六进制、十进制、二进制的网址
还可自行搜索转换器,也可以自己编写一个。

(湖南衡阳:6875 6e616e 68656e67 79616e67)本人的籍贯
  • 提示1:将哪里设置成数据段,哪里设置成堆栈段就可以了?

  • 提示2:怎么设置数据段,怎么设置堆栈段?

  • 提示3:堆栈是空的还是满的,sp如何设置?

思考:本题数据段在哪里?代码段在哪里?堆栈段在哪里?(填写地址范围)

1.数据段:16F00100  000f 将段地址放在DS:16F0,
用MOV访问内存单元的指令时,CPU就将我们定义的数据
段中的内容当作数据来访问;
2.代码段:14F00000  0029;将段地址放在CS:14F0,
将段中的第一条指令的偏移地址放在IP:0000中,这样
CPU就将执行我们定义的代码段中的指令。
3.堆栈段:16E0:0110 011f,将段地址放在SS中,将栈顶
单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,
比如PUSH、POP指令等,就将为我们定义的栈段当作栈空间来用

截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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以外寄存器的值。

思考:本题数据段在哪里?代码段在哪里?堆栈段在哪里?(填写地址范围)

1.数据段:16F00100  000f 将段地址放在DS:16F0,
用MOV访问内存单元的指令时,CPU就将我们定义的数据段
中的内容当作数据来访问;
2.代码段:14F00100  0029;将段地址放在CS:14F0,
将段中的第一条指令的偏移地址放在IP:0100中,这样CPU
就将执行我们定义的代码段中的指令。
3.堆栈段:16F0:0100 010f,将段地址放在SS中,将栈顶
单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,
比如PUSH、POP指令等,就将为我们定义的栈段当作栈空间来用

截图如下:
在这里插入图片描述
在这里插入图片描述

8.第2题的改版。用a命令写入几条指令,完成下述操作,并执行,最后用d命令检查。

  • 在内存中物理地址是18020h开始的位置写入十六进制数据:6861707079

  • 注意:不能使用r命令修改除了cs和ip以外寄存器的值,更不能使用e命令修改内存,使用堆栈段和代码段,不使用数据段。

思考:本题堆栈段在哪里?初始状态堆栈是空的还是满的?代码段在哪里?(填写地址范围)

1.堆栈段:1802:0000 0006,将段地址放在SS中,将栈顶单元
的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,
比如PUSH、POP指令等,就将为我们定义的栈段当作栈空间来用
2.代码段:15F00000  0013;将段地址放在CS:14F0,
将段中的第一条指令的偏移地址放在IP:0100中,这样CPU
就将执行我们定义的代码段中的指令。

截图如下(可分多次截图):

在这里插入图片描述
在这里插入图片描述
【等待老师的讲解,果不其然,桌面上我肯定不会保留,还是放在这里吧】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少年游四方

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

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

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

打赏作者

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

抵扣说明:

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

余额充值