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

news/2024/4/13 12:26:05/文章来源:https://blog.csdn.net/qq_43276544/article/details/136536779

第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.luyixian.cn/news_show_997157.aspx

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

相关文章

IPSEC VPN 网关模式实验

要求:FW1与FW3建立IPSEC通道,保证10.0.2.0/24网段能访问192.168.1.0/24网段 因为FW1与FW3都处于边界,所以使用网关部署模式来建立IPSEC VPN FW1 这里选择主模式跟隧道模式 FW3与FW1配置类似,与FW1的源目地址反过来,…

[Unity实战]使用NavMeshAgent做玩家移动

其实除了Character Controller, Rigidbody,我们还可以使用NavMeshAgent去做。这么做的好处是能避免玩家去莫名其妙的地方(毕竟基于烘焙过的导航网格),一般常见于元宇宙应用和mmo。 根据Unity手册,NavMeshAgent 也有和…

STM32 (1)

1.基本信息 stm32是由ST公司生产的一种32位微控制器(单片机)。 1.1 各种型号 stm32是32位单片机的总称,有多种不同的系列。 32即用32个比特位表示一个地址,寻址范围:0x00000000 --0xffffffff (4GB) 1.2 存储密度 …

网络编程作业day6

数据库操作的增、删、改完成 #include <myhead.h>//查询的回调函数 int callback(void* data,int count,char** argv, char** columnName) {//count是字段数//argv是字段内容//columnName是字段名称for(int i0;i<count;i) {printf("%s%s\n", columnName[…

【unity实战】事件(Event)的基本实战使用

文章目录 最终效果前言一、素材二、角色金币交互1. 拾取金币2. 显示金币数UI 完结 最终效果 前言 之前我们介绍过委托的用法&#xff0c;具体可以跳转&#xff1a;【unity小技巧】委托&#xff08;Delegate&#xff09;的基础使用和介绍 这期来讲讲事件&#xff0c;使用你会发…

Java线程状态解析:多线程编程指南

&#x1f31f; 欢迎来到 我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知, 分享知识 !&#x1f4ab; 本文目录 &#x1f31f;1. 引言&#x1f31f;2. Java线程的生命周期&#x1f4a1;2.1 <font color "skyblue">新建&#xff08;New&#xff09;&…

网络安全-appcms-master

一、环境 gethub上面自己找appcms-master 二、分析一下源码以及闯关思路 首先是有一个函数循环以及函数过滤&#xff0c;我们的post会将我们所传的所有val值去进行一个循环&#xff0c;之后通过htmlspecialchars这个函数进行过滤和转换所以val值不能通过单双引号闭合注入的方…

HarmonyOS NEXT应用开发案例——全屏登录页面

全屏登录页面 介绍 本例介绍各种应用登录页面。 全屏登录页面&#xff1a;在主页面点击跳转到全屏登录页后&#xff0c;显示全屏模态页面&#xff0c;全屏模态页面从下方滑出并覆盖整个屏幕&#xff0c;模态页面内容自定义&#xff0c;此处分为默认一键登录方式和其他登录方…

ospf虚链路实验简述

1、ospf虚链路实验简述 ospf虚链路配置 为解决普通区域不在骨干区域旁&#xff0c;通过配置Vlink-peer实现不同区域网络设备之间建立逻辑上的连接。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 ip add 200.200.200.200 32 quit int e0/0/…

蓝桥杯物联网竞赛_STM32L071_11_知识体系的查漏与补缺

太久没学单片机了&#xff0c;再重新过一遍查漏补缺&#xff0c;对其中之前没怎么在意的&#xff0c;而现在又发觉的问题进行再分析与补充 1. debug serial wire是干什么用的 这个东西我勾选不勾选都对我的程序没有什么影响&#xff0c;我很好奇是干什么用的&#xff0c;网上查…

什么样的项目适合Web自动化测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

好物周刊#43:设计素材下载

https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. frp 一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c…

浅谈Linux进程隐藏

浅谈Linux进程隐藏 文章目录 浅谈Linux进程隐藏前言环境变量的绕过常用的命令在哪里环境变量的调用前置知识的了解Netstat伪装怎么去甄别 LD_PRELOAD简单实例check.c重载函数设置LD_PERLOAD删除环境变量LD_PERLOAD PS的隐藏readdir函数如何HOOK编译并验证 LD_PRELOAD的其他利用…

【java】后序遍历二叉树

采用递归方式实现 节点类 public class Node {private int value;//父节点private Node fNode;//左节点private Node left;//右节点private Node right;//是否已经打印过private boolean sign false;public Node() {}public boolean isSign() {return sign;}public void setS…

【Leetcode每日一刷】数组|704. 二分查找、27. 移除元素

力扣每日刷题 一、704. 二分查找1.1、题目1.2、解题思路1.3、代码实现——C1.4、 总结&易错 二、27. 移除元素2.1&#xff1a;题目2.2、解题思路2.3、代码实现——C1.4、 总结&易错 一、704. 二分查找 1.1、题目 704. 二分查找 1.2、解题思路 题型&#xff1a;数组…

每日五道java面试题之springMVC篇(一)

目录&#xff1a; 第一题. 什么是Spring MVC&#xff1f;简单介绍下你对Spring MVC的理解&#xff1f;第二题. Spring MVC的优点第三题. Spring MVC的主要组件&#xff1f;第四题. 什么是DispatcherServlet?第五题. 什么是Spring MVC框架的控制器&#xff1f; 第一题. 什么是S…

链路负载均衡之全局选路策略

一、全局选路策略概念 当到达目的网络有多条等价路由或者缺省路由时&#xff0c;FW通过不同的智能选路方式动态选择最优链路。 二、全局选路策略的智能选路方式 为了满足不同的需求&#xff0c;华为FW支持四种智能选路方式&#xff0c;管理员可以根据设备和网络的实际情况进…

贪心 Leetcode 763 划分字母区间

划分字母区间 Leetcode 763 学习记录自代码随想录 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返…

JavaEE之volatile关键字

一.内存可见性问题 什么是内存可见性问题 计算机运行的程序/代码&#xff0c;往往需要访问数据。这些数据往往存在于内存中。 cup使用此变量时&#xff0c;就会把内存中的数据先读出来&#xff0c;加载到cpu寄存器中&#xff0c;再去参与运算。 但是&#xff0c;关键是cpu读…

Stable Diffusion V3测评

1.引言 3月5号&#xff0c;Stability AI发布了介绍Stable Diffusion V3的研究论文&#xff0c;链接地址&#xff1a;戳我 这是目前他们发布的最先进、功能最强大的图像生成器&#xff0c;与一年多前发布的令人印象深刻的 Stable Diffusion V2.1 相比有了大幅升级。SD3所带来的…