街机模拟游戏逆向工程(HACKROM)教程:[14]68K汇编-标志寄存器

在M68K中,有许多条件分支指令,和jmp指令一样也会修改PC达到程序跳转或分支的目的,不过这些会根据一些情况或状态来选择是否跳转。而在M68K中,有一个特别的寄存器来标记这些情况。

CCR(状态标志寄存器)

CCR寄存器是用来保存一些对应的状态数据,这些状态可以帮我们了解到比如:数据1和数据2是否相等,数据1是否大于数据2,数据值是否为负 等等情况。而保存这些状态的目的是可以让M68K程序能够在不同的状态下执行不同的动作。

ccr寄存器的大小为1个字节(8比特),我们在观察该寄存器时,通常是在二进制的状态下去观察,如:

    - - - X N Z V C0 0 0 0 0 0 0 0

可以看到,m68k 有5个状态标志 (flag):X N Z V C,这五个状态分别有特殊的作用

C 	- Carry		(进位)
V 	- oVerflow 	(溢出)
Z 	- Zero 		(零结果)
N 	- Negative 	(负结果)
X 	- eXtended 	(扩展)

进位(carry)

进位标志的作用就是比如当两个数据相加发生了进位时,该标志位会被设置为1:

addi.b     #$05, d0

我们假设d0中的数据为$01,那么该指令的执行结果为$05 + $01 = $06,此时,并未发生进位,所以,在这状态下,进位标志位会被设为0。

那当我们假设d0中的数据为$FF,这时指令的执行结果为$05 + $FF = $104,这时,因为该指令的操作长度为单字节,所以这个结果只有$04会被保存到d0寄存器,而$104中的1因为超出了单字节范围,会被记录到进位标志位。此时,进位标志位会被设为1。

溢出(overflow)

要理解溢出,我们先要了解 无符号数 和 有符号数

无符号数:

在无符号数中,我们的数值没有正负的区别,所有数值都可以认为是正数,比如:

        单字节长度:最小值为$00,最大值为$FF。

        双字节长度:最小值为$0000,最大值为$FFFF。

        四字节长度:最小值为$00000000,最大值为$FFFFFFFF。

而这些数,就是无符号数,就是从最小值到最大值的正数。

有符号数:

在有符号数中,我们在数值中加入了正负符号,比如:

        单字节长度:$00-$7F为正数,$80-$FF为负数

        双字节长度:$0000-$7FFF为正数,$8000-$FFFF为负数

        四字节长度:$00000000-$7FFFFFFF,$80000000-$FFFFFFFF为负数

需要得到溢出状态,我们需要把数值当作有符号数,比如:当两个数值相加,得到的值为负数时的情况下就会把溢出状态标志设置为1。因为在数学上看来正数 + 正数 = 负数是不合逻辑的,所以M68K把这种情况解释为溢出。同样的情况还有比如负数 + 负数 = 正数,在这个状态下,也会把溢出状态标志设置为1。

零结果(Zero)

零结果比较容易理解,就是当计算的结果为零时,该状态标志就会被设置为1。

比如:

    addi.b  #$0,d0

如果d0 = $0,那么,计算的结果为$0 + $0 = $0,此时,该状态标志会被设置为1

    subi.b  #$5,d1

如果d1 = $5,计算的结果为 $5 - $5 = $0,此时,该状态标志会被设置为1

负结果 (Negative)

该状态也十分容易理解,就是当计算结果为负时,该状态标志就会被设置为1

扩展 (Extended)

该标志位和进位 (C) 状态标志一样,它会在进位发生的时候也被设置,并不是所有的修改进位状态标志的指令都会修改扩展状态标志,当你使用一条同时修改进位和扩展状态标志的指令之后,再去使用一条只会修改进位状态标志的指令,这时扩展 (X) 状态标志就会保留之前的那次进位的状态。

