《汇编语言》第3版 (王爽)第10章检测点解析

第10章 检测点


检测点10.1:补全程序,实现从内存1000:0000处开始执行指令。
解析: 我们知道retf指令是用栈中的数据,同时修改CS和IP寄存器中的内容,实现远转移,而且是先出栈的数据放入IP中,后出栈的数据放入CS中,所以既然要从1000:0000处开始执行指令,则只需要将1000先入栈,再将0000入栈,那么出栈时就会先将0000出栈放入IP中,再将1000出栈放入CS中。

assume cs:codestack segmentdb 16 dup(0)
stack endscode segmentstart:mov ax,stackmov ss,axmov sp,16mov ax,1000H ;先将1000H入栈push axmov ax,0     ;再将0000H入栈push axretf
code ends
end start

将上述程序在DOS中运行后,效果如下:
执行RETF前,CS:IP = 076B:0010,执行RETF后,CS:IP = 1000:0000。
在这里插入图片描述
检测点10.2: 下面的程序执行后,AX中的数值为多少?
在这里插入图片描述
解析: 我们知道call指令会将当前的IP压栈后,转到标号出执行指令,但是需要注意的是压栈的是call指令的下一条指令的IP,所以上面程序执行后,AX中的数据为6。

检测点10.3: 下面的程序执行后,ax中的数值为多少?
在这里插入图片描述
解析: 我们知道call far ptr指令实现的是段间转移,会将CS中的段地址和IP中的偏移地址依次入栈,所以上面程序执行完call指令后,会先将段地址1000入栈,再将偏移地址8入栈(注意是下一条指令的地址),然后跳转到s执行,根据栈"先入后出"的原则,执行完pop ax后会先将8取出放入AX中,然后执行add ax,ax后,AX = 8+8 = 16(10H),再将1000H出栈放入BX中,执行完add ax,bx后,AX = 1000H + 10H = 1010H,所以执行后,AX中的数值为1010H

检测点10.4: 下面的程序执行后,ax中的数值为多少?
在这里插入图片描述
解析: 首先将6放入AX中,此时AX = 6,然后将IP中的偏移地址入栈(5入栈)再跳转到偏移地址为6的地址执行mov bp,sp ,将SP中的内容放入bp中,最后执行add ax,[bp],而段地址默认在SS中,即此时相当于 AX = AX + ((ss)*16+(sp)) = 6 + 5 = 11 = BH

检测点10.5: (1)下面的程序执行后,ax中的数值为多少?(注意:用call指令的原理来分析,不要在Debug中单步跟踪来验证你的结论。对于此程序,在Debug中单步跟踪的结果,不能代表CPU的实际执行结果。)

assume cs:code
stack segmentdw 8 dup(0)
stack ends
code segmentstart:mov ax,stack  ;将栈的段地址放入AX中mov ss,ax     ;将AX中的内容放入SS中mov sp,16     ;设置栈顶指针mov ds,ax     ;将AX中的内容放入DS中,到此AX中的内容并未改变,所以还是栈的段地址mov ax,0      ;此时AX中为0call word ptr ds:[0EH]   ;先将下一跳指令的IP入栈,然后跳转到ds:[0EH]内存单元中的地址,由于DS也指向栈段,并且刚刚将IP入栈了,所以此时还是跳转到下一跳指令inc ax        inc axinc ax        ;执行完后AX = 3mov ax,4c00hint 21h
code ends
end start

(2)下面的程序执行后,ax和bx中的数值为多少?

assume cs:code
data segmentdw 8 dup(0)
data ends
code segmentstart:mov ax,data  ;将数据段的段地址放入AX中mov ss,ax    ;将AX中的内容放入SS中mov sp,16    ;设置栈顶指针mov word ptr ss:[0],offset s   ;将s处的偏移地址放如ss:[0]处mov ss:[2],cs ;将当前CS中的内容放入ss:[2]中call dword ptr ss:[0]   ;将下一条指令的CS:IP压栈,然后跳转到以ss:[0]内存单元中数据为地址的地方,即s处nops:mov ax,offset s    ;将s的偏移地址放入AX中sub ax,ss:[0cH]    ;由于ss:[0cH]中存放的刚刚入栈的IP即nop指令的IP,而AX中存放的又是s处的IP,二者相差1(nop占一个字节),所以相减后,AX = 1mov bx,cs          ;将CS中的内容放入BX中sub bx,ss:[0eH]    ;由于ss:[0eH]中存放的是刚刚入栈的CS,所以相减为0 BX = 0mov ax,4c00hint 21h
code ends
end start

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/519093.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java-springboot 源码 01

