汇编语言入门基础(访问寄存器和内存)

news2024/9/22 17:57:00

目录

访问寄存器和内存

2.1 寄存器是CPU内部的信息存储单元

2.1.1 通用寄存器--以AX为例

2.1.2 将AX分成AH与AL 

 2.2  “字”再寄存器中的存储

 2.3 mov和add指令

 2.3.1 练习1

2.3.2 练习2

 2.4 确定物理地址的方法

2.4.1 物理地址

2.4.2 8086CPU给出物理地址的方法

2.4.3 例子:8086CPU访问地址为123c8h的内存单元

​编辑

2.4.1 “段地址*16+偏移地址=物理地址”本质含义

2.5  内存的分段表示法

2.5.1 同一段内存,多种分段方案

 2.5.2 用不同的段地址和偏移地址形成同一个物理地址

2.6 Debug的使用

2.6.1 用R命令查看、改变cpu寄存器的内容

2.6.2 用D命令查看内存中的内容

2.6.3 用E命令改变内存中的内容

2.6.4 使用U命令将内存中的机械指令翻译成汇编指令

2.6.5 用A命令以汇编指令的格式在内存中写入机械指令

2.6.6 用T命令执行机器指令

2.6.7 退出debug程序

2.7  CS、IP与代码段

2.7.1 两个关键的寄存器

2.7.2 8086pc读取和执行指令

2.8 jmp指令

2.8.1 修改cs、ip的指令

 2.8.2 转移指令jmp

2.8.3 实际应用jmp

2.9 内存中字的存储 

2.9.1 内存中字的存储

2.9.2 字单元

2.10 用DS和【address】实现字的传送

2.10.1 CPU从内存单元中要读取数据

2.11 DS与数据段

2.11.1 对内存单元中数据的访问

2.11.2 将123boh~123bah的内存单元定义为数据段

​编辑

2.11.3 用mov指令操作数据

2.11.4 加法add和减法sub指令

​编辑

2.11.5 小结

​编辑

 2.12 栈及栈操作的实现

 2.12.1 栈结构

2.12.2 栈的操作

2.12.3 栈顶界问题的解决 

2.12.4 小结 


 

访问寄存器和内存

2.1 寄存器是CPU内部的信息存储单元

2.1.1 通用寄存器--以AX为例

2.1.2 将AX分成AH与AL 

 

 2.2  “字”再寄存器中的存储

         8086是16位的CPU

                8086的字长(word size)为16bit

        一个(word)可以存在一个16位寄存器中

                这个字的高位字节存在这个寄存器的高8位寄存器

                这个字的低位字节存在这个寄存器的低8位寄存器

 2.3 mov和add指令

 2.3.1 练习1

2.3.2 练习2

         注意:al寄存器是ax的低八位,bl寄存器是bx的低八位。ah、bh都是对应的寄存器的高八位。

        注意注意:当输入add al, 93H时,结果显示0058H,为啥这个溢出了1为什么不把它留到00这两个高位上面去呢?因为这是两个8位相加。

 2.4 确定物理地址的方法

2.4.1 物理地址

2.4.2 8086CPU给出物理地址的方法

2.4.3 例子:8086CPU访问地址为123c8h的内存单元

2.4.1 “段地址*16+偏移地址=物理地址”本质含义

2.5  内存的分段表示法

2.5.1 同一段内存,多种分段方案

 2.5.2 用不同的段地址和偏移地址形成同一个物理地址

2.6 Debug的使用

         Debug是DOS系统中的著名的调试程序,也可以运行zaiwindows系统实模式下。

        使用Debug程序,可以查看CPU各中寄存器中的内容、内存的情况,并且在机器指令级跟踪程序的运行。

mount c d:\masm        # 将本机的目录d:\masm挂载到工作环境下的C盘

C:        # 切换到C盘

debug        # 启动debug程序

  


2.6.1 用R命令查看、改变cpu寄存器的内容

        R - 查看寄存器内容

        R 寄存器名 - 改变指定寄存器内容

r        # 查看寄存器内容