我们需要知道,并非用于计算的指令才能改变CCR寄存器,在M68K中,大部份指令都可以改变CCR状态,我们可以在指令说明中看到该指令可以改变哪些标志位状态。比如:

MOVE    Move Data from Source to Destination 传递数据(原操作数->目的操作数)
    运算:    原操作数 置入 目的操作数
    语法:    MOVE <ea>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。

可以看到move这个指令可以在什么情况下对哪些标志位产生影响。

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

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

相关文章

微前端-无界wujie

无界微前端方案基于 webcomponent 容器 iframe 沙箱&#xff0c;能够完善的解决适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户的核心诉求。 主项目安装无界 vue2项目&#xff1a;npm i wujie-vue2 -S vue3项目…

HttpServletRequest getHeader、getHeaders、getIntHeader、getDateHeader区别

request.getHeader(“name”)&#xff1a; 获取请求头中指定名称的单个值&#xff0c;多个值时通常是返回最先出现的那个值 String contentLength request.getHeader("Content-Length"); request.getHeaders(“name”)&#xff1a; 获取请求头中所有具有指定名称…

77. 组合 - 力扣(LeetCode)

题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 输入示例 n 4, k 2输出示例 [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]解题思路 我们使用回溯、深度优先遍历的思想&#xff0c;我们使用一个栈 path…

Kotlin的数据类

引言 我们在做项目中涉及到各种数据类的处理&#xff0c;很多很杂乱。难免一个人的知识点有盲点&#xff0c;所以想着做个整理。 定义 在平时的使用中&#xff0c;我们会用到一些类来保持一些数据或状态&#xff0c;我们习惯上成为bean或者entity&#xff0c;也有的定义为mod…

SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心

目录 1. OAuth2.0 简介 2. 代码搭建 2.1 认证中心&#xff08;8080端口&#xff09; 2.2 资源服务中心&#xff08;8081端口&#xff09; 3. 测试结果 1. OAuth2.0 简介 OAuth 2.0&#xff08;开放授权 2.0&#xff09;是一个开放标准&#xff0c;用于授权第三方应用程序…

【笔记】Helm-3 主题-13 Helm v2迁移到 v3

Helm v2 迁移到 v3 该指南介绍如何将Helm v2迁移到v3.Helm v2需要被安装且在一个或多个集群中管理版本。 Helm 3变化概述 Helm 2 to 3完整的变化列表在FAQ部分。以下是用户在迁移之前应该要注意的一些改变的概述&#xff1a; Helm | Docs 1.移除了Tiller&#xff1a; 1、用…

Leetcode的AC指南 —— 栈与队列:225.用队列实现栈

摘要&#xff1a; **Leetcode的AC指南 —— 栈与队列&#xff1a;225.用队列实现栈 **。题目介绍&#xff1a;请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 …

简单了解AJAX

文章目录 1、什么是AJAX2、AJAX快速入门3、Axios异步框架3.1、Axios 快速入门3.2、Axios 请求方式别名 1、什么是AJAX 概念&#xff1a;AJAX(Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通…

图卷积GCN实战基于网络结构图的网络表示学习实战

下面的是数据&#xff1a; from,to,cost 73,5,352.6 5,154,347.2 154,263,392.9 263,56,440.8 56,96,374.6 96,42,378.1 42,58,364.6 58,95,476.8 95,72,480.1 72,271,419.5 271,68,251.1 134,107,344.0 107,130,862.1 130,129,482.5 227,167,1425.7 167,298,415.7 298,209,42…

GPT属于AI,是LLM的一种实现

GPT&#xff08;Generative Pre-trained Transformer&#xff09;作为一种创新的语言模型&#xff0c;既属于人工智能&#xff08;AI&#xff09;的一部分&#xff0c;也是大规模语言模型&#xff08;LLM&#xff09;的一种实现。本文将探讨GPT在AI和LLM领域的重要性和影响。 …

kafka入门(十):副本数据同步

