201983290333左智实验1

实验任务2

1.使用d命令查看生产时期

2.使用e命令修改生产日期所在内存单元的截图,以及,修改后,再次使用d命令查看的截图

 

结论分析,生产日期不能修改 

实验任务3

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

 

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

 

3.尝试修改内存单元,或,数据后的效果截图

实验任务4

1.:题目要求是把00220H ~ 0022fH用作栈空间。指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址和物理地址

栈顶的逻辑地址为:30h

物理地址为:00230H

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

 

3.汇编指令 pop [0] 执行结束后, pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此 时数据空间内的数据

 

4如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据

 

实验任务5

 1.在执行mov ss,ax后紧接着执行mov sp,30

2.

 原因不太懂

实验任务6

 1.程序源码

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

2.使用masm、link对程序汇编链接过程截图,以及,运行可执行程序task5.exe的运行结果截图

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

 

实验任务7

1.完整源码

assume cs:code
code segment

    mov ax,cs    ;cs为补全处内容
    mov ds,ax

    mov ax,0020H
    mov es,ax

    mov bx,0
    mov cx,0017H    ;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

因为不是所有代码都要复制,而程序加载后cx寄存器会存有整个程序的字节数,再通过debug算出最后两条代码的字节数

观察到cx的值为001CH,即整个程序占001CH个字节,CS:IP为076C:0

该程序从076C:0000开始,到076C:001B结束,共001CH个字节,而后两行代码占用的字节数为(001B-0017+1)5H字节,第二个补全的地方应填(001C-0005)0017H,或者看最后一条需要复制的代码占的内存单元为0015H和0016H,所以长度为0017H。

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

 

posted @ 2021-10-23 13:07  一只羊、  阅读(49)  评论(3编辑  收藏  举报