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

实验任务2:

使用d命令查看生产时期的截图:

 使用e命令修改生产日期所在内存单元的截图:

 修改后,再次使用d命令查看的截图:

 结论:不能修改。因为在8086PC机中,地址C0000~FFFFF是各类ROM的地址空间,我们无法向其中写入数据,因为只读存储器中的内容不能被改写。

 

实验任务3:

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

-e b800:0 03 04 03 04 03 04 03 04 03 04

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

-f b800:0f00 0f9f 03 04

 修改内存单元后的效果截图:

 修改数据后的效果截图:

 

实验任务4:

填空:2e,2c,2a,28,2a,2c,2e,30

问题一:逻辑地址:0020:0030 物理地址:00230h

问题二:

问题三:

没有变化

问题四:

有变化,数据的顺序颠倒

 

实验任务5:

问题一:

在用t命令执行mov ss,ax的时候,下一条指令mov sp,30也紧跟着执行了。因为Debug的t命令在执行修改栈段寄存器ss的指令时,下一条指令也紧接着被执行。

问题二:

每次使用t命令进行单步调试时,cpu会把指向下一条将要执行的指令的cs值先入栈,再把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的截图:

前两个字节是CD 20

 

实验任务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

第一个空:cs:ip指向的是代码开始的位置,把段地址cs赋值给ax,即从这里开始复制

第二个空:循环次数是将要复制程序的字节数,已知程序的长度是存放在cx中的,查看得知长度为28,除去最后两行代码的字节数5,即为28-5=23,转为十六进制为17h

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

 

实验总结:

实模式:即DOS模式,cpu没有能力对硬件系统进行全面、严格的管理。

保护模式:硬件已经被操作系统利用cpu保护模式所提供的功能全面而严格地管理了。

长模式:长模式是64位操作系统可以访问64位指令和寄存器的模式。

posted @ 2021-10-23 15:57  cjdzs  阅读(113)  评论(2)    收藏  举报