# 修改寄存器ax的内容为1234

r ax

1234

 


2.6.2 用D命令查看内存中的内容

        D - 列出预设地址内存处的128给字节的内容

        D 段地址:偏移地址 - 列出内存中指定地址处的内容

        D 段地址:偏移地址 结尾偏移地址 - 列出内存中指定地址范围内的内容

d        # 每输入一次d命令都会列出当前地址下128个字节的内容

 

 d 2000:0000        # 查看从这个指定的物理内存开始下128个字节的内容

 

 d 2000:0 2f        # 查看2000这个段起始偏移地址0到末尾偏移地址2f的内容

                           # 也就是48个字节的内容


 

2.6.3 用E命令改变内存中的内容

        E 段地址:偏移地址 数据1 数据2。。。。

        E 段地址:偏移地址

                逐个询问式修改

                空格 - 接受,继续

                回车 - 结束

e 2000:0000 12 34 56 ab        # 将这个物理地址上的内容改为这些

# 使用d命令还能看到最右边的ASCLL码

 

 e 2000:0        # 逐个访问式的修改他们的内容

# 想修改下一个字节的内容直接按空格就行,修改完成按回车


 

2.6.4 使用U命令将内存中的机械指令翻译成汇编指令

d 2000:0 f        # 先查看一下内容

e 2000:0 b8 23 01 bb 03 00 98 ab 01 d8        # 修改内容

u 2000:0        # 用汇编语言格式查看这个物理地址下16字节内容的修改内容


 

2.6.5 用A命令以汇编指令的格式在内存中写入机械指令

 a 073f:100        # 修改这个物理地址下16个字节的内容使用汇编语言

mov ax, 0123        # 按回车后继续下一个地址,一个地址对应4个字节

mov bx, 3

mov ax, bx

add ax, bx

# 后面一直回车直接结束

# 使用u 073f:100 同样能看到刚刚配置的汇编命令的信息


 

2.6.6 用T命令执行机器指令

 r        # 查看一下各个寄存器

t        # 一直按回车可以执行在CS:IP处的指令,这个是我们之前在这个地址的内存处配置过的


 

2.6.7 退出debug程序

 q        #直接输入一个q命令

 

2.7  CS、IP与代码段

2.7.1 两个关键的寄存器

        CS:代码段寄存器

        IP:指令指针寄存器

        CS:IP : CPU将内存中CS:IP指向的内容当作指令执行

 

2.7.2 8086pc读取和执行指令

 

2.8 jmp指令

2.8.1 修改cs、ip的指令

 

 2.8.2 转移指令jmp

 

2.8.3 实际应用jmp

 # 修改cs寄存器的内容与修改ip寄存器的内容

r cs

2000

r ip 

0

 # 在物理地址2000:0上输入汇编指令

a 2000:0

mov ax,6622

mov jmp 1000:3        # jmp指令直接让其跳转到地址1000:3上,后面的代码没有得到执行

mov cx,ax

# 在物理地址1000:0上输入汇编指令

a 1000:0

mov ax, 0123

mov ax, 0        # ax寄存器值为0

mov bx ax        # bx寄存器值为0

jmp bx               #此时的bx值等效为IP寄存器的值,为0,也就是跳转到IP值为0的地址继续执行指令

 

         当执行jmp bx时直接跳转到偏移地址为0000的位置继续执行指令,以此达到循环程序的目的。

2.9 内存中字的存储 

2.9.1 内存中字的存储

        我们写的时候是ah al的写的,但是读取与存储的时候是al ah。 

 

2.9.2 字单元

 

 

2.10 用DS和【address】实现字的传送

2.10.1 CPU从内存单元中要读取数据

 e 1000:0 3 11 22 66         # 先给这个指定的内存地址分配初始的数据

mov ax, 1000

mov ds, ax        # 将1000h这个内容赋给ds段地址寄存器

mov ax, [0]        # 意思是将ds寄存器的内容作为段地址,0作为偏移地址的物理地址的内存内容赋值给ax这个通用存储器

mov bx, [2]        

mov cx, [1]

