实验1

实验任务2

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

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

 结论:生产时期所在的内存单元并没有被改变,即e命令不能修改该内存单元内容。因为这段内存只读,不能修改。

实验任务3

1.使用e命令修改内存单元命令即截图

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

 

 2.使用f命令批量填充内存单元的命令及截图

-f b800:0f00 0f9f 03 04

 

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

 修改后使用d命令查看时要指定起始位置。

实验任务4

填空:2E,2C,2A,28,2A,2C,2E,30

1.指令mov ss,ax和mov sp,30执行后,栈顶逻辑地址和物理地址分别是?

 答:逻辑地址是20:30,物理地址是00230H

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

 

 3.pop[0]执行结束后,使用d 20:0 7查看数据空间内的数据是否有变化。

 

 4.pop[6]执行结束后,使用d 20:0 7查看数据空间内的数据是否有变化。

 

实验任务5

1.指令mov sp,30是什么时候执行的?

 答:t命令在执行修改寄存器ss的指令时,下一条指令也跟着执行。mov sp,30在下一次使用t命令时执行。

2.观察单步调试时,栈空间00220H~0022fH内存单元值的变化。

 

  0022AH~0022DH是内存空间。

实验任务6:

1.程序源码

assume cd: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对程序汇编连接的截图,以及运行可执行程序task6.exe的运行结果截图

 

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

 实验任务7

1.给出补全的代码。

assume cd:code
code segment
start:
    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 start

因为复制line3~line12的代码,即从开始复制程序,cs:ip指向第一条程序,所以将cs的值赋给段寄存器ds。除最后两条指令外,其余指令长度17h字节,因此循环17h次。

2.使用g命令运行到指定点,使用u命令进行反汇编

 

 

 

posted @ 2021-10-23 21:05  荷月十四  阅读(60)  评论(3编辑  收藏  举报