王爽《汇编语言》(第三版)实验8解析
来源:互联网 发布:人工智能市场趋势 编辑:程序博客网 时间:2024/05/21 15:06
先贴出来代码:
assume cs:codecode segmentmov ax, 4C00Hint 21Hstart:mov ax, 0s:nopnopmov di, offset smov si, offset s2mov ax, cs:[si]mov cs:[di], axs0:jmp short ss1:mov ax, 0int 21Hmov ax, 0s2:jmp short s1nopcode endsend start
这是王爽汇编语言中的实验8的题目,题目问的是是否可以正确返回,答案是可以返回的,下面开始一句一句的解析:
分析的话先从start开始,前面的
mov ax, 0s:nop<span style="white-space:pre"></span>nop下面的语句是 mov di, offsets s,这句话就是得到标号为s处的代码段偏移地址
mov si, offsets s2,这句话就是得到标号为s2处代码段的偏移地址
下面重点分析这条语句:
mov ax, cs:[si]
这句代码的意思是将以cs为段地址,si为偏移地址的代码给ax,而之前的代码使si得到了s2的偏移地址,那么这里的ax就得到了s2处代码的机器码,那么ax按道理来说得到的是:jmp short s1
但是课本之前说过,jmp指令对应的机器码前两位表示的是向前还是向后,后两句代表的是位移(位移=标号处的偏移地址-jmp后第一个字节的偏移地址),所以ax得到的不是
jmp short s1这句代码,而是得到的一个四位(两个字节)的数据,表示的意义是 "向前"的"[s1]-[s2]"
继续:
mov cs:[di], ax
这句代码的意思是说,将ax的数据放到cs:[di]处,之前的代码已经使di得到标号为s的偏移地址,ax也得到了 "向前"的"[s1]-[s2]" 的信息
那么cs:[di]就得到了ax的信息,就是说标号s处将得到ax的信息
继续:
下面就执行到:s0: jmp short s
这句代码表示偏移地址转到标号为s的地方,而现在的s已经不是nop了,已经得到了ax的数据,就是 "向前"的"[s1]-[s2]"
那么执行s处的代码就是执行 "向前"的"[s1]-[s2]"
这样就直接跳到mov ax, 4C00H之前,然后就顺序执行,执行: mov ax, 4C00H
int 21H
这样就可以顺利的返回了
- 王爽《汇编语言》(第三版)实验8解析
- 汇编语言 第三版 王爽 实验四
- 汇编语言 王爽(第三版)实验十一
- 汇编语言 王爽(第三版)实验十三
- 汇编语言 王爽(第三版)实验十五
- 汇编语言 王爽(第三版)实验十六
- 汇编语言 王爽(第三版)实验十七
- 王爽-汇编语言第三版实验7
- 王爽 《汇编语言》第三版 实验9
- 汇编语言 第三版 王爽 实验6 更改大写字母
- 汇编语言 第三版 王爽 实验9 根据材料编程
- 王爽 汇编语言 第三版 实验9 根据材料编程
- 王爽 汇编语言 第三版 实验10 编写子程序
- 王爽 汇编语言 第三版 实验14 访问 CMOS RAM
- 汇编语言 第三版 王爽 实验七 独立完成
- 汇编语言(第三版)实验1-17
- 王爽《汇编语言》实验8
- 汇编语言-实验十四解析
- BLE固件开发--如何获取当前连接状态
- ThreadPoolTaskExecutor的配置使用
- oracle 创建表约束,修改,删除
- Quick Charge技术解析:关于手机快速充电的那些事儿
- linux中添加内核模块
- 王爽《汇编语言》(第三版)实验8解析
- 获取当前系统时间
- 百度百科通过率高歌猛进的技巧
- failed to create java virtual machine
- 搜索引擎怎样判断网页的质量
- 关于金钱与偶像 转载
- Android button靠右侧显示
- DrawChartWithPaint(自定义View)
- 记录一例内存泄漏