副本 副本&#xff08;Replica&#xff09;&#xff0c;指的是分布式系统对数据和服务提供的一种冗余方式。 Kafka通过多副本机制实现故障自动转移&#xff0c;在Kafka集群中某个broker节点失效的情况下仍然保证服务可用。 失效副本 在ISR集合之外&#xff0c;也就是处于同…

js监听返回当前页面的方法

要监听用户返回当前页面的操作&#xff0c;可以使用JavaScript中的window.onpopstate事件。这个事件会在浏览器的历史记录发生变化时被触发&#xff0c;其中包括用户点击了浏览器的后退按钮或者通过编程方式调用了history.back()方法。 以下是一个简单的示例代码&#xff0c;演…

PG DBA培训25:PostgreSQL性能分析与优化调整

本课程由风哥发布的基于PostgreSQL数据库的系列课程&#xff0c;本课程属于PostgreSQL Performance analysis and adjustment&#xff0c;学完本课程可以掌握PostgreSQL优化概述与优化方案&#xff0c;PostgreSQL操作系统层优化调整与建议&#xff0c;PostgreSQL存储系统层优化…

Unity3D学习之Unity基础——3D数学

文章目录 1. 前言2 Mathf和Math基础2.1 一般用于只计算一次的函数2.1.1 PI Π PI2.1.2 取绝对值 Abs2.1.3 向上取整 CeilToInt2.1.4 向下取整 FloorToInt2.1.5 钳制函数 Clamp2.1.6 获取最大值 Max2.1.7 获取最小值 Min2.1.8 一个数的n次幂 Pow2.1.9 四舍五入 RoundToInt2.1.10…

腾讯云建站教程,三种方式,随意选

腾讯云怎么建站&#xff1f;使用腾讯云搭建网站有三种方式&#xff0c;可以直接购买腾讯云建站服务如网站建设和CloudPages&#xff0c;也可以购买腾讯云服务器&#xff0c;然后使用开源程序搭建网站。腾讯云百科txybk.com分享腾讯云建站教程&#xff1a; 1、网站建设&#xf…

Spring Boot实现统一异常处理的技术解析

引言 在软件开发过程中&#xff0c;异常处理是非常重要的一环。一个好的异常处理机制可以帮助我们更好地定位问题&#xff0c;提高代码的可维护性和稳定性。Spring Boot作为一款轻量级的Java开发框架&#xff0c;提供了一种简单而高效的方式来实现统一异常处理。本文将详细介绍…

springboot 3 + mysql8 + flyway 数据库版本管理

1、flyway flyway官方文档地址&#xff1a;https://documentation.red-gate.com/fd 对于不怎么看文档的我来说&#xff1a; 1&#xff09;flyway是个管理数据库版本的工具&#xff0c;可以对不同环境的sql进行迁移操作。 2&#xff09;优点&#xff1a;初始化、后期数据的管理…

java使用jsch处理软链接判断是否文件夹

前言 这一次主要是碰到一个问题。因为使用jsch去读取文件的时候&#xff0c;有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹&#xff1f;因为他没有提供可以直接读取的方法&#xff0c;用权限信息去判断…

【异常】SecurityException: JCE cannot authenticate the provider BC

升级JDK21出现该异常 JCRCaused by: java.util.jar.JarException: jar:file:/app//service.jar!/BOOT-INF/lib/bcprov-jdk14-138.jar!/ has unsigned entries - org/bouncycastle/LICENSE.class 解决方案 排除 bcprov-jdk14 依赖 可以通过maven插件去查找<dependency>…

Nomogram文献分析:提取数据

前言 今天教大家如何分析Nomogram类型的文章&#xff0c;并使用我们开发的系统零代码提取数据。 系统地址&#xff1a;https://clinicaldata.fun/ 要分析的文章&#xff1a;https://pubmed.ncbi.nlm.nih.gov/36504658/ 。这是一篇典型的mimic-iii数据分析的套路&#xff0c;…