街机模拟游戏逆向工程(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.rhkb.cn/news/242639.html

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

相关文章

微服务不死 — 共享变量在策略引擎项目的落地详解

01 背景 1、共享变量的提出 前段时间&#xff0c;来自亚马逊 Prime Video 团队的一个案例研究在开发者社区中掀起了轩然大波。大体是这样一件事&#xff0c;作为一个流媒体平台&#xff0c;Prime Video每天都会向客户提供成千上万的直播流。为了确保客户无缝接收内容&#xff0…

【React】Redux的使用详解

文章目录 Redux的三大原则Redux官方图react-redux使用 1、创建store管理全局状态​ 2、在项目index.js根节点引用 3、 在需要使用redux的页面或者组件中&#xff0c;通过connect高阶组件映射到该组件的props中 redux中异步操作如何使用redux-thunkcombineReducers函数 Re…

MySQL---多表查询综合练习

创建dept表 CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); 添加dept表主键 mysql> alter table dept add primary key(deptno); Query OK, 0 rows affected (0.02 s…

Unity3D学习之UI系统——GUI

文章目录 1. 前言2. 工作原理和主要作用3. 基础控件3.1 重要参数及文本和按钮3.1.1 GUI 共同点3.1.2 文本控件3.1.3 按钮控件 3.2 多选框和单选框3.2.1 多选框3.2.2 单选框3.2.3 输入框3.2.4 拖动条 3.3 图片绘制和框3.3.1 图片3.3.2 框绘制 4 工具栏和选择网格4.1 工具栏4.2 选…

2024年网络安全比赛--内存取证(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.从内存文件中找到异常程序的进程,将进程的名称作为Flag值提交; 2.从内存文件中找到黑客将异常程序迁移后的进程编号,将迁移后的进程编号作为Flag值提交; 3.从内存文件中找到受害者…

【Docker篇】详细讲解容器相关命令

&#x1f38a;专栏【Docker】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f6f8;容器&#x1f339;相关命令&#x1f354;案例⭐创建并运…

【C++】文件操作

文件操作 一、文本文件&#xff08;一&#xff09;写文件读文件 二、二进制文件&#xff08;一&#xff09;写文件&#xff08;二&#xff09;读文件 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放&#xff0c;通过文件可以将数据持久化&#xff…

SQL注入实战:盲注

盲注&#xff1a; 1、当攻击者利用SQL注入漏洞进行攻击时&#xff0c;有时候web应用程序会显示&#xff0c;后端数据库执行SQL查询返回的错误信息&#xff0c;这些信息能帮助进行SQL注入&#xff0c;但更多时候&#xff0c;数据库没有输出数据web页面&#xff0c;这是攻击者会…

【设计模式】责任连模式怎么用?

我将通过一个贴近现实的故事——请假审批流程&#xff0c;带你了解和掌握责任链模式。 什么是责任链模式&#xff1f; 责任链模式是一种行为设计模式&#xff0c;它让你可以避免将请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有处理请求的机会将这个对象连成一条…

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model&#xff08;数据默认是存放在Request域中&#xff09; 与第一种方式其实是一致的 第三种 使用Map集合&#xff08;数据默认是存放在Request域中&#xff09;

力扣刷MySQL-第五弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

Django随笔

关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app&#xff0c;在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中&#xff08;改成中文&#xff09; LA…

linux LPT和COM回路测试(基于python+Qt+C++)

软件UI: 回路治具&#xff08;COMLPT&#xff09;&#xff1a; lpt_test.cpp&#xff08;c 源代码&#xff09;&#xff1a; #include <iostream> #include <fstream> #include <sstream> #include <unistd.h> #include <fcntl.h> #include <…

【cucumber】cluecumber-report-plugin生成测试报告

cluecumber为生成测试报告的第三方插件&#xff0c;可以生成html测报&#xff0c;该测报生成需以本地json测报的生成为基础。 所以需要在测试开始主文件标签CucumberOptions中&#xff0c;写入生成json报告。 2. pom xml文件中加入插件 <!-- 根据 cucumber json文件 美化测…

ckman:非常好用的ClickHouse可视化集群运维工具

概述 什么是ckman ckman&#xff0c;全称是ClickHouse Management Console&#xff0c; 即ClickHouse管理平台。它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&#xff1a;github…

YOLOv8改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)

一、本文介绍 本文给大家带来的改进机制是一种重参数化的卷积模块OREPA,这种重参数化模块非常适合用于二次创新,我们可以将其替换网络中的其它卷积模块可以不影响推理速度的同时让模型学习到更多的特征。OREPA是通过在线卷积重参数化(Online Convolutional Re-parameteriza…

2024最新 8 款电脑数据恢复软件推荐分享

数据恢复是一个涉及从设备硬盘驱动器检索已删除文件的过程。这可能需要存储在工作站、笔记本电脑、移动设备、服务器、相机、闪存驱动器上的数据——任何在独立或镜像/阵列驱动器上存储数据的东西&#xff0c;无论是内部还是外部。 在某些情况下&#xff0c;文件可能被意外或故…

Pytest 测试框架与Allure 测试报告——Allure2测试报告-L3

目录&#xff1a; allure2报告中添加附件-图片 Allure2报告中添加附件Allure2报告中添加附件&#xff08;图片&#xff09;应用场景Allure2报告中添加附件&#xff08;图片&#xff09;-Python代码示例&#xff1a;allure2报告中添加附件-日志 Allure2报告中添加附件&#xff…

GEE:随机森林回归器投票方法的优化与修改

作者:CSDN @ _养乐多_ 在随机森林中,随机生成的每棵决策树都对输入数据进行分类或回归,并产生一个输出。对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。例如,如果有五棵树的分类输出为 [0.1, 0.2, 0.3, 0.1, 0.1],则平均数是0.…

SpringBoot SaToken Filter如用使用ControllerAdvice统一异常拦截

其实所有的Filter都是一样的原理 大致流程: 创建一个自定义Filter, 用于拦截所有异常此Filter正常进行后续Filter调用当调用后续Filter时, 如果发生异常, 则委托给HandlerExceptionResolver进行后续处理即可 以sa-token的SaServletFilter为例 首先注册SaToken的过滤器 pac…