以高位元組地址為字地址是什麼

江水為竭發表於2023-04-18

前言

今天在做作業的時候遇到一個說法:“採用以高位元組地址為字地址的存放方式”


概念

  • 字(word):即固定位數的二進位制數字組合,通常是16位32位
  • 字地址(word address):儲存某一個字的起始地址。

例子

比如下面這段彙編程式碼,地址0x401672處的指令:

40166d: b8 01 00 00 00        mov    $0x1,%eax
401672: ba d0 52 40 00        mov    $0x4052d0,%edx 
401677: 48 63 ce              movslq %esi,%rcx
40167a: 39 44 8d c0           cmp    %eax,-0x40(%rbp,%rcx,4)

可以看到這條指令大小為5個位元組,表示為ba d0 52 40 00。指令為mov $0x4052d0,%edx

這是一條資料傳送指令,將立即數0x4052d0傳送到暫存器edx中。顯然,5個位元組資料的後4個位元組,是這個立即數。但這個立即數的表示是著的,是以一個位元組為一塊反著的。其實,資料的這種存放方式叫做小端模式,這段彙編程式碼是x86架構下的。

而這種存放方式,也叫“採用以低位元組地址為字地址的存放方式”。

對於這個例子:

  • 字地址:後四位元組的起始地址,即0x401673
  • 低位元組:0x4052d0這個立即數的低位元組是d0

那麼,如果是“採用以高位元組地址為字地址的存放方式”:

這條指令就為401672: ba 00 40 52 d0 mov $0x4052d0,%edx

這樣看起來就很舒服,這種方式也叫大端模式


總結

  • 大端法 對應 “採用以高位元組地址為字地址的存放方式”
  • 小端法 對應 “採用以低位元組地址為字地址的存放方式”。

比如:棧中儲存1234H這個數

相關文章