記憶體與位址
32位x86 ,從0x0000 0000到0xffff ffff
cpu的功能單元:
暫存器:register,高速儲存器,像記憶體一樣訪問資料
eax 通用暫存器
ebxecx
edxedi
ebpeip 程式計數
程式計數器:program counter,
指令解碼器:instruction decoder
算術邏輯單元:arithmetic and logic unit
位址和資料匯流排:bus
示例:訪問記憶體讀取資料
cpu 將暫存器對接到資料匯流排上,使暫存器每一位對接到一條資料線,等待接收
cpu 將記憶體位址通過位址線發給記憶體,控制線發請求
記憶體收到位址和請求後,將對應儲存單元對接到資料匯流排的另一端,傳送到暫存器
中的相應位.
mmu (memory management unit 記憶體管理單元)
如果處理器沒有mmu或沒有啟用,cpu執行單元發出的記憶體位址將直接傳到記憶體晶元引
腳上,這稱為實體地址
從cpu到mmu的位址稱為虛擬位址
x86匯程式設計序基礎
示例**:
.data
msg : .string "hello, world!\n"
len = . - msg
.text
.global _start
_start:
movl $len, %edx
movl $msg, %ecx
movl $1 , %ebx
movl $4 , %eax
int $0x80
movl $0 , %ebx
movl $1 , %eax
int $0x80
生成止標檔案:as hello2.s -o htllo.o
鏈結生成可執行檔案:ld hello2.o -o hello2
執行檔案:./hello2
示例程式(求一組數的最大數)
.section .data
data_items:
.long 3,67,34,222,45,75,54,34,44,33,22,11,66,0
.section .text
.globl _start
_start:
movl $0, %edi
register
movl data_items(,%edi,4),
of data
movl %eax, %ebx
item,%eax is
start_loop:
cmpl $0, %eax
endje loop_exit
incl %edi
movl data_items(,%edi,4), %eax
cmpl %ebx,%eax
jle start_loop
newmovl %eax,%ebx
jmp start_loop
loop_exit:
movl $1, %eax
int $0x80
定址方式:
直接定址:使用address_or_offset定址,例:movl address,%eax
變址定址:movl data_items(,%edi,4), %eax
間接定址:movl (%eax),%ebx
基址定址:movl 3(%eax),%ebx
立即定址:movl $10,%eax
暫存器定址:
c語言學習筆記十
記憶體與位址 32位x86 從0x0000 0000到0xffff ffff cpu的功能單元 暫存器 register,高速儲存器,像記憶體一樣訪問資料 eax 通用暫存器 ebxecx edxedi ebpeip 程式計數 程式計數器 program counter,指令解碼器 instruct...
c語言學習筆記(十 邏輯結構
if 條件1 else if 條件2 else do while 想到條件 for 想到次數 1 for迴圈 迴圈中的 表示式1 初始化條件 表示式2 迴圈條件 和 表示式3 自增或自減 都是可選項,都可以省略 但分號 必須保留 for 表示式1 初始化條件 表示式2 迴圈條件 表示式3 自增或自減...
Golang語言學習筆記(十)
包 package 是多個go原始碼的集合,是一種高階的 復用方案,go語言為我們提供了很多內建包,如fmt,strconv,sort,errors,time,encoding json,os,io等。golang中的包可以分為三種 1.系統內建包 2.自定義包 3.第三方包 系統內建包 golan...