o(∩_∩)o
高手讓路
「梅毒」症狀嚴重者專用
8086定址方式
標誌暫存器說明:(1) 常用的有cf zf sf of pf 要牢記
2)負零進製偶溢位=szcpo(個人記憶小訣竅,當szcpo f=1的時候)
3)相關指令:clc stc cmc cli sti cld std
cf:清零置1 取反 if:清零置1 df:清零置1
有沒有發現,cl*的就是清零,st*的就是置1)
4)df=1的時候,用loop lop神馬的,cx自減1 反之自增1 其它不管
常用的指令系統
一、 計算類的指令:
只管記住以下這些就好了,要用就用,神馬帶不帶進製,不理它
(1)add a,b a=a+b
adc a,b a=a+b+fc
deg a a=a-1
inc a a=a+1
sub a,b a=a-b
sbb a,b a=a-b-cf
neg a a=-a
cmp a,b a-b 但是不改變a或b的值,只改變標誌暫存器(參考第一頁)的值
例 mov al,10
cmp al,10 (這時候標誌暫存器值改變,al>10減法無借位,則cf=0)
jz next1 (jz指令:當cf=1的時候跳轉到next1處繼續執行,但cf=0,所以不跳轉,直接執行下一條指令)
jnz next2 (jnz指令:當cf=0時跳轉到next2處繼續執行,此時cf=0則跳轉到next去了)
next1:xor ax,ax
next2: mov ah,4ch
int 21h
這條指令之所以花如此大篇幅介紹,是因為它實在太常用啦!
(2)imul a ax=al*a(關鍵在於a的型別,如果a是位元組型別的也就是8位2進製數的時候,結果存放在ax中,如果a是字型別的16位,高8位存在dx中,低8位放在ax中,以下相同)
mul a 同imul,只是imul做乘法的時候,符號位只要注意的,0表示負數,1表示正數,在計算的時候要注意是否是有符號運算,但是目前來看,我們還是比較少接觸到有符號數乘法的,所以常用mul,希望不要考有符號數吧
idiv a al=ax/a的商 ah=ax/a的餘數(字運算的時候dx儲存餘數)
div a 同idiv,這個是無符號的
二、 邏輯運算指令
and a,b a=a 與 b (1+1=1 ,1+0=0 ,0+0=0 )
常用舉例:and ax,86h (86h=10000110,則其中第1、6、7位是1,和ax與之後,a的第1、6、7位不變,其他位清零了)
or a,b a=a或b (a或b其中乙個為1的時候,a=1)
常用舉例:or ax,86h (86h=10000110,則其中第1、6、7位是1,和ax或之後,a的第1、6、7位變成1,其他位不變)
xor a,b a=a異或b (ab相同的時候a=1,不同的時候a=0)
常用舉例:xor ax,ax 一對比就知道,ax和ax自然是全部都一樣,所以每位都變成0,於是ax就被清零了
text a,b a 與 b 置標誌位,不改變a和b的值,有點類似cmp(見計算相關指令)的功能
not a a按位取反,相比neg,neg是求相反數,not是1和0互換
三、 串操作指令
movs 把ds:si所指內容傳給es:di,同時修改di和si的值(di+1 si+1)
cmps di:si-es:di 置標誌位,功能類似cmp,只是應用範圍不一樣
scas 把ax/al內容和es:di進行比較,ax/al-es:di置標誌位,修改di的值
lods ds:si所指內容傳送到ax/al中
stos ax/al中的內容傳送到es:si所指的記憶體中
對於以上所有指令,均沒有運算元,但是每個指令後面都必須加乙個字母表示型別,b表示位元組型別(參考imul指令說明了解位元組型別,w表示字型別,例movsb表示傳送乙個位元組,movsw表示傳送乙個字)
四、 移位指令:
shl/sal
cf0橫(向傳輸)
sarcf
起(最後一位補充回去)即符號位不變
shr 跟shl相反,r和l的區別
rol cf
跳(到最後一位補充回去)前面一位不但賦給cf,還補充到最後
ror 同rol,方向改變,不解釋
rcl cf
旋**一圈)不解釋
(記憶小秘訣:發現沒,「超」越)(s)旋橫(rr)起跳(s)
對齊一下,我就這麼記的,求小鄙視 c h a o
五、 其他一些常用指令
lea bx,table 把標號table指示的位址存在bx中
push/pop 進出棧,每執行一次push,sp-2,pop則sp+2
條件轉移指令指令詳細見p105只要記住乙個就可以記住兩個,一般是這樣
說明:在執行條件轉移指令之前一般都會先設定標誌暫存器(見第一頁)的值
所謂設定標誌暫存器的值,就是用計算讓標誌暫存器改變
例如:cmp ax,bx這樣不會影響ax和bx的值,但是會改變標誌暫存器的值,相關的,加減乘除法指令(見計算指令)都會改變標誌暫存器的值,但是同時也會改變ax的值,靈活使用起來就是可以在計算後直接使用條件轉移指令,就不需要cmp了
例:見計算相關指令cmp指令說明
匯程式設計序格式及相關
一、資料段:
data segment (at [****h])括弧內選填,看題目要求
定義變數
data end(反正有幾個變數定義幾個變數就可以結束了)
關於定義變數:假如你完全不會,那麼題目中有幾個英文的,有幾個數字,就這麼寫:英文本母 db 數字 ,?
,數字dup(?)然後稍微看一下對應一下哪個英文本母對應哪個數字,實在不行隨便
二、**段:
code segment
assume ds:data,es:data,cs:code
mian:mov ax,data
mov ds,ax
mov es,ax
設計步驟
mov ah,4ch
int 21h
code end
end main
好了,以上這個是**段的八股文部分,一定要寫的,假如你完全不懂怎麼設計怎麼寫**,你在設計步驟那個地方,寫上一些瞎編亂造的東西也好,或者你連瞎編亂造也不會,那你就隨便亂寫指令,神馬mov ax,英文本母啊之類的都好,多少得到點分數吧
三、巨集定義
巨集名(可以用任意英文本母組合,參考p128-130)
例:巨集名 macro
巨集內容endm
巨集內容只能聽天由命了
四、子程式設計
子程式名(同巨集名)
例: 子程式名 proc
子程式內容
ret內容還是只能聽天由命了
dos系統功能呼叫(int 21h)
mov ah,數字x
int 21h (表示執行第x號功能)
1號功能:輸入乙個字元放在al中
2號功能:輸出乙個字元,字元先放進dl中
9號功能:輸出一串字元,一串字元一定是存在記憶體中的,記憶體位址放在dx中,例:table db 1,2,3,4,5,6,7,8,9(假設資料段有這個內容) mov dx,offset table
mov ah,09
微機原理總結複習
微機原理 2.2.1 8088cpu概述 與8080 85相比,8088效能的提高主要依賴於 1 建立4位元組的指令預取佇列 2 設立位址段暫存器 3 在結構上和指令設定方面支援多為處理器系統。2.2.2 8088cpu引線及其功能 最小模式下的引線 a8 a15 它們是三態輸出引線,負責送出位址。...
微機原理複習總結
重要概念 1 微處理器 微處理器 微處理器是乙個 處理器cpu,由算術邏輯部件alu 累加器和暫存器組 指令指標暫存器ip 程式計數器 段暫存器 時序和控制邏輯部件 內部匯流排等構成。2 微型計算機 微型計算機由微處理器 儲存器 輸入 輸出介面電路和系統匯流排組成。微處理器是計算機系統的核心,也稱c...
微機原理複習總結
第一章計算機基礎知識 本章的主要內容為不同進製計數制計數方法 不同進製數之間相互轉換的方法 數和字元在計算機中的表示方法 簡單的算術運算以及計算機系統的組成。下邊將本章的知識點作了歸類,圖1為本章的知識要點圖,圖1.2為計算機系統組成的示意圖。第二章 8086微處理器 本章要從應用角度上理解8086...