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到复制代码长度这一段内存空间的截图。