lmj0228

实验任务2

结论:不能修改

原因:8086PC机中地址C0000-FFFFF的内存单元是各类ROM地址空间,因此向地址C0000-FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。

 

实验任务3

 

 

 

 

实验任务4

  • 填空

    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、逻辑地址:0020H:0030H ;    物理地址:00230H

  2、

  3、  

   数据空间内的数据没有变化

  4、

   数据空间内的数据发生变化

 

 实验任务5

1、在用 t 命令执行mov ss, ax的时候,单步执行完并没有暂停,而是紧接着执行它的下一条指令mov sp, 30,这两条指令都执行完才暂停执行。

2、073F:0108 原因:在用 t 命令执行完073F:0103地址处的指令mov ss, ax的时候,紧接着又执行了下一条指令---073F:0105地址处的指令mov sp, 30,而下一条指令的地址为073F:0108。

  栈中数据发生变化原因:因为在debug使用 t 等指令时引发了中断,中断过程使用当前栈空间存放cpu关键数据,所以,栈中有些数据改变了

 

 实验任务6

 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

 

 

 

实验任务7

 1 ;完成自身代码的自我复制:把 mov ax, 4c00h 之前的指令复制到内存0:200开始的连续的内存单元。
 2 assume cs:code
 3 code segment
 4     mov ax, cs
 5     mov ds, ax
 6     mov ax, 0020h
 7     mov es, ax
 8     mov bx, 0
 9     mov cx, 17h
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

 

第一空:CS保存程序的代码段的段基址,因此将CS中的值通过ax赋给ds

第二空:cx控制循环次数,因此只要得到mov ax, 4c00h 之前的指令的长度即可

 显而易见,mov ax, 4c00h 之前的指令长度为17h字节,因此 (cx) = 17H

 

g命令:

 

反汇编:

 

实验总结
 
1、数据和代码对CPU来说是没区别的,只要CS:IP指向的就是代码。
2、向地址A0000-BFFFF的内存单元中写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上。
3、向地址C0000-FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-12-30
  • 2022-12-23
  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-13
猜你喜欢
  • 2021-10-13
  • 2022-01-20
  • 2021-05-26
  • 2021-05-22
  • 2022-01-26
相关资源
相似解决方案