实验1 8086汇编指令编码和调试

  • 实验任务2

使用d命令查看生产日期

使用e命令修改生产日期所在的内存单元,修改后,再次使用d命令查看

 使用e命令修改内存后发现数据未被修改。生产日期可能在只读的地址空间,所以只能读取,不能写入。

  • 实验任务3

使用e命令修改内存单元的命令,及效果截图

 

使用f命令批量填充内存单元的命令,及效果截图

 

尝试修改内存地址和内存的数据

  

  • 实验任务4

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

     逻辑地址:20:30

     物理地址:00230H

 

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

 

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

 

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

 

  • 实验任务5

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

     不是,指令 mov sp, 30紧跟着指令mov ss, ax之后执行。

 

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

    

 

00220H ~ 0022fH内存空间里有存放ds和ip,随着ds和ip的变化而变化。

 

  • 试验任务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的运行结果截图

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

  • 试验任务7

给出补全后的完整源码。说明程序中两个空填写的依据。

第一空:cs ,因为代码段的起始位置是cs

第二空:17h,先赋值为0,在debug中运行,最后mov ax,4c00h的位置在0017

 

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

 

 

  • 实验总结

  1. 通过本次实验我对于debug中的d命令、e命令和f命令等有了更深的理解。
  2. 在任务4、任务5中多次对于栈进行查看,对栈的特性有了更多了解。
  3. 学会了使用masm、link、汇编、链接得到可执行文件。

 

posted @ 2021-10-22 15:51  华非桦  阅读(56)  评论(3)    收藏  举报