日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

汇编之偏移地址几种常用写法

發(fā)布時間:2024/8/26 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 汇编之偏移地址几种常用写法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

----------------------------匯編學(xué)習(xí)筆記------------------------

------8086處理器---------------

//[bx+20]表示的是一個內(nèi)存單元

指令mov ax,[bx+20]也可以寫成如下格式(常用):
mov ax,[20+bx]
mov ax,20[bx]
mov ax,[bx].20

Dx,Di,Si的段地址默認(rèn)是DS,如果沒有指明(Dx,DI,Si)屬于哪個段的偏移地址,默認(rèn)是DS的偏移地址!

--------------------

[bx+si]表示一個內(nèi)存單元,它的偏移地址為(bx)+(si)(即bx中的數(shù)值加上si中的數(shù)值)。
我們看下指令mov ax,[bx+si]的含義:
將一個內(nèi)存單元的內(nèi)容送入ax,這個內(nèi)存單元的長度為2字節(jié)(字單元),存放一個字,偏移地址為bx中的數(shù)值加上si中的數(shù)值,段地址在ds中。

指令mov ax,[bx+si]的數(shù)學(xué)化的描述為:
(ax)=( (ds)*16+(bx)+(si) )
該指令也可以寫成如下格式(常用):
mov ax,[bx][si]

-------------001---開始---------------

(1)在8086CPU 中,只有這4個寄存器(bx、bp、si、di)可以用在“[…]” 中

正確的指令
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]

錯誤的指令
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]

(2)在“[…]” 中,這4個寄存器(bx、bp、si、di)可以單個出現(xiàn),或只能以四種組合出現(xiàn):
bx和si、bx和di、bp和si、bp和di

正確的指令
mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]

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

錯誤的指令
mov ax,[bx+bp]
mov ax,[si+di]

(3)只要在[…]中使用寄存器bp,而指令中沒有顯性的給出段地址,段地址就默認(rèn)在ss中。比如:

mov ax,[bp] 含義: (ax)=((ss)*16+(bp))
mov ax,[bp+idata] 含義:(ax)=((ss)*16+(bp)+idata)
mov ax,[bp+si] 含義:(ax)=((ss)*16+(bp)+(si))
mov ax,[bp+si+idata] 含義:(ax)=((ss)*16+(bp)+(si)+idata)

------------001結(jié)束---------------------

--------------002開始-----------

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

對于這個問題,匯編語言中用以下方法處理。
(1)通過寄存器名指明要處理的數(shù)據(jù)的尺寸。
(2)在沒有寄存器名存在的情況下,用操作符X ptr指明內(nèi)存單元的長度,X在匯編指令中可以為word或byte。
(3)其他方法

下面的指令中,寄存器指明了指令進(jìn)行的是字操作:
mov ax,1
mov bx,ds:[0]
mov ds,ax
mov ds:[0],ax
inc ax
add ax,1000

下面的指令中,寄存器指明了指令進(jìn)行的是字節(jié)操作:
mov al,1
mov al,bl
mov al,ds:[0]
mov ds:[0],al
inc al
add al,100

下面的指令中,用word ptr指明了指令訪問的內(nèi)存單元是一個字單元:
mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2

下面的指令中,用byte ptr指明了指令訪問的內(nèi)存單元是一個字節(jié)單元:
mov byte ptr ds:[0],1
inc byte ptr [bx]
inc byte ptr ds:[0]
add byte ptr [bx],2

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

--------------002結(jié)束-----------------

--------------------003開始--------dup-----

dup示例
db 3 dup (‘a(chǎn)bc’,’ABC’)
定義了18個字節(jié),它們是
‘a(chǎn)bcABCabcABCabcABC’,
相當(dāng)于db ‘a(chǎn)bcABCabcABCabcABC’

可見,dup的使用格式如下:
db 重復(fù)的次數(shù) dup (重復(fù)的字節(jié)型數(shù)據(jù))
dw 重復(fù)的次數(shù) dup (重復(fù)的字型數(shù)據(jù))
dd 重復(fù)的次數(shù) dup (重復(fù)的雙字?jǐn)?shù)據(jù))

dup是一個十分有用的操作符
比如我們要定義一個容量為 200 個字節(jié)的棧段,如果不用dup,則必須用這樣的格式:
stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends

------------------003結(jié)束--------dup--

總結(jié)

以上是生活随笔為你收集整理的汇编之偏移地址几种常用写法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。