汇编语言学习笔记一

news2024/9/21 2:32:46

常用寄存器类型

通用寄存器

AX,BX,CX,DX,这四个寄存器都是16位的
他们也可以拆分为2个8位的寄存器,如AX可以拆分为AH和AL两个8位的寄存器,其它三个也可以如此。
通用寄存器的使用比较简单,如
mov ax, 0x0253,当然也可以将0x0253写成0253H。
该指令是将0253放入ax寄存器中。
mov ax, bx
该指令是将bx寄存器的数据放入ax中。
add ax, 0x0205
该指令是将ax中的数据与0205相加之后放入ax中。
ah和al以及其它的通用寄存器的使用与之类似,要注意的是存放的数据位数要保持一致。

段寄存器

CS,DS,SS,EX
CS:为代码段寄存器,通常与IP(指令指针寄存器)一同使用,其格式为CS:IP
其实际的物理地址为CS*16+IP,即CS左移4位,再加上IP,就可以得到实际的物理地址了。
修改CS和IP可以用jmp指令,如
jmp 3:0B16H
其中CS=3,IP=0B16,该指令就可以使CPU从物理地址30+0B16处读取指令。
如果仅想修改IP的值,可以用指令
jmp ax
这样就可以将IP改成ax寄存器里的值,而CS的值保持不变。注意的是这里应该是只能用寄存器来jmp。这里存疑。
DS:为数据段寄存器,DS必须用寄存器的赋给它,如
mov bx, 0x1562
mov ds, bx

这里是将1562先存放到了bx寄存器中,再由bx寄存器mov到ds,而不能直接mov ds, 0x1562

mov al, [0]
该指令是将0内存单元的内容放到al寄存器中。[]表示一个内存单元,[0]中的0表示内存单元的偏移地址,当然也可以将al寄存器中的数据放入第0地址单位内,指令为
mov [0], al

那么
mov ax, 0x1562
mov ds, ax

mov al, [0]
合起来就可以指定要访问的数据的段地址和偏移地址了,其段地址为0x1562,偏移地址为0,段地址存储在ds中。

例子:
mov ax, 1000H ;将1000H放入ax
mov ds, ax ;将ax赋给ds,即这里的段地址被设为1000H
mov ax, [0] ;将第0内存单元的数据赋给ax,这里的地址为10000H+0,所以ax的值为1123
mov bx, [2] ;将第2内存单元的数据赋给bx,地址不变,bx的值为6622
mov cx, [1] ;将第1内存单元的数据赋给cx,地址不变,cs的值为2211
add bx, [1] ;将第1内存单元的数据加上bx的值,再放入bx,则bx=2211+6622=8833
add cx, [2] ;将第2内存单元的数据加上cx的值,再放入cx,则cx=6622+2211=8833
其中内存中的情况为
在这里插入图片描述

需要注意的是内存单元是字节单元(8位),而在CPU中,是16位的寄存器,所以需要用两个内存单元。所以将[1]中的数据赋给一个16位的寄存器时,是将2211赋给寄存器。[1]
也是表示偏移地址。

指令

mov、add、sub三个常见的指令后面都有两个操作对象,两个对象可以是内存单元、段寄存器、寄存器的任意两个。当然也可以是立即数

CS和DS的区别

cs是值cpu执行的当前指令的段地址,ds是数据开始的段地址。

cs是告诉CPU,去哪个位置找内容当成指令去执行;
ds是告诉CPU,去哪个位置找内容当成数据被使用。

datastring =ds
codestring=cs

用到DS的例子:
mov ax, [100H]
这句指令的意思就是把地址[100H](属于数据)放入到寄存器ax里(直接寻址),

此时物理地址计算:ds*10H+100H

栈是采用后进先出的原则(Last In First Out, LIFO),关于栈的寄存器有SS和SP,栈顶的段地址保存在SS,栈顶的偏移地址保存在SP里,任意时刻,SS:SP指向栈顶元素,pop和push执行时,CPU就能从SS和SP中得到栈顶的地址,压栈(push)和弹栈(pop)是以字位单位的,所以push每执行一次,SP都需要减2,pop每执行一次,需要加2。
push和popd的操作对象只有一个,可以是内存单元、段寄存器、寄存器的任意一个。
SP应该是这段地址空间的长度,比如将10000H-1000FH这段空间作为栈,则SS=1000H,SP=0010H。下面将ax,bx,cx中的数据压栈。
mov ax, 1000H
mov ss, ax
mov sp, 0010H
push ax
push bx
push cx

总结

段寄存器(CS,DS,SS)不能直接用立即数赋给它,需要用通用寄存器中转一下,而偏移寄存器却可以,比如IP和SP寄存器。栈指令(push和pop)也不能直接用立即数赋予,必须用寄存器。

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

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

相关文章

【HTML5笔记】HTML5语义化标签、音视频标签、表单标签属性

目录 一、HTML5学习 1.1、HTML5语法 1.2、语义化标签 1.3、音视频标签 (1)音频标签 (2)视频标签 1.4、input标签type属性 1.5、datalist数据列表 1.6、表单属性 一、HTML5学习 1.1、HTML5语法 HTML5增加了很多的新标签…

【SpringBoot】自定义策略的静态资源访问

文章目录 新建static文件夹,存储图片等资源方式一 Java编码定义方式二 配置中定义 新建static文件夹,存储图片等资源 项目版本信息:SpringBoot版本为2.3.3.RELEASE,JDK1.8 方式一 Java编码定义 配置类实现WebMvcConfigurer接口&…

【五一创作】spring boot starter 编写自己的starter