add bx, [1]

add cx, [2]

t

t

t

t        # 使用t命令执行下去就行

 

2.11 DS与数据段

2.11.1 对内存单元中数据的访问

 

2.11.2 将123boh~123bah的内存单元定义为数据段

 

2.11.3 用mov指令操作数据

 

2.11.4 加法add和减法sub指令

2.11.5 小结

 

 2.12 栈及栈操作的实现

 2.12.1 栈结构

 

2.12.2 栈的操作

 a

mov ax, 1000

mov ss, ax

mov sp, 0010

mov ax, 001a

mov bx, 001b

push ax        # 入栈

push bx

pop ax          # 出栈

pop bx

 

2.12.3 栈顶界问题的解决 

2.12.4 小结 

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

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

相关文章

swin和vit

参考:https://blog.csdn.net/weixin_44878336/article/details/125444556 Swin Transformer与Vision Transformer的对比 二者的不同之处: Swin-Transformer所构建的特征图是具有层次性的,很像我们之前将的卷积神经网络那样,随着…

基于检索增强生成 (RAG) 的大语言模型优化研究

复旦大学的研究人员对检索增强生成技术 (RAG) 的现有方法进行了系统性的研究,提出了一种三步式方法来优化 RAG 框架,并通过实验证明了该方法在提高大型语言模型性能方面的有效性,特别是在多模态检索和问答方面的应用。 论文介绍 基于检索的…

HexView 刷写文件脚本处理工具-基本功能介绍(二)-导入文件

菜单 保存(Save) 在对数据进行任何修改后(例如修改十六进制行或块的基地址),保存选项将被启用。这表示文件已被修改。在这种情况下,“保存”选项允许你将数据存储到当前文件名中。Hexview会以当前文件格式写入数据。当前文件格式显示在状态行中。 另存为(Save as) 允…

LVS详细介绍及常见模式(NAT,DR,防火墙标记)实验详解

目录 一、什么是LVS 二、LVS的核心思想 三、 LVS的优势 四、LVS的调度算法 4.1. LVS的调度算法类型 4.2. LVS静态调度算法 4.3. LVS动态调度算法 4.4.在4.15版本内核以后新增调度算法 五、LVS软件相关信息 六、ipvsadm命令 七、 LVS的NAT模式实验详解 7.1实验环境 7.…

“DS18B20,感知每一度细微变化,记录每一刻温暖。”#DS18B20温度传感器

“DS18B20,感知每一度细微变化,记录每一刻温暖。”#DS18B20温度传感器 前言预备知识1.DS18B20核心参数2.DS18B20初始化函数代码编写2.1分析DS18B20初始化时序图2.2依据时序图编写相应代码 3.向DS18B20写入一个字节函数代码编写3.1分析DS18B20写时序图3.2…

Zoho工作邮箱支持哪些功能?

工作域名邮箱都有哪些常见功能呢?一、消息流 ;二、邮件委托给同事代为处理;三、附件查看器 ;四、在邮箱里直接和同事音频/视频通话等八大功能。 一、消息流 - 邮箱里的社交渠道 Zoho Mail等专业工作邮箱平台引入了消息流功能&…

免账户免权限免费获取 A股 全市场股票ETF指数 分钟级数据

日期 2024/8/2 意外发现的,抛砖引玉,测试了下,其他券商的也可以。 可以直接获取 1m 5m 1day 级别的数据,全A股市场的都可以。期货未测试。 需要 其他的级别的分数数据可以自行合成。 原理 券商版qmt获取行情数据时,不…

JavaSE之常用API(后篇)

接上篇 五、Random 5.1 使用 5.2 练习 六、包装类 6.1 是什么 包装类:封装了基本类的一些操作,更加方便使用 为了对象的完整性,更重要的是配合泛型一起使用 byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character 八种包装…

Cadence学习笔记 Day0 Cadence17.4环境安装

当然是选择“吴法安装” 直接跟着吴川斌博客的方法来就可以了,这里大致记录一下我的安装步骤: 安装许可证管理器破解许可证管理器安装软件以及补丁破解软件 获取 直接放出链接:吴川斌的博客 下载得到: 一、安装许可证管理器&am…

