编程语言
首页 > 编程语言> > 实验1 用汇编指令编码和调试

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

作者:互联网

 

    1. 实验结论——无法修改
    2. 原因分析——ffff:0-f属于ROM只读存储区,仅能进行写入操作,无法修改其中内容。 

 

 

 

 

修改内存地址:

 

 

当我输入以下命令时:

 遭到了爱心暴击:

 

失去爱心:

 原因:因为从A0000开始的一段地址范围被用来寻址图形模式的显存,映射到了BIOS的ROM中,而从B8000开始的地址到BFFFF这段地址并不是映射到ROM中,而是显存内,所以当修改B0000-B0FFF时不会在屏幕上出现爱心

 

 

填空题

 

 

 

问题一: 00220H ~ 0022fH用作栈空间。指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址和物理地址分别是 答:逻辑地址为20:0030;物理地址为2030.

 

问题二:

调试到汇编指令 push [6] 执行结束, pop [6] 执行之前,使用 d 20:20 2f 查看此时栈空间数据

 

问题三: 调试到汇编指令 pop [0] 执行结束后, pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据有变化

 

问题四: 最后四条指令改变顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7查看此时数据空间内的数据有变化

 

 

 

 

 

 

 

 

 

 

问题1: 使用t命令单步执行 mov ss, ax 时,是单步执行完这一条指令就暂停了吗?后面的指令 mov  sp, 30 是什么时候执行的? 答:有实验结果可以看到执行完mov ss,ax时,不光是ss=0020,同时sp也设为了0030,而能设置sp的只有指令mov sp,10,所以在使用t命令单步执行mov ss,ax的时候mov sp,10一定也执行了。通常t命令单步执行一个指令后会停止继续执行,但当执行到mov ss,ax时并没有停止执行,而是执行了mov sp,10才停止,可以猜测,当使用t命令执行修改寄存器SS的指令时,下一条指令会被直接执行。
  问题2: 根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。

答:可以看到栈内多出了的内容刚好是当前执行指令的地址,由此可见,因为在使用 t 指令时单步执行指令从而引发了中断,而在中断过程中时会使用当前栈空间存放cpu关键数据,便于下次继续执行。

 

 

程序源码:

 1 assume cs:code
 2 
 3 code segment
 4 start:
 5 mov cx, 10
 6 mov dl, '0'
 7 s: mov ah, 2
 8 int 21h
 9 add dl, 1
10 loop s
11 
12 mov ah, 4ch
13 int 21h
14 code ends
15 end start

汇编以及链接过程:

运行结果:

 

查看程序段前缀PSP:

 

 

 

补全空处后的源码:

 1 assume cs:code 
 2 code segment 
 3 start:
 4         mov ax, cs
 5         mov ds, ax 
 6         mov ax, 0020h 
 7         mov es, ax 
 8         mov bx, 0 
 9         mov cx, 17 
10 s:     mov al, [bx] 
11         mov es:[bx], al 
12         inc bx 
13         loop s 
14  
15         mov ax, 4c00h 
16         int 21h
17 code ends
18 end                                        

原因:

1、将程序段的段地址传递给中间过渡寄存器ax,从而传给代码段寄存器ds。

2、cx中保存的是程序的长度,但有效程序不包括mov ax 4c00h 和int 21h  所以将17h传递给cx。

 

反汇编截图:

 

 

 

1、实模式、保护模式、长模式等CPU工作模式的区别   答:实模式指的是相当于cpu在裸机情况下的一种快速8086 ,但不能发挥80x86的功能;保护模式是指cpu在非裸机情况下 通过操作系统接管过去之后就会具备80x86的威力了;长模式相比于保护模式,增加了一些通用寄存器,并扩展通用寄存器的位宽,所有的通用寄存器都是 64 位,还可以单独使用低 32 位。32 位可以拆分成一个低 16 位寄存器,低 16 位又可以拆分成两个 8 位寄存器。长模式依然具备保护模式绝大多数特性,如特权级和权限检查。 2、通过这次实验让我知道了,在计算机内存中并不是所有的地址都可以被我们改变,有些系统专用的内存是不能操作的,否则可能会影响很多部件的工作情况;以及T指令的单步执行操作是会自动执行对栈寄存器SS操作的语句的下一条语句,同时T指令的单步执行是会引起中断的以保证每次执行一条便停止。    

 

标签:编码,汇编,sp,mov,指令,单步,ax,执行,调试
来源: https://www.cnblogs.com/Strawberries/p/15425685.html