spring boot starter 编写自己的starter 陈钊 2023-5-1 源码地址: https://gitcode.net/qq_39339588/my-spring-boot-starter.git 封装my-spring-boot-starter 新建springboot工程,来封装为自己的spring-boot-starter 包名,随便写&#xff0…

基于电流控制的并网逆变器(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

操作系统:文件系统

文件系统 文件保护 文件的保护通过口令保护、加密保护、和访问控制等方式实现。其中,口令和加密是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式。 口令保护 口令指用户在建立一个文件时提供一个口令,系统…

算法套路十四——动态规划之背包问题:01背包、完全背包及各种变形

算法套路十四——动态规划之背包问题:01背包、完全背包及各种变形 算法示例一——0/1背包: 0-1背包:有n个物品,第i个物品的体积为w[i],价值为v[i],每个物品至多选一个, 求体积和不超过capacity时的最大价值…

【状态机dp之 股票买卖 题型系列 帮你学懂 状态机】股票买卖(1-6道题)

股票买卖 股票买卖 1这道题就是求max {ai−aj|j<i} 股票买卖 2股票买卖 3方法一&#xff1a;前后缀拆分dp怎么想到的&#xff1f;方法二&#xff1a;状态机dpf[0/1][i]表示只考虑前i支股票且手头有/没有股票的最大收益 股票买卖 4考虑前 i 天的股票&#xff0c;第 i 天的 决…

深入浅出C++ ——C++11

文章目录 一、C11简介二、列表初始化二、声明四、范围for循环五、STL中的变化六、右值引用和移动语义1. 什么是左值&#xff1f;什么是左值引用&#xff1f;2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 完美转发 新的类功能默认成员函数类成员变量初始化defaultdele…

在Unity中制作完整的技能系统(介绍篇)

1. 系统结构介绍 首先我们需要对技能中的部分进行一个划分。通过观察&#xff0c;我们不难发现&#xff0c;在多个技能中经常有一些相同的内容&#xff08;以下的例子均来自于《英雄联盟》&#xff09;&#xff1a; 火男被动的燃烧一定时间持续伤害和提莫的E技能中毒一定时间…

【@Param注解】| 台面使用——>底层原理分析

🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 目录 🦁 定义🦁 台面使用🦁 底层原理分析🦁 尾声🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄…

【Python】什么是爬虫,爬虫实例

有s表示加密的访问方式 一、初识爬虫 什么是爬虫 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性&#xff0c;根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略爬虫可以做什么 你可以…

【JAVAEE】JAVA数据库连接(JDBC)

1.什么是JDBC&#xff1f; Java数据库连接&#xff0c;&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口&#xff0c;提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsyste…

[优雅的面试]MySQL与Redis双写一致性方案

前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用&#xff0c;在读取缓存这方面基本都是一致的&#xff0c;大概都是按照下图的流程进行操作&#xff1a; 但是在更新缓存方面&#xff0c;是更新完数据库再更新缓存还是直接删除缓存呢&#xff1f;又或者是先删除缓存再…

TypeError: Object of type ‘Decimal‘ is not JSON serializable

错误 TypeError: Object of type ‘Decimal’ is not JSON serializable 场景 该错误是在Python3中使用Flask的报错&#xff0c;之前代码是运行正常的&#xff0c;时过几年后再次安装部署&#xff0c;确出现问题。 分析 经过分析发现依旧是版本依赖导致的更新问题。最近在…

JS手写实现Promise.race

Promise.race() 是一个常见的 JavaScript Promise 方法&#xff0c;它接受一个 Promise 数组作为参数&#xff0c;并返回一个新的 Promise 对象。这个新的 Promise 对象在传入的 Promise 数组中&#xff0c;任意一个 Promise 对象状态变为 fulfilled 或者 rejected&#xff0c;…

57.网页设计图标实战

首先我们需要找一个图标库&#xff0c;本次演示采用的是heroicon ● 之后我们根据需求搜索与之想匹配的图标并复制svg代码 ● 之后将我们的代码复制到我们想要放置图标的地方 ● 当然我们需要使用CSS来修饰一下 .features-icon {stroke: #087f5b;width: 32px;height: 3…

Python——Pyqt5的数据可视化小工具(完整代码)

前言 作业要求&#xff1a;【都已经打包放网上了&#xff0c;有缘人需要就自取】 一份报告书&#xff08;在全球变暖背景下碳中和对各国的二氧化碳排放量的影响项目报告书&#xff09; 一份代码 作业包&#xff1a;python数据可视化小工具.zip - 蓝奏云 大一的时候&#xff0c;…

Java 整合常用docker Api

整合环境&#xff1a; 与docker 版本差异不大&#xff0c;基本都可以 API version: 1.26开放docker api &#xff0c;两种方式 /etc/sysconfig/docker &#xff0c;最后一行添加&#xff1b;开放端口&#xff1a;2375 -H tcp://0.0.0.0:2375systemctl status docker 查询 d…

vsftpd.conf参数配置

文章目录 初始vsftdp.conf翻译后需修改参数write_enableYES&#xff08;启用任何形式的FTP写入命令&#xff09;userlist_file/etc/vsftpd.user_list、userlist_enableYES、userlist_denyNOlocal_umask022&#xff08;放开权限&#xff09;chroot_local_userYES&#xff08;限定…

每日学术速递4.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.LG 1.A Cookbook of Self-Supervised Learning 标题&#xff1a;自监督学习食谱 作者&#xff1a;Randall Balestriero, Mark Ibrahim, Vlad Sobal, Ari Morcos, Shashank Shekhar, Tom…