汇编【王爽】实验8、9

news2024/9/24 15:17:02

实验8 分析一个奇怪的程序

  1. 程序从 s t a r t start start入口处开始执行,一个nop指令占一个字节并表示No operation,此处用了两个nop指令的目的是在 s s s处预留两个字节的空间,程序执行mov cs:[di], ax之后 s s s处的两个字节被试图写入jmp short s1,接着程序向下执行jmp short s使得程序跳转回 s s s处开始执行。
  2. jmp short s1到底做了什么:修改IP使其前进十个字节。因为该指令本身的作用是使IP从 s 2 s2 s2跳转到 s 1 s1 s1,即从 s 2 s2 s2处的jmp指令的下一指令nop ( 076 C : 0022 ) (076C:0022) (076C:0022)跳转到 s 1 s1 s1处的mov ax, 0 ( 076 C : 0018 ) (076C:0018) (076C:0018),因为jmp short 标号是依据位移进行转移的指令,而此处位移大小为 0022 H − 0018 H = − 10 D ( F 6 H ) 0022H-0018H =-10D(F6H) 0022H0018H=10D(F6H),所以 s s s处的jmp short s指令的机器码为EBF6(刚好占两个字节,因此可以被正确写入 s s s处)
  3. 执行 s s s处的跳转指令,使得 I P = I P + ( − 10 ) IP = IP+(-10) IP=IP+(10),即向前移动十位,用debug跟踪程序,可以看到向前第十个指令为mov ax, 4c00H ( 000 A H − 0010 H = 0000 H ) (000AH-0010H=0000H) (000AH0010H=0000H),程序从此处开始向下执行,最终可以正确退出
    在这里插入图片描述
    在这里插入图片描述

实验9 根据材料编程

  1. 编写源程序:最开始我试图用mov address,data的形式直接向显存中写入数据,并且比较蠢的一个字符一个字符的输入,但这种形式的mov指令对显存区域似乎并不奏效,实操之后发现显存内容未被修改为给定值,并且其内容还在动态的变化(如果你知道为什么,麻烦评论区告诉我)。之后利用栈存储数据welcome to masm!,利用寄存器 a x ax ax作介质,用mov指令实现内存之间的内容交换,避免了重复手动输入数据
assume cs:codesg

data segment
db 'welcome to masm!'
data ends

codesg segment
start: 
mov ax, data
mov ds, ax
mov ax, 0B800H
mov es, ax

mov bx, 0
mov si, 1824
mov cx, 10H
s0:
mov ah, 82H
mov al, [bx]
mov es:[si], ax
inc bx
add si, 2
loop s0

mov bx, 0 
mov si, 1984
mov cx, 10H
s1:
mov ah, 0A4H
mov al, [bx]
mov es:[si], ax
inc bx
add si, 2
loop s1

mov bx, 0 
mov si, 2144
mov cx, 10H
s2:
mov ah, 11110001B
mov al, [bx]
mov es:[si], ax
inc bx
add si, 2
loop s2

mov ax, 4c00H
int 21H
codesg ends

end start
  1. 最终效果
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】二叉树的基本知识

目录前言一、树1、树的相关概念(1)结点(2)结点的度(3)叶结点(4)分支结点(5)父亲结点(6)子节点(7)树的度&#…

Spring笔记上(基于XML配置)

新年快乐。 文章目录一、Spring概述1. 为什么要用Spring框架?2. Spring介绍二、IOC/DI快速入门1. IOC控制反转2. DI依赖注入三、Bean的配置1. Bean的基础配置2. Bean的别名配置3. Bean的作用范围配置四、Bean的实例化1. 构造方法方式2. 静态工厂方式3. 实例工厂方式…

Java面试题,JVM相关问题

JVM相关问题一 、JDK、JRE、JVM二、内存管理三、GC如何判断对象可以被回收(这是JVM的基础)一 、JDK、JRE、JVM JDK:Java Development Kit【Java开发工具】,提供给Java开发人员来使用的。JRE:Java Runtime Environment…

Solid Edge 放样使用引导曲线

放样用引导曲线的时候被一个错误提示卡了挺长时间——“选来用作路径或横截面的所有边必须连接在一起”,所以记录一下遇到的问题。基础的操作可以去看帮助文件https://docs.sw.siemens.com/zh-CN/doc/246738425/PL20211001099989437.feature_modeling/feat12c&#…

Sprig框架集成(SSM框架) | Sping+SpringMVC+Mybatis

SSM框架 SSM是spingspringMVCmybatis集成的框架:标准的MVC模式,整个系统划分为表现层,controller层,service层,DAO层四层 Spring(业务层) Spring就像是整个项目中装配bean的大工厂,在…

