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

四、实验结论

2.实验任务2

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

 

结论:在每一块的主板的ROM,都有一个它的生产日期,这个是不可以改变的,因为Rom本身就是一个不能修改的内存。

3.实验任务3

在debug中使用e命令修改内存单元的命令,及,效果截图:
 
在debug中使用f命令批量填充内存单元的命令,及,效果截图:
 
尝试修改内存单元后效果截图:

 

尝试修改数据后的效果截图:

 

4 .实验任务4

问题一:逻辑地址SS:SP    物理地址:00230H

问题二:

 问题三:

 问题四:

 

5 .实验任务5

问题一:不是,由截图可知,在单步调试的过程中,执行完mov ss,ax指令后,直接跳到了mov ax,2010指令,即同时完成了mov sp,30指令。

 

问题二:

 

 

 实验结果中,内存中的的数据与cs:ip所指的单元地址相同,猜测是在t命令执行过后,该段内存单元会用来存放所指指令地址,导致栈内存单元中的数据发生改变。

 6.实验任务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的运行结果截图:

 

该程序实现了依次顺序输出0-9十个数字。

 

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

 

7.实验任务7

补全后的完整源码:
assume cs:code
code segment

    mov ax,cs    
    mov ds,ax

    mov ax,0020H
    mov es,ax

    mov bx,0
    mov cx,0017H    
  s:mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s

    mov ax,4c00H
    int 21H

code ends
end
第一空:程序加载到内存中时,cs:ip会初始化为程序的首个地址,而作为程序段的段首,ip为0,所以通过ax将cs的值赋值给ds。
第二空:该程序从076C:0000开始,到076C:001B结束,共001CH个字节,最后一条需要复制的代码占的内存单元为0015H和0016H,所以长度为0017H。
 
使用g命令运行到指定点截图:

 

使用u命令反汇编0:200到复制代码长度这一段内存空间的截图:

 

 

posted @ 2021-10-23 15:35  『子休』  阅读(23)  评论(3)    收藏  举报