組合語言(基礎筆記) 有學習價值的

2021-08-26 08:49:21 字數 2960 閱讀 3695

基礎資訊:

reg -->暫存器

sreg -->段暫存器

cpu 16位線,暫存器也是16位。 位址匯流排20位。

實體地址 =  段位址x16+偏移位址

(2的20次方 = 1mb (即記憶體最多1mb 可知32位最多4gb,64位最多4zb)  1個儲存單元 = 8bit(8位)= 1位元組(b /byte)  )

**儲存單位一般用b,kb,mb,gb,tb,eb,zb,yb,bb來表示**

暫存器段暫存器:

cs  ip   **段

ds  si   資料段

ss  sp   堆疊       bp

es  di   附加暫存器

(資料不能直接送入段位址 要從資料暫存器中轉移)

標誌暫存器

資料暫存器(16位)

ax(accumulator):累加器,它是算術運算的主要暫存器,此外還可以作為乘,除運算及輸入,輸出的專用暫存器。

cx(count):計數暫存器,常用於迴圈操作或字元操作中的計數器。

dx(data):該暫存器常與ax配合,用於雙字長運算,dx存放高位字,ax存放底字位,此外還可以用於輸入、輸出指令中存放外部裝置介面的埠位址

注意:[cx] [ax] [dx] [ds]

是錯誤寫法 [bx]是正確寫法

[bx+si/di] / [bp+si/di]

是正確寫法

其它是錯誤寫法

大小寫(字母是乙個位元組大小)

將第五位置0--->大寫(and 11101111)  置1--->小寫(or 00010000)

0000:0000 – 0000:03ff 1024個儲存單元為中斷程式(256個)的入口位址 (每個中斷程式入口位址佔2個字 = 4個位元組/儲存單元) 低位址放ip 高位址放cs

指令               

跳轉jmp ax    ;(段位址=ds 偏移位址=ax)

jmp  dword ptr ds:[0]   ;(從ds:[0]中取[0+2]作為cs段位址,[0]作為ip位址)

jmp word ptr ds:[0]     ;(從ds[0] 中取[0]作為ip位址)

jmp short                             ;(ip+8位的偏移位址)

jmp near                             ;(ip+16位的偏移位址)

jmp far                                 ;(cs:ip)

jcxz                                       ;(cx!=0

則做短轉移)

je 等於就轉移

jne   

不等於就轉移

jb      

小於就轉移

jnb   

不小於就轉移

ja      

大於就轉移

jna   

不大於就轉移

movsb  ((es)*16+(di)) = ((ds)*16+(si))

如果df=0 si++ di++

如果=1 si—di—(

此條指令用於兩個資料段轉移資料

每次乙個位元組

si di

移動一位)

movesw

同上每次

si di

乙個字

一般mov al,[0]      ;(

從儲存單元

ds:[0]

中取乙個位元組到

al)

mov ax,[0]      ;(

從儲存單元

ds:[0]

中取乙個字到

ax)

push

先sp-2  

再入棧

pop 

先出棧再

sp+2 (

乙個段的最大值

偏移位址是

16位,則為2的

16次方,每個儲存單元

1byte

所以為64kb)

idata 常量

--程式返回

程式後台

command

將程式載入記憶體

執行完之後返回

mov ax,4cooh

int 21h

---over

db 200 dup(0)

重複200個0

(db位元組)

--call

與ret

call   

èpush ip ,jmp near ptr標號

call far ptr

èpush cs ,push ip ,jmp far ptr 標號

ret èpop ip

retf è pop ip ,pop cs

offset 取偏移位址

seg 取段位址

div 被除數放在dx ax è除數是16位   axè除數是8位      (8位即在2的8次方255之內)

mul al  è儲存到ax(即乘數是8位之內) dx,ax(乘數是16位的時候)

adc a,b (a+b+cf)加了乙個進製標誌位 一般都是先從低位加(有進製標誌位了) 再到高位

cmp 減法不保留結果只改變進製標誌位

cld  df置0

std  df置1

pushf        標誌暫存器的值入棧

popf         標誌暫存器的值出棧

iret           指令返回源程式

*中斷指令(看了一大半 後面的沒看了)

0000:0000 到0000;03ff 大小共1024個單元 沒個中斷入口位址為2個字(4個儲存單元 高位址存段位址,低位址存偏移位址) 1024/4 = 256個中斷入口 

彙編基礎 筆記2(《組合語言》)

data segment 字單元 存放乙個字型資料 16位 的記憶體單元,由兩個位址連續的記憶體單元組成。高位址記憶體單元存放字型資料的高位位元組,低位址記憶體單元存放字型資料的低位位元組。講10000h中的資料讀到al中的指令 mov bx,1000h mov ds,bx mov al,0 將al...

組合語言基礎

1.資料格式 26d 十進位制 1ah 十六進製制 42 o g 八進位制 以字母開頭的十六進製制常量前面必須加乙個0,以防止彙編器將其解釋為識別符號 2.盡量在表示式中使用圓括號顯式表明運算順序 3.彙編器大量使用 符號做為預定義符號的字首,因此應盡量避免在自己定義的標誌符前用 但 myfile為...

組合語言基礎

暫存器 暫存器是處理器內部的高速緩衝區,用於暫時存放資料。暫存器的分類 透明暫存器 這類暫存器不需要程式設計師進行操作。可程式設計的暫存器 這是我們程式設計師需要學習的這類暫存器又分為通用暫存器和專用暫存器 32位通用暫存器 eax ebx ecx edx edi esi ebp esp 16位通用...