标签:编码 8086 sp mov pop 命令 ax 执行 调试
任务2:
使用d命令查看生产日期的截图:
使用e命令修改生产日期所在内存单元的截图
查看是否修改成功
结论:不能修改。这类系统地址无法通过软件修改
任务3:
使用e命令修改内存单元的命令
使用f命令批量填充内存单元的命令
任务4:
-a mov ax, 20 mov ds, ax mov ss, ax mov sp, 30 push [0] ; 执行后,寄存器(sp) = 010A push [2] ; 执行后,寄存器(sp) = 010E push [4] ; 执行后,寄存器(sp) = 0112 push [6] ; 执行后,寄存器(sp) = 0116 pop [6] ; 执行后,寄存器(sp) = 011A pop [4] ; 执行后,寄存器(sp) = 011E pop [2] ; 执行后,寄存器(sp) = 0122 pop [0] ; 执行后,寄存器(sp) = 0126
问题1:
指令 mov ss, ax 和 mov sp, 30 执行后,栈顶的逻辑地址是30 物理地址 0106:0030问题2:
汇编指令 push [6] 执行结束, pop [6] 执行之前,使用 d 20:20 2f 查看此时栈空间数据
问题3:
pop [0] 执行结束后, pop [0] 指令执行结束后,使用d命令 d 20:0 7
修改最后四条指令的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7
问题1:
使用T命令执行mov ss,ax时,此时命令并没有暂停,而是接着执行它的下一条mov sp,30指令。
问题2:
根据汇编指令,前三条指令执行后,00220H~0022fH被设置为栈空间。
在ss和sp联合设置栈段时,不响应单步中断,以保证栈段的正确位置。
而且在中断时,会对现场进行保护,cpu先将标志寄存器进栈,在把当前的CS值进栈,最后将IP进栈。
因此出现了其他数据
任务6:
程序源码:
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
使用masm、link对程序汇编链接过程截图,以及,运行可执行程序task6.exe的运行结果截图
在debug中查看task6.exe的程序段前缀PSP的截图
任务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 ax,cs;程序加载到内存时,cs:ip会初始化为程序的首个地址,而作为程序段的段值,ip为0,所以通过ax将cs的值赋值给ds.
mov cx,0017h;通过先在此位置填0测试得出.
(2)使用g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图。
复制成功了
五.实验总结
(1)Debug的T命令在修改ss时,下一条指令也随之执行.
(2)u命令可用于反汇编.方法是u[范围]
(3)t命令可实现控制命令的单步执行
标签:编码,8086,sp,mov,pop,命令,ax,执行,调试 来源: https://www.cnblogs.com/1484683402mx/p/15450361.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。