中颖4位MCU的减法汇编指令

1, SUB  M

执行动作: M - A -> A, 如果M-A的过程中没有产生借位,则CY= 1,如果产生了借位,则CY= 0.

其中,A为累加器。

2, SBI  M,  I

执行动作:M - I -> A, 如果M - I的过程中没有产生借位,则CY= 1,如果产生了借位,则CY= 0.

3, SBC  M

执行动作:M - A - (!CY) -> A, 如果M - A - (!CY)的过程中没有产生借位,则CY = 1, 如果产生了借位,则CY = 0.

SBC比较奇特,举几个例子:

1)

CY = 0的前提下,

LDI   70H,   08H
LDI   71H,    07H
SBC   70H

结果为A = 0,CY= 1

2)

CY = 1的前提下,

LDI   70H,   08H
LDI   71H,    07H
SBC   70H

结果为A = 1,CY= 1

3)

CY = 0的前提下,

LDI   70H,   06H
LDI   71H,    07H
SBC   70H

结果为A = E,CY= 0

4)

CY = 1的前提下,

LDI   70H,   06H
LDI   71H,    07H
SBC   70H

结果为A = F,CY= 0

5)

CY = 0的前提下,

LDI   70H,   07H
LDI   71H,    07H
SBC   70H

结果为A = F,CY= 0

6)

CY = 1的前提下,

LDI   70H,   07H
LDI   71H,    07H
SBC   70H

结果为A = 0,CY= 1

SBC的行为为什么要设计为这样,暂时没有明白,如有知道的朋友,请赐教。

时间: 2024-12-09 21:15:14

中颖4位MCU的减法汇编指令的相关文章

汇编笔记二【32位通用寄存器 以及 常用汇编指令】

一.32位通用寄存器(EAX,ECX,EDX,EBP,ESP,EBP,ESI,EDI) 二.十六位通用寄存器(AX,CX,DX,BX,SP,BP,SI,DI) 三.八位通用寄存器(AH,AL,CH,CL,DH,DL,BH,BL) 四.32位,16位,8位寄存器之间的关系 1.寄存器都是高位在前,低位在后. 2.都是包含关系,32位寄存器之中包含了16位寄存器,16位寄存器之中包含了8位寄存器. 关系如下: 五.32位的含义 一位只能放0或1,32位就意味着能放32个0或1. 所以32位最小取值为

64位和32位的寄存器和汇编的比较

转载于http://blog.csdn.net/qq_29343201/article/details/51278798 64位(新增)汇编指令的不同 mov指令和push pop扩展了movq系列的mov和pushq以及popq用来操作quad word. 注意:movabsq不是32位的扩展,是纯新增的指令.用来将一个64位的字面值直接存到一个64位寄存器中.因为movq只能将32位的值存入,所以新增了这样一条指令. 顺带提一个小问题,64位的汇编代码在ret之前可能会加一句rep,这里的r

ARM汇编指令

ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转.Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用

常用ARM汇编指令

一面学习,一面总结,一面记录. 下面是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转. Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用M

实验1 —— 用机器指令和汇编指令编程(2)

debug 指令补充 在执行 d 命令时可以带地址参数 (段地址: 偏移地址),其中的段地址会先被送到 ds 寄存器,再交给处理器. 因此,d 命令也可以这样用: d SR:offset (SR指段寄存器) 例如: -r ds :1000 -d ds:0 ;查看从 1000:0 开始的内存区间中的内容 -r ds :1000 -d ds:10 18 ;查看 1000:10 ~ 1000:18 中的内容 -d cs:0 ;查看当前代码段中的指令代码 -d ss:0 ;查看当前栈段中的内容 当然 e

AT&T汇编指令介绍

linux中使用的AT&T格式的汇编指令,所以总结一下一些比较重要的指令. 1.寻址模式 有多种不同的寻址模式,允许不同形式的存储器引用.我们用符号Ea表示任意寄存器,R[Ea]表示它的值.M[addr]表示addr处地址的值. 题目: 答案:0x100,0xAB,0x108,0xFF,0x11,0x12,0xFF,0x11. 2.leal指令 加载有效地址指令其实是movl指令的变形.它的指令式是从存储器读数据到寄存器,但实际上它根本没有引用存储器.它的第一个操作数看上去是一个存储器引用,但该

Android 图解逆向工程中ARM常用汇编指令(一)

我们走得太快,灵魂都跟不上了. 微小的幸福就在身边,容易满足就是天堂. 在逆向和爆破中我们经常会在IDA中接触到汇编,一般做安卓的不会太了解VB回编等,不太了解的同学可以先查看上篇文章<Android ARM常用的汇编指令合集> 再来继续我们的学习,我们先来看张图. 这个view里面有 PUSH/LDR/SUB/MOVS/BLX/SUBS/BEQ/CMP ,这些差不多都是常见的,不过也不需要看得懂,理解这个指令即可,接下来我们就来分析下这些指令分别有什么作用吧. 先引入 概念性 东西,免得大家

汇编--常用汇编指令与标志位关系

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

[zhuan]arm中的汇编指令

http://blog.csdn.net/qqliyunpeng/article/details/45116615 一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是 “以下是代码段”, “以下是初始化数据段”, “以下是未初始化数据段”. 2.".global" 定义一个全局符号,通常是为ld使用.比如经常看到的 .global _start 3.".