《汇编语言》笔记一 寄存器

news/2024/10/22 4:58:37/

通用寄存器

8086CPU的所有的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器为通用寄存器。

一个16位寄存器可以存储一个16位的数据。

8086CPU的上一代CPU中的寄存器都是8位,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上

8086CPU的 AX、BX、CX、DX、这4个寄存器可以分为两个独立使用的8位寄存器来用

字在寄存器中的存储

8086CPU可以一次性处理以下两种尺寸的数据

  • 字节:byte,一个字节由8个bit组成,可以存在8位寄存器中
  • 字:word,一个字由两个字节组成,两个字节分别称为这个字的高位字节和低位字节

汇编指令

汇编指令CPU操作高级语言
mov ax,18将18送入寄存器AXAX=18
mov ah,78将78送入寄存器AHAH=78
add ax,8将寄存器AX中的数值加上8AX=AX+8
mov ax,bx将寄存器BX中的数据送入寄存器AXAX=BX
add ax,bx将AX和BX中的数值相加,结果存在AX中AX=AX+BX

程序段指令执行情况 (原AX的值:0000H 原BX的值:0000H)

程序段中的指令指令执行后AX中的数据指令执行后BX中的数据
mov ax,4E20H4E20H0000H
add ax,1406H6226H0000H
mov bx,2000H6226H2000H
add ax,bx8226H2000H
mov bx,ax8226H8226H
add ax,bx044CH8226H

程序段中的最后一条指令 add ax,bx,在执行前 ax和 bx 中的数据都为 8226H,相加后所得的值为:1044CH,但是 ax 为 16 位寄存器,只能存放 4位十六进制的数据,所以最高位的 1不能在 ax 中保存,ax中的数据为:044CH。

程序段指令执行情况 (原AX的值:0000H 原BX的值:0000H)

程序段中的指令指令执行后AX中的数据指令执行后BX中的数据
mov ax,001AH001AH0000H
mov bx,0026H001AH0026H
add al.bl0040H0026H
add ah,bl2640H0026H
add bh,al2640H4026H
mov ah,00040H4026H
add al,85H00C5H4026H
add al,93H0058H4026H

程序段中的最后一条指令 add al,93H,在执行前,al 中的数据为 C5H,相加后所得的值为:158H,但是 a1为8位寄存器,只能存放两位十六进制的数据,所以最高位的1丢失,ax 中的数据为:0058H。

段地址x16+偏移地址=物理地址 本质含义

“段地址x16+偏移地址=物理地址”的本质含义是:CPU 在访问内存时,用一个基础地址(段地址x16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

“基础地址+偏移地址=物理地址”的思想

你要去图书馆,问我那里的地址,我可以用两种方式告诉你图书馆的地址:

(1)从学校走 2826m 到图书馆。这 2826m 可以认为是图书馆的物理地址。

(2)从学校走 2000m 到体育馆,从体育馆再走 826m 到图书馆。第一个距离 2000m,是相对于起点的基础地址,第二个距离 826m 是相对于基础地址的偏移地址(以基础地址为起点的地址)。

第一种方式是直接给出物理地址 2826m,而第二种方式是用基础地址和偏移地址相加来得到物理地址的。

第二个比喻进一步说明“段地址x16+偏移地址=物理地址”的思想。

比如,只能通过纸条来互相通信,你问我图书馆的地址我只能将它写在纸上告诉你。显然,我必须有一张可以容纳4位数据的纸条,才能写下 2826 这个数据。

可不巧的是,我没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。这样我只能以这种方式告诉你 2826 这个数据。

在第一张纸上写上 200(段地址),在第二张纸上写上 826(偏移地址)。假设我们事前对这种情况又有过相关的约定:你得到这两张纸后,做这样的运算:200(段地址)x10+826(偏移地址)=2826(物理地址)。

8086CPU 就是这样一个只能提供两张3位数据纸条的CPU。

段的概念

内存并没有分段,段的划分来自于CPU,由于 8086CPU 用“基础地址(段地址x16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

可以认为:地址10000H~100FFH 的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H;我们也可以认为地址 10000H1007FH、10080H100FFH 的内存单元组成两个段,它们的起始地址(基础地址)为:10000H和10080H,段地址为:1000H和1008H,大小都为80H。

段寄存器

段地址在 8086CPU 的段寄存器中存放。8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。

CS和IP

CS为代码段寄存器 IP为指令指针寄存器

在 8086PC 机中,任意时刻,设CS 中的内容为 M,P 中的内容为N,8086CPU 将从内存 Mx16+N 单元开始,读取一条指令并执行。

执行指令工作原理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改CS、IP指令

jmp指令

同时修改CS IP的内容,可以使用 jmp段地址:偏移地址的指令完成

jmp 2AE3:3CS=2AE3H,IP=0003HCPU将从2AE33H处读取指令
jmp 3:0B16CS=0003H,IP=0B16HCPU将从00B46HH处读取指令

只下IP的内容

jmp ax
执行前ax=1000H,CS=2000H,IP=0003H
执行后ax=1000H,CS=2000H,IP=1000H
jmp bx
执行前bx=0B16H,CS=2000H,IP=0003H
执行后bx=0B16H,CS=2000H,IP=0B16H

http://www.ppmy.cn/news/1540981.html

相关文章

小程序底部导航按钮实现

商城小程序需要四个底部导航按钮,遂记录一下实现过程 最终实现效果如下所示 新建一个小程序项目,我是创建了JS模板,项目创建完成后需要新建五个文件夹,其中四个(page子文件夹)用于存放pages文件&#xff0…

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况,大专生,21年通过校招进入武汉某软件公司,干了差不多3个星期的功能测试,那年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…

软考(网工)——局域网和城域网

文章目录 🕐局域网基础1️⃣局域网和城域网体系架构 IEEE(负责链路层)2️⃣局域网拓扑结构 🕑CSMA/CD1️⃣CSMA/CD2️⃣CSMA/CD三种监听算法3️⃣冲突检测原理 🕒二进制指数退避算法1️⃣ 二进制指数退避算法 &#x1…

【力扣 | SQL题 | 每日4题】力扣1596,1587,2228,2066

1. 力扣1596:每位顾客最经常订购的商品 1.1 题目: 表:Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | ------------------------ c…

【某农业大学计算机网络实验报告】实验一 集线器和交换机的对比

实验目的: 1.熟悉并掌握Cisco Packet Tracer的安装及使用方法; 2.验证并掌握集线器和交换机的工作方式及区别。 实验器材: 一台Windows操作系统的PC机。 实验准备: 1.配置网络拓扑:首先,在…

每月洞察:App Store 和 Google Play 的主要更新

Google Play 和 App Store 的算法不断发展,定期更新和变化会显着影响其功能。对于开发人员和营销人员来说,跟上这些变化至关重要,因为它们会直接影响应用发现和排名。 本文将深入探讨 Google Play 和 App Store 的最新更新,解释它…

生成模型初认识

生成模型初认识 参考学习资料:李宏毅-机器学习 以下为课程过程中的简易笔记 生成模型 为什么要用生成模型?——创造力:同一个输入,产生不同的输出(distribution),有一定概率发生某种随机事件…

(31)oracle数据泵导出

/u01/app/data2 sqlplus UVMP_USER/UVMP_USER as sysdba --使用UVMP_USER用户登录即可 create directory test_out as /u01/app/data2; grant read,write on directory test_out to UVMP_USER; expdp UVMP_USER/UVMP_USER dumpfileorcl.dmp logfileexpdp.log directoryt…