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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

8086CPU汇编:一般的标号与直接定址标号

發布時間:2024/4/18 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8086CPU汇编:一般的标号与直接定址标号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:下面程序所用的“:”,“,”標號為中文標號,實際上應該是英文的符號
一、一般的標號
我們先來分析一下下面這段代碼
assume cs:code
……

code segment

s:
代碼0……
code ends
end s

此處標號s代表代碼0存放的起始偏移地址

end s代表著整個程序指令的開始位置,也就是end s中的s代表著指令將會從s標號處開始執行,這就意味著代碼段與數據段在CPU看來實質上是沒有區別的,都是0、1的機器代碼罷了,CPU是通過end s來確認指令開始的位置

可s僅僅是一個偏移地址,它默認的段地址是什么呢?
觀察程序的第一行發現cs:code,其實它的意思就是在code段中偏移地址的缺省段地址為cs,換句話說就是,如果在code段中缺少段地址就默認為cs

舉個例子
assume cs:code
……
data segment

d:
數據0……
data ends
……

code segment

s:
代碼0……
code ends
end s
這段程序中,我們沒有給data段指定缺省段寄地址,那么對于data段中的標號d就無法單獨引用,需要指定段地址
如需給data段設置缺省段地址則需在程序的第一行指定,如下
assume cs:code,ds:data
……
data segment

d:
數據0……
data ends
……

code segment

s:
代碼0……
code ends
end s
像這樣我們就能在整個程序引用標號d

總結: 如果需要引用標號后的數據,則需給它指定段地址或者設置缺省段地址(缺省段地址在assume后指定)

二、直接定址標號
還有一種標號如下
assume cs:code
……

code segment

d db 數據0……

s:
代碼0……
code ends
end s

標號d后面沒有“:”,但是多了一個偽指令db,這里的意思是d后的每一個數據占用一個字節內存單元(db意味著強制轉換為一個字節,若db換為dw則每一個數據占用兩個字節,dd同理)
可見這里的標號d不僅包含了數據0的偏移地址,還包含了數據0中每一個數據占用的內存單元大小
于是有
mov ax,d 等價于 mov ax,cs:[d]
inc d 等價于 inc db ptr cd :[0]
這里看到d自增1,相當于自增一個字節的偏移(db換做dw、dd同理效果)

原理: d = d[0] inc d = d[1] d[bx+si+di]=[d+bx+si+di] d[bx+si+di]就相當于自增了bx+si+di,d[bx+si+di]也就代表從d開始的第bx+si+di個數據,有點c語言數組那味兒了

如圖

既然d不加“:”可以這么用,那么d加“:”呢
d不加“:”但有一層隱含意思:d后面的每個數據占用內存固定,所以能夠很輕松的得到d后第x個數據的位置:d+x*每個數據占用的字節大小
而d加“:”后面的每一個數據占用內存大小不定,所以不能用

總結: d加“:”只代表偏移地址 d不加標號不僅代表偏移地址還表示著后面的每一個數據大小固定數據段一般每個數據大小固定,適合用d不加“:”,且便于訪問 代碼段每個數據大小一般不同,所以d加“:”常用于代碼段 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的8086CPU汇编:一般的标号与直接定址标号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。