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

实验结论

实验任务2

  • PC机主板上的ROM中有一个生产时期,在内存FFF00H ~ FFFFFH的某几个单元中,请找到这个生产时 期,并试图修改它。 在debug中,使用d命令查看生产日期 使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看

1.d命令查看周期

>debug
-d fff0:0 ff

2.e命令修改

-e ffff:0 00
-d fff0:0 ff

3.结论

试图修改被虚拟页表标记为只读的内存空间,被cpu的页映射逻辑中断。

实验任务3

  • 在debug中,使用e命令,向内存单元填写数据。-e b800:0 03 04 03 04 03 04 03 04 03 04从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。
  • 在debug中,使用f命令,向内存单元批量填写数据。-f b800:0f00 0f9f 03 04把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。

1.在debug中使用e命令修改内存单元

2.在debug中使用f命令批量填充内存单元

实验任务4

已知内存单元00201H ~ 00207H分别存放数据(如下图所示),00220H ~ 0022fH用作栈空间

在debug环境中,按顺序录入以下内容,单步跟踪调试,观察寄存器和内存空间00200H~00207H,以及,栈空间00220 ~ 0022fH内容变化情况。记录实验结果。回答问题,验证和你的理论分析结果是否一致。

Q1

  • 逻辑地址:0020:30H
  • 物理地址:00230H

Q2

Q3

无变化

Q4

有变化

实验任务5

Q1

  • 未暂停
  • 在mov ss,ax之后 mov sp,30执行。

Q2

随着数据存入内存后,IP和CS寄存器的地址逐渐减小

实验任务6

assume cs:code

code segment
start:
    mov cx, 10
    mov dl, '0'
s: mov ah, 2 
    nt 21h
    add dl, 1
    loop s

    mov ah, 4ch
    int 21h
code ends
end start

实验任务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
  • mov al, [bx]可以认为ds为程序的起始位置的段地址,故将cs赋值给ax。
  • cx为循环次数,循环次数应为代码总长度减去mov ax,4c00H以后的代码长度

实验总结

本次实验更加深刻地理解了程序的内存布局

posted @ 2021-10-28 23:36  trionfordring  阅读(78)  评论(2)    收藏  举报