Intel8086处理器-通用寄存器之AX/BX/CX/DX

2024-06-13 12:38

本文主要是介绍Intel8086处理器-通用寄存器之AX/BX/CX/DX,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文的代码在Visual Studio 2019下完成

这4个寄存器都是16位寄存器,他们都可以随心所欲的使用,但是,原则上还是有一些约定俗成的用途的,所以我们在使用的时候也应该尽可能的按照这些约定去使用,大致如下

一:AX寄存器
AX是16位寄存器,由AH+AL两个8位寄存器组成

(1)用于数据中转:高级语言反汇编中CPU通常使用ax进行中转数据,比如要往ds寄存器中放数据的话,不可以mov ds,0001H这样写,而是应该先mov ax,0001H,然后再mov ds,ax

(2)作为MUL指令默认使用:当使用MUL指令两个数相乘的时候,其中一个数必定在AX寄存器中,详见MUL指令

一:BX寄存器
BX是16位寄存器,由BH+BL两个8位寄存器组成

高级语言反汇编中CPU通常使用bx寄存器来存放偏移地址,注意,使用该寄存器存放偏移地址的时候,则CPU默认取DS寄存器的段地址,而不是SS的段地址
下面将666H这个值放到10000这个物理地址的内存中

mov ax,1000H
mov ds,ax
mov bx,0H
mov [bx],666H

下面的代码是利用BX寄存器来改变偏移地址,求一个长度为5的int类型数组的总和

int main() {int* pa = (int*)malloc(20);int sum = 1;if (pa != 0) {pa[0] = 1;pa[1] = 2;pa[2] = 3;pa[3] = 4;pa[4] = 5;std::cout << pa << std::endl;_asm {mov eax, 0mov ebx, pamov ecx,5s:add eax, [ebx]mov sum, eaxinc ebxinc ebxinc ebxinc ebxloop s			}std::cout << sum << std::endl;}}

还有一种常用的,使用BX的,偏移方式,格式是[BX+常量],也可以写成常量[BX],也可以写成[BX].常量,例如下面都是正确且常用的

// 下面写法都表示bx里存的是一个内存地址,将这个地址+200个字节,得到一个新
// 的地址,再将新的地址里面的值,赋到ax寄存器中
mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200

三:CX寄存器
CX是16位寄存器,由CH+CL两个8位寄存器组成

高级语言反汇编中CPU通常使用bx寄存器存放循环语句的循环次数,字符串操作中也常用,C++中类的成员函数的参数就是用ECX存放,如果见到ECX,基本可以认为这是一个函数参数,下面是loop指令自动读取cx中的值作为次数的代码

#include <stdio.h>
#include <iostream>int main() {int a = 0;_asm {mov eax, 0;// 循环10次mov ecx, 10;s:inc eax;// loop指令会判断ecx是否=0,如果不等于=,则代码跳到s处执行loop s;mov a, eax;}此处会打印出10std::cout << a << std::endl;
}

四:DX寄存器
也叫数据寄存器,DX是16位寄存器,由DH+DL两个8位寄存器组成

(1)在乘法中,结果都是存放到AX中的,但是如果发生进位,则高位会存放到DX中,详见MUL指令
(2)在整数除法中存放产生的余数
(3)在IO中用于存放端口地址

这篇关于Intel8086处理器-通用寄存器之AX/BX/CX/DX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057327

相关文章

Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解

https://www.cnblogs.com/sishang/p/6576665.html BeanPostProcessor接口作用:      如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。   package com.t

【SpringMVC学习05】SpringMVC中的异常处理器

SpringMVC在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。 异常处理思路 我们知道,系统中异常包括两类:预期异常和运行时异常(RuntimeException),前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。系统的dao、service、controller出现异常都通过throws E

Makefile问答之02 预处理器与宏

GCC Makefile中,怎样设定预处理器名称 在 GCC 的 Makefile 中,预处理器(preprocessor)的名称通常是 cpp(C PreProcessor),但在实际的 Makefile 中,我们一般是通过 gcc 命令来调用预处理器,而不是直接调用 cpp。不过,你可以通过设置 CPP 变量来显式指定预处理器名称和选项。以下是如何在 Makefile 中进行设置和使用的

试用GLFW并创建OpenGL和DX的环境

介绍GLFW GLFW官网:https://www.glfw.org/ GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contex

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺,与天玑 8000 相比性能提升 20% ,搭载4 个 2.85GHz A78 核心 + 4 个 2.0GHz A55 核心,CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构,拥有6核心,搭配天玑8100所拥有的HyperEngine5.0带来 5G 和 Wi-F i网络技术升级,包括 AI-VRS

解决ax+by=c,不定方程(扩展欧几里得)

首先有几个定理我们需要知道,在这里我也会一一证明。 —————————————————————————————————————— 定理1:gcd(a,b)==gcd(b,a%b);这个是欧几里得提出并证明的。 (%是取余的意思,在数学中 可用mod表示); 以下是证明过程 —————————————————————————————————————— 令a = k * b + r; (k

Shell编程:文本处理器(cut、split、paste、eval 命令)

文章目录 文本处理器 2cut 命令-快速裁剪语法格式常用选项示例 split 命令-文件拆分语法格式常用选项示例 paste 命令-文件合并语法格式常用选项示例 eval 命令-变量扫描器工作原理示例 文本处理器 2 本章讲解 grep、sort、uniq、tr、cut、split、paste 命令等。这些文本处理器通常用于数据过滤、转换、清理、格式化和提取等操作,

【ARM体系结构】ARM处理器流水线技术解析

引言 在现代计算机体系结构中,流水线技术是提高处理器性能的关键技术之一。ARM作为移动计算和嵌入式系统领域的领先架构,其流水线设计对于实现高效能、低功耗的处理器至关重要。本文旨在深入探讨ARM体系结构中流水线的概念、原理、分类,并分析影响流水线性能的关键因素,同时详细阐述指令执行过程的典型步骤,为理解和优化ARM处理器性能提供理论基础和实践指导。 流水线的概念与原理 概念 在ARM体系结

ARM——结构体系(处理器工作模式,CPSR,立即数,汇编语言函数调用)

1、处理器工作模式          ARM有7个基本工作模式:User:非特权模式,大部分任务执行在这种模式FIQ:当一个高优先级(fast)中断产生时将会进入这种模式IRQ:当一个低优先级(normal)中断产生时将会进入这种模式Supervisor:当复位或软中断指令执行时将会进入这种模式Abort:当存取异常时将会进入这种模式Undef:当执行未定义指令时会进入这种模式Sy

《ARM Cortex-R 学习指南》-【第十四章】-为 Cortex-R 处理器编写代码

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】 个人博客笔记导读目录(全部) 第十四章 为 Cortex-R 处理器编写代码 你可以针对功耗、速度、代码密度或内存占用来优化代码。许多 GNU GCC 和 ARM 编译器功能利用 Cortex-R 系列设计生成优化代码。 14.1 编译器优化