01.springboot 是一个启动器 先安装maven&#xff0c;按照网上的流程来。主要是安装完成后&#xff0c;要修改conf目录下的setting.xml文件。 添加&#xff1a;阿里云镜像 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>ali…

unity-urp:视野雾

问题背景 恐怖游戏在黑夜或者某些场景下&#xff0c;需要用雾或者黑暗遮盖视野&#xff0c;搭建游戏氛围 效果 场景中&#xff0c;雾会遮挡场景和怪物&#xff0c;但是在玩家视野内雾会消散&#xff0c;距离玩家越近雾越薄。 当前是第三人称视角&#xff0c;但是可以轻松的…

2022年浙江省职业院校技能大赛信息安全管理与评估 理论题答案

培训、环境、资料 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急响应环境 成功押题成功&#xff0c;知识点、考点、内容完美还原大赛赛题环境&#xff0c…

博客系统测试

文章目录 1.项目背景介绍2.功能介绍3.手动测试3.1编写测试用例3.2项目测试3.2.1登录测试3.2.2查看详情页面3.2.3编辑页面3.2.4删除博客3.2.5注销用户 大家好&#xff0c;我是晓星航。今天为大家带来的是 博客系统测试 相关的讲解&#xff01;&#x1f600; 1.项目背景介绍 项…

2024.3.7 FreeRTOS 作业

思维导图 练习题 1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 //打开定时器3的通道3&#xff0c;并且设置为PWM功能HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1…

标准库中的String类 String(C++)【4】

文章目录 String常用的接口&#xff08;黑框标记的是常用接口&#xff09;字符串的运算c_str:data:get_allocator:find:substr:rfind:find_first_of:find_last_of:find_first_not_of:find_first_not_of: String常用的接口&#xff08;黑框标记的是常用接口&#xff09; 字符串…

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折

同志们&#xff0c;云服务器行业大内圈&#xff0c;腾讯云各个活动都已开始卷中卷&#xff0c;我整理一下各个活动&#xff0c;加油冲了 【腾讯云】 爆款2核2G3M云服务器首年 61元&#xff0c;叠加红包再享折上折&#xff0c;最低只要51 【腾讯云】多款热门AI产品新春巨惠&…

在 SpringBoot3 中使用 Mybatis-Plus 报错

在 SpringBoot3 中使用 Mybatis-Plus 报错 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required Caused by: java.lang.IllegalArgumentException: Property sqlSessionFactory or sqlSessionTemplate are requiredat org.springframework.util.Assert.no…

ios xcode 15 PrivacyInfo.xcprivacy 隐私清单

1.需要升级mac os系统到13 兼容 xcode 15.1 2.升级mac os系统到14 兼容 xcode 15.3 3.选择 New File 4.直接搜索 privacy 能看到有个App Privacy 5.右击Add Row 7.直接选 Label Types 8.选中继续添加就能添加你的隐私清单了 苹果官网文档Describing data use in privacy man…

亚马逊使用什么国外代理IP?跨境电商代理IP推荐

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

SpringBoot【问题 05】PostgreSQL数据库启用SSL后使用默认配置进行数据库连接(Navicat工具与Java程序)

官网SSL说明&#xff1a;https://www.postgresql.org/docs/9.1/libpq-ssl.html 1.配置 1.1 文件 使用SSL需要的4个文件&#xff0c;名称要一致&#xff1a; 客户端密钥&#xff1a;postgresql.keyJava客户端密钥&#xff1a;postgresql.pk8客户端证书&#xff1a;postgresq…

每日OJ题_牛客_井字棋

目录 牛客_井字棋 解析代码 牛客_井字棋 井字棋__牛客网 解析代码 class Board {public:bool checkWon(vector<vector<int> > board) {// 当前玩家是否胜出&#xff01;&#xff01;&#xff01;不是有玩家胜出int row board.size(), col board[0].size();fo…