c語言學習筆記十

2021-09-01 10:46:50 字數 1775 閱讀 8519

記憶體與位址

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...