首页 > 系统相关 >王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)

时间:2022-12-20 17:07:53浏览次数:41  
标签:小端 定位 字节 mov --- ax 内存地址 bx ds

 

汇编语言(第三版)王爽著 的十二

 

 

大小端 字节对齐

 

对于 arm,intel 这种 x86 构架的复杂指令 CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐。
但对于 unix 服务器的 CPU,更多是采用大端对齐的方式存放整数。

 

为什么会有 大端( 高尾端 ) 和 小端( 低尾端 )?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的 char之外,还有 16bit 的 short 型,32bit 的 long 型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着如何将多个字节安排的问题。因此就导致了 大端存储模式小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEILC51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。


  • 1. 大端序:数据的高位字节存放在地址的低端,低位字节存放在地址的高端
  • 2. 小端序:数据的高位字节存放在地址的高端,低位字节存放在地址的低端

记忆方式:

  1. 大端序:是按照数字的书写顺序进行存储的。
  2. 小端序:是颠倒书写顺序进行存储的。

涉及大小端的问题,可以记为:“小高高,小弟弟( 低低”。( 这是记小端模式的,有点黄,不过好记那么大端模式就和这个相反

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式

 

 

 

[bx]

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_大端模式_02

 

 

 

7.5 [bx + idata]

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_03

汇编代码验证:

assume cs:codesg, ds:datasg


datasg segment
db 16 dup (0)
;db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
datasg ends

codesg segment
start:
mov ax,datasg
mov ds,ax

mov ax,190
mov ds:[0],ax

mov ax,6
mov ds:[2],ax

mov ax,0
mov ax,ds:[0]
mov bx,ds:[1]
mov cx,ds:[2]

mov ax, 4c00h
int 21h
codesg ends
end start

运行截图:

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_04

 

 

 

7.6 使用 [bx + idata ] 方式进行数组的处理

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_05

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_06

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_07

 

 

7.7  si 和 di 寄存器( 和 bx 功能相近的寄存器

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_大端模式_08

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_09

 

 

使用 [ bx (si 或者 di ) + idata ]

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_大端模式_10

 

 

7.8 [ bx + si ] 和 [ bx + di ]

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_11

 

 

 

7.9 [ bx + si + idata ] 和 [ bx + di + idata ] 

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_大端模式_12

 

 

7.10 不同寻址方式灵活应用

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_13

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_14

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_寄存器_15

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_大端模式_16

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_17

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_18

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_19

 

 

 

寻址方式 总结

 

王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)_小端模式_20

 

 

 

标签:小端,定位,字节,mov,---,ax,内存地址,bx,ds
From: https://blog.51cto.com/csnd/5956104

相关文章

  • Scrapy-spiders(爬虫)
     ScrapySpiders(中文版):​​http://doc.scrapy.org/en/latest/topics/spiders.html​​ScrapySpiders(中文版):​​https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/s......
  • Scrapy-redis 源码分析 及 框架使用
     From:​​https://cuiqingcai.com/6058.html​​Scrapy-redisgithub:​​https://github.com/rmax/scrapy-redis​​​scrapy-redis分布式爬虫框集群版Scrapy-Redis:​​......
  • Scrapy-Item Pipeline(项目管道)
     ItemPipeline(英文版):​​http://doc.scrapy.org/en/latest/topics/item-pipeline.html​​ItemPipeline(中文版):​​https://scrapy-chs.readthedocs.io/zh_CN/latest/topi......
  • Scrapy-Item Loaders(项目加载器)
     ItemLoaders:​​http://doc.scrapy.org/en/latest/topics/loaders.html​​ItemLoaders(中文版):​​https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/loaders.htm......
  • Scrapy - Request 和 Response(请求和响应)
     RequestsandResponses:​​http://doc.scrapy.org/en/latest/topics/request-response.html​​RequestsandResponses(中文版):​​https://scrapy-chs.readthedocs.io/zh......
  • Scrapy-Link Extractors(链接提取器)
    LinkExtractors中文文档:​​https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/link-extractors.html​​​LinkExtractors英文文档:​​http://doc.scrapy.org/en/......
  • JavaScript 逆向 ( 一 ) --- JavaScript 语法基础
    1、JavaScript基础菜鸟教程JavaScript教程:​​https://www.runoob.com/js/js-tutorial.html​​1.基础数据类型:number、string、boolean、null、undefined、object2.顺......
  • 【分布式系列】- 分布式id生成有几种选择
    什么是分布式系统ID在复杂分布式系统中,我们系统是分布式部署,往往需要在分布式环境中对大量的数据和消息进行唯一标识,这里的唯一就得要求ID不能重复。当我们对数据......
  • centos-stream中安装nginx遇到的问题一二
    在centos-stream中安装nginx-1.9.15时遇到在make时遇到如下问题:在nginx文件夹里执行make命令报错src/core/ngx_murmurhash.c:37:11:error:thisstatementmayfallt......
  • 【Redis系列】- 什么是缓存击穿、缓存穿透、缓存雪崩?
    背景我们在项目中大量使用Redis承接海量数据的冲击,但是使用过程中也会遇到一些特殊的情况,这个就是缓存击穿、缓存穿透、缓存雪崩。 缓存穿透问题 先来看一个......