Redis未授权利用方式总结

前言 目前的大多数网站搭建的Redis 均采用 docker 一键部署的方式,而 docker 镜像中的 redis 默认不是以 root 权限运行的,也就是说即使拿下这台 redis,我们也只能在对方服务器的本地内网中漫游,当然还是会有部分 redis 部署在服…

Tensorflow—第四讲网络八股扩展

本讲概述 一、自制数据集 我们用六万张数字图片自制训练集,一万张数字图片制作测试集 代码(注释已经很清楚了,就不解释了): def generateds(path, txt):f open(txt, r) # 以只读形式打开txt文件contents f.readl…

【喜报】龙信助力上饶市公安局斩获全国刑侦部门数据侦查技战法大赛两项大奖

文章关键词:电子数据取证、手机取证、云取证、现场勘查、电子物证 8月2日,全国刑侦部门数据侦查技战法大赛在福建晋江市落下帷幕。来自全国各地的33支参赛队伍汇聚一堂,展现了全国公安刑侦部门数据侦查的新思路、新做法。 在这一高水平的竞技…

ant tree 数据的最优解

项目背景 : react ant ant 官网中目前只提供了 默认父子关联 或 checkStrictly(父子不关联)注意 : 不能盲目选择父子关联 , 虽然选中父 , 子也联动确实是需要的效果 , 但有一个bug 如下图 (当选中部分子 , 所有子被选中)解决方案 : 只能取消父子关联 , 自己去判断当前点击处…

C Primer Plus 第7章——第一篇

你该逆袭了 第7章:重点摘录 零、本章介绍一、if 语句二、if else 语句1、介绍 getchar( ) 和 putchar( )2、ctype.h 系列 的 字符函数(1)、isalnum( )(2)、isalpha( )(3)、isblank( )(4)、iscntrl( )(5)、isdigit( )(6)、isgraph( )(7)、islower( )(8)、isprint( )(9)、ispunct…

CV党福音:YOLOv8实现分类

YOLO作为目标检测领域的常青树,如今以及更新到了YOLOv10,并且还有YOLOX、YOLOS等变体,可以说该系列已经在目标检测领域占据了半壁江山,如今,YOLOv8的发行者ultralytics竟有一统江山之意,其在提出的框架中不…

基于Springboot+Vue3的简易教学管理系统

作品展示 基于SpringbootVue3的简易信息教学管理系统 第1章 系统设计 1.1 系统功能模块设计 该系统实现的功能模块包括: 教师端: 学生信息管理:添加、删除、修改以及查询学生信息 √课程信息管理:添加、删除、修改以及查…

智慧图书馆:构建高效视频智能管理方案,提升图书馆个性化服务

一、背景分析 随着信息技术的飞速发展,智慧图书馆作为现代公共文化服务的重要载体,正逐步从传统的纸质阅读空间向数字化、智能化方向转型。其中,视频智能管理方案作为智慧图书馆安全管理体系的重要组成部分,不仅能够有效提升图书…

深入浅出Mysql 第二期

从更新语句中看日志系统 探究技术的本质,享受技术的乐趣!由于时间原因以及自己的原因导致拖更了,不过没关系,我保证后面每天一更,周末休息!好了,闲话少说,今天我们通过一个更新操作…

数组案例练习进阶版---对数组中的元素进行排序(冒泡法)

在上篇文章中,我们一起学习了常用排序法中的选择排序法,今天,我们将一起来学习新的排序方法——冒泡法排序 那么首先,什么是冒泡法呢? 首先,第一列,我们有四个大小不一的球,我们称最…

4款ai 制作 ppt工具帮你提高工作效率

在这个高度重视可视化展示的环境当中,PPT在许多的场合中都骑着非常重要的作用,但PPT制作过程却常常令人感到烦恼。而最近我发现了4个堪称神器的PPT制作工具,可以分享给大家。 1、笔灵 ppt 直通车:https://ibiling.cn/ppt-zone 这…