匯編基礎(chǔ)知識五

0x01 and 和 or 指令

and 邏輯"與"運(yùn)算,按位運(yùn)算都一為一

例:

mov al,01100011B
and al,00111011B
執(zhí)行后
al=00100011B

or 邏輯"或"運(yùn)算节槐,有一為一

例:

mov al,01100011B
or al,00111011B
執(zhí)行后
al=01111011B

0x02 字符串形式

匯編中的字符串有兩種字符串形式

  1. 用引號方式包圍的字符串

    mov al,'hello world
  2. 用ASCII碼輸入字符串

    mov al,'61H,64H,66H'

匯編主要是用ASCII碼運(yùn)算字符串包括的字符串編譯器會幫助計算機(jī)轉(zhuǎn)換成ASCII碼

[bx+idata]

[bx+idata]表示一個內(nèi)存單元哺眯,他的偏移地址是:(bx)+idata(bx中的值加上idata)

mov ax,[bx+200]
將一個內(nèi)存單元的內(nèi)容寫入ax优幸,這個內(nèi)存單元的長度為2個字節(jié)(字單元),存放一個字灾前,偏移地址為bx的數(shù)值加上200趴拧,段地址在ds中

它還有以下格式

mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200

簡單來說[bx+idata]就是他的偏移地址bx+idata指向的地址

[bx+idata]進(jìn)行數(shù)組數(shù)據(jù)處理

例 把字符串轉(zhuǎn)化大小寫

假如有一個代碼段
datasg segment
    db 'hello'
    db 'world'
datasg ends
我們可以這么獲取字符串
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s:  mov al,[bx] ;第一個字符串
    and al,11011111b
    mov [bx],al
    mov ah,[bx+5]   ;第二個字符串
    inc bx
    loop s

C描述就是

char a[5]='hello';
char b[5]='world';

main()
{
    int i;
    i=0;
    do
    {
        a[i]=a[i]&0xDF;
        b[i]=b[i]|0x20;
        i++;
    }
    while(i<5);
}

0x03 SI和DI

si和di是8086CPU中bx功能相近的寄存器,si和di不能分成兩個8位寄存器來使用

mov bx,0
mov ax,[bx]

mov si,0
mov ax,[si]

mov di,0
mov ax,[do]

0x04 總結(jié) 一

常見的指向內(nèi)存單元的還有

mov ax,[bx+si]
mov ax,[bx][si]
mov ax,[bx+si+idata]

常見內(nèi)存地址表示格式
[idata] 用一個常量來表示地址
[bx+idata] 用一個變量+常量表示地址
[bx+si] 用兩個變量表示地址
[bx+si+idata] 兩個變量+一個常量表示地址

一般來說暫存的數(shù)據(jù)我們都可以在棧地址中查找

0x05 數(shù)據(jù)處理的兩個基本問題

現(xiàn)在這里申明兩個符號

  1. reg 用來表示寄存器

    ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si

  2. sreg 用來表示段寄存器

    ds,ss,cs,es

1.處理的數(shù)據(jù)在什么地方?

  • 機(jī)器指令處理的數(shù)據(jù)在何方

絕大部分機(jī)器指令都是進(jìn)行數(shù)據(jù)處理的指令供鸠,大致分為讀取畦贸,寫入,運(yùn)算楞捂。

在指令層面并不會關(guān)心數(shù)據(jù)的值是多少,而關(guān)心它執(zhí)行前的位置

所要處理的數(shù)據(jù)在三個地方:CPU內(nèi)部趋厉,內(nèi)存寨闹,端口

機(jī)器碼 匯編指令 指令執(zhí)行前數(shù)據(jù)的位置
8E1E0000 mov bx[0] 內(nèi)存, ds:0單元
90C3 mov bx,ax CPU內(nèi)部君账, ax寄存器
BB0100 mov bx,1 CPU內(nèi)部繁堡,指令緩沖器
  • 匯編中數(shù)據(jù)地址的表達(dá)方式
  1. 立即數(shù)
  2. 寄存器
  3. 段地址:偏移地址
  • 尋址方式

2.要處理的數(shù)據(jù)有多長?

8086CPU的指令乡数,可以處理兩種尺寸的數(shù)據(jù),byte和word.所以在機(jī)器指令中要指明椭蹄,指令進(jìn)行的是字操作還是字節(jié)操作。

匯編用一下方法處理

1)通過寄存器名指明要處理的數(shù)據(jù)的尺寸

例如寄存器中的al和ax
通過ax操作的都是字

通過al操作的都是字節(jié)

2)在沒有寄存器的情況下净赴,用操作符X ptr指明內(nèi)存單元的長度绳矩,X在匯編中的指令可以為word或Byte

例如

下面的指令中,用word ptr指明了訪問的內(nèi)存單元是一個字單元

mov word ptr ds:[0],1

下面的指令中玖翅,用byte ptr指明了訪問的內(nèi)存單元是一個字單元

mov byte ptr ds:[0],1

在沒有寄存器參與的內(nèi)存單元訪問指令中翼馆,用word ptr或byte ptr顯性的指明所要訪問的內(nèi)存單元的長度是很有必要的,否者CPU無法得知要訪問的單元是字還是字節(jié)單元

在修改的時候就會很明顯的

mov ax,2000H
mov ds,ax
mov byte ptr [1000H],1