MySQL server options

介绍 MySQL安装部署时,经常会关注一些参数是否合理。其实这些参数分为两类型。环境中调整的绝大部分是引擎层方面的。服务层参数,就是mysqld服务启动时的参数,如:datadir,port,socket之类的的,…

多重背包问题——单调队列优化

一、多重背包问题 我们在之前的文章中曾经讲解过多重背包问题,当时我们讲解了两种方法,一种方法就是三重循环,这种方法最为朴素好想。但是这种方法的时间复杂度非常高,后来我们想到了二进制优化的方式。那么今天我们将再介绍一种…

Java实习------Java基础2

基础语法基本数据类型 熟悉Java有哪些数据类型定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。Java语言提供了八种基本类型。六种数字类型(四个整数型,两个…

18. 循环语句while,for语句的详解

python 中的循环语句只有 for 和 while两种&#xff0c;没有do…while循环&#xff0c;这与c/c是不同的。 1. while循环 (1) 语法格式 while <condition>&#xff1a;...# demo, 使用while循环累加1-100的和。 sum 0 counter 1 while counter < 100:sum counterco…

Java 23种设计模式(4.创建者模式-建造者模式)

代码分析 结构图 代码 public class Product {//产品类,多个部件构成List <String> parts new ArrayList<>();public void Add(String part){parts.add(part);}public void show(){System.out.println("creat parts");for(String part:parts){System…

第十届蓝桥杯省赛 C++ B/C组 - 等差数列

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;等差数列 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大家…

STL分析(九 适配器)

容器适配器&#xff1a;stack&#xff0c;queue stack和queue内含一个deque 函数适配器 binder2nd绑定第二参数 调用的过程中&#xff0c;算法count_if函数读取了迭代器头尾指针后&#xff0c;读取第三个参数为functor object即仿函数。因此在其参数为bind2nd(less< int&g…

LeetCode220123_140、117. 填充每个节点的下一个右侧节点指针 II

给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL。初始状态下&#xff0c;所有 next 指针都被设置为 NULL。进阶…

双指针思想,c语言

问题导入 对一个给定的自然数M&#xff0c;求出所有的连续的自然数段&#xff0c;这些连续的自然数段中的全部数之和为M。 例如&#xff1a;1998 1999 2000 2001 2002 10000&#xff0c;所以从1998到2002的一个自然数段为M 10000的一个解。 输入格式 第一行&#xff0…

JQuery总结(三)

jQuery 事件 on可以同时绑定多个事件&#xff0c;并且动态添加的元素也会自动添加事件 自动触发事件&#xff1a; 案例1&#xff1a; <style>div{width: 100px;height: 200px;background-color: violet;transition: all .5s;}.current{width: 200px;height: 100px;ba…

ARP渗透与攻防(三)之流量分析

ARP攻击-流量分析 ARP渗透与攻防(一)之ARP原理 ARP渗透与攻防(二)之断网攻击 系列文章 1.环境准备 1.kali作为攻击机 2.win10作为靶机 IP地址&#xff1a;192.168.110.11 3.网关 IP地址&#xff1a;192.168.110.1 2.kali数据包转发 出于安全考虑&#xff0c;Linux系统默…

使用Py6S计算瑞利反射率教程

1、前言那么&#xff0c;首先&#xff0c;什么是瑞利反射率&#xff1f; 好吧&#xff0c;这是由大气中的瑞利散射引起的反射率&#xff08;在大气层顶部测量&#xff09;。 这是大气中气体分子对光的波长依赖性散射——这是光穿过大气时不可避免的结果。所以&#xff0c;关于如…

【2022年度总结与2023展望】---22年故事不长,且听我来讲

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f4e3;系列专栏&#xff1a;故事 文章目录前言一、高考前及高考后的暑假二、大一上的生活2.1 感受校园美景2.2 进入ACM实验室2.3 比赛和比赛经历三、那些帮助过我的人…

AlmaLinux 9 安装Oracle GraalVM Enterprise Edition 22.3.x

今天我们尝试一下在AlmaLinux 9 安装Oracle GraalVM Enterprise Edition 22.3.x。 GraalVM Enterprise 22是包含新功能的最新版本&#xff0c;但不是Long-Term-Support (LTS) 版本。 注意&#xff1a;下载Oracle GraalVM Enterprise Edition需要有Oracle账户&#xff0c;如果没…

六、pyhon操作mysql篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频&#xff1a;https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 1. 下载pymysql 2. 新建数据库 3. mysql服务器版本查询 4. 执行非查询性质的SQL 5. 执行查询性质的sql ​​​​​​​6. 执行新增sql 1. 下载pymysql 右下角点击版本 选择解释器设…