汇编语言 实验1

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了汇编语言 实验1脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

实验结论


实验任务1

  • 完成

实验任务2

  • PC主板上的rom中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,使用d命令d fff0:0 ff可以查看(当然只要段地址*16+指针偏移地址==FFF00H-FFFFFH都行)。得到结果如图所示。该生产日期为DOS虚拟的生产日期,1992年1月1日。

    汇编语言 实验1

  • 尝试修改ROM内存单元的内容后

    汇编语言 实验1

    发现修改不成功。

原因: C0000-FFFFF地址空间属于8086CPU的ROM空间,而题目所给的FFF00H-FFFFFH位于C0000-FFFFF,故无法修改。(8086CPU的Ram地址空间为00000H-9FFFFH)

实验任务3

执行-e b800:0 03 04 03 04 03 04 03 04 03 04后,结果如下:

汇编语言 实验1

执行-f b800:0f00 0f9f 03 04后,结果如下:

汇编语言 实验1

执行-e b800:0f00 00 00 00 00 00 00 00 00 00 00尝试修改前10个内存单元后:

汇编语言 实验1

内存地址为:

汇编语言 实验1

实验任务4

  • 填空
-a
mov ax, 20
mov ds, ax
mov ss, ax
mov sp, 30
push [0] ; 执行后,寄存器(sp) = 002E
push [2]   ; 执行后,寄存器(sp) = 002C
push [4]   ; 执行后,寄存器(sp) = 002A
push [6]   ; 执行后,寄存器(sp) = 0028
pop [6]   ; 执行后,寄存器(sp) = 002A
pop [4]   ; 执行后,寄存器(sp) = 002C
pop [2]   ; 执行后,寄存器(sp) = 002E
pop [0]   ; 执行后,寄存器(sp) = 0030

  • 回答问题: 问题1:题目要求是把00220H ~ 0022fH用作栈空间。指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址和物理地址分别是?

1. 逻辑地址为:SS:SP=20:30;物理地址为:00230H

问题2:单步调试到汇编指令 push [6] 执行结束, pop [6] 执行之前,使用 d 20:20 2f 查看此 时栈空间数据,给出实验截图。

汇编语言 实验1

问题3:汇编指令 pop [0] 执行结束后, pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此 时数据空间内的数据是否有变化。给出实验截图。

汇编语言 实验1

数据没有变化

问题4:如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。给出实验截图。

汇编语言 实验1

数据发生变化

实验任务5

问题1:使用t命令单步执行 mov ss, ax 时,是单步执行完这一条指令就暂停了吗?后面的指令 mov sp, 30 是什么时候执行的?

不是。在执行完mov ss,ax后紧接着执行了mov sp,30,这两步相当于初始化栈。

问题2:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通 过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特 别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。

原因:t指令引发了中断,中断过程使用当前栈空间存放cpu关键数据;图中黄色下划线表示的数据是下一步指令所在内存地址。

实验任务6

  • 程序代码
assume cs:code
code segment
start:
  mov cx, 10
  mov dl, '0'
s: mov ah, 2
  int 21h
  add dl, 1
  loop s
  mov ah, 4ch
  int 21h
code ends
end start

使用Masm、link对程序汇编链接过程截图,以及,运行可执行程序task5.exe的运行结果截图:

汇编语言 实验1

在debug中查看task6.exe的程序段前缀PSP的截图:

汇编语言 实验1

实验任务7

  • 给出补全后的完整源码。说明程序中两个空填写的依据。
assume cs:code
code segment
  mov ax, cs     
  mov ds, ax
  mov ax, 0020h
  mov es, ax
  mov bx, 0
  mov cx, 17H    
s: mov al, [bx]
  mov es:[bx], al
  inc bx
  loop s
  mov ax, 4c00h
  int 21h

code ends
end
  1. 第一个空cs代码实现自复制,所以要将cs中存贮的代码开始的段地址通过寄存器ax赋值给ds
  2. 第二个空17H,cx的值为程序返回时的偏移地址,int 21h2个字节, mov ax,4c00h3个字节,则前面部分代码段占17H个字节

  • 在debug中调试,使用g命令将程序执行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命 令对0:200开始的内存单元反汇编,确认是否把task7.asm中line3-line12的代码复制到了目标内存 空间。给出使用g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图。

    汇编语言 实验1

实验总结

  1. 物理地址=段地址 * 16 + 偏移地址

  2. 栈的存储方式为先进先出,使用push命令时,首先减少sp的值然后将数据放入栈中,使用pop命令时,先取出数据,然后sp增加。

  3. 在debug调试中,使用t命令单步跟踪时,ip会先自减2,下一步再执行cs:ip指向的命令

脚本宝典总结

以上是脚本宝典为你收集整理的汇编语言 实验1全部内容,希望文章能够帮你解决汇编语言 实验1所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。