他就將內(nèi)存的內(nèi)容變?yōu)?/p>

2000:1000 01 FF FF FF FF

mov ax,2000H
mov ds,ax
mov word ptr [1000H],1

2000:1000 01 00 FF FF FF

0x06 div

div 是觸發(fā)指令金度,使用div做除法的時候應(yīng)注意

  1. 除數(shù):有8位和16位兩種应媚,在一個reg或內(nèi)存單元中
  2. 被除數(shù):默認(rèn)放在AX或DX中如果是8為被除數(shù)就是16位默認(rèn)在AX中存放,如果是除數(shù)是16位猜极,被除數(shù)則為32位中姜,默認(rèn)在DX和AX兩個中存放,DX存放高16位跟伏,AX存放低16位
  3. 結(jié)果:如果除數(shù)為8位丢胚,則AL存儲除法操作的商,AH存儲除法草坪做的余數(shù)酬姆;如果除數(shù)為16位嗜桌,則AX存儲除法操作商,DX存儲除法操作的余數(shù)辞色。

格式如下

div reg
div 內(nèi)存單元

例子

div byte ptr ds:[0]

含義:

(al)=(ax)/((ds)*16+0)的商
(ah)=(ax)/((ds)*16+0)的余數(shù)
div word ptr [bx+si+8]
div byte ptr [bx+si+8]
div word ptr es:[0]

0x07 偽指令dd

db和dw是用于定義字節(jié)型和字形數(shù)據(jù)

dd是用來定義dword 雙字型數(shù)據(jù)的例如

data segment
    db 1
    dw 1
    dd 1
data ends

在data段定義了3個數(shù)據(jù):

第一個數(shù)據(jù)為01H骨宠,在data:0處浮定,占1個字節(jié)

第二個數(shù)據(jù)為0001H,在dat:1處层亿,占一個字

第三個數(shù)據(jù)為00000001H桦卒,在data:3,占2個字

0x08 dup

dup它是和db,dw,dd等數(shù)據(jù)定義偽指令配合使用的匿又,用來進(jìn)行數(shù)據(jù)的重復(fù)

db 3 dup (0)
db 3 dup(0,1,2)

定義了3個字節(jié)方灾,它們的值都是0 相當(dāng)于 db 0,0,0

定義了9個字節(jié),他們是0碌更,1裕偿,2,0痛单,1嘿棘,2,0旭绒,1鸟妙,2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挥吵,隨后出現(xiàn)的幾起案子重父,更是在濱河造成了極大的恐慌,老刑警劉巖忽匈,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件房午,死亡現(xiàn)場離奇詭異,居然都是意外死亡脉幢,警方通過查閱死者的電腦和手機(jī)歪沃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫌松,“玉大人沪曙,你說我怎么就攤上這事∥幔” “怎么了液走?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贾陷。 經(jīng)常有香客問我缘眶,道長,這世上最難降的妖魔是什么髓废? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任巷懈,我火速辦了婚禮,結(jié)果婚禮上慌洪,老公的妹妹穿的比我還像新娘顶燕。我一直安慰自己凑保,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布涌攻。 她就那樣靜靜地躺著欧引,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恳谎。 梳的紋絲不亂的頭發(fā)上芝此,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音因痛,去河邊找鬼婚苹。 笑死,一個胖子當(dāng)著我的面吹牛鸵膏,可吹牛的內(nèi)容都是我干的租副。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼较性,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了结胀?” 一聲冷哼從身側(cè)響起赞咙,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糟港,沒想到半個月后攀操,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秸抚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年速和,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剥汤。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡颠放,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吭敢,到底是詐尸還是另有隱情碰凶,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布鹿驼,位于F島的核電站欲低,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畜晰。R本人自食惡果不足惜砾莱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凄鼻。 院中可真熱鬧腊瑟,春花似錦聚假、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至河胎,卻和暖如春闯袒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背游岳。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工政敢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胚迫。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓喷户,卻偏偏與公主長得像,于是被迫代替她去往敵國和親访锻。 傳聞我的和親對象是個殘疾皇子褪尝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 王爽匯編全書知識點(diǎn)大綱 第一章 基礎(chǔ)知識 機(jī)器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,408評論 0 1
  • 匯編語言的一些注意點(diǎn) 匯編語言是直接在硬件之上工作的編程語言。 CPU(Central Processing Un...
    BackSpace8閱讀 1,772評論 0 1
  • 一期犬、基礎(chǔ)知識 mov ax,bx把BX內(nèi)容送到AX中河哑。匯編語言有3類指令,匯編指令龟虎、偽指令璃谨,其他符號。CPU通過地...
    赤果_b4a7閱讀 1,841評論 0 1
  • 本章對前面的所有內(nèi)容是具有總結(jié)性的鲤妥;我們知道佳吞,計算機(jī)是進(jìn)行數(shù)據(jù)處理、運(yùn)算的機(jī)器棉安,那么有兩個基本的問題就包含在其中:...
    一川煙草i蓑衣閱讀 618評論 0 0
  • 段的綜述 對于數(shù)據(jù)段底扳,將它的段地址放在DS中,用mov垂券、ADD花盐、sub等訪問內(nèi) 存單元的指令時...
    古夜鵬紅閱讀 1,219評論 0 1