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 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加“:”呢
d不加“:”但有一層隱含意思:d后面的每個數據占用內存固定,所以能夠很輕松的得到d后第x個數據的位置:d+x*每個數據占用的字節大小
而d加“:”后面的每一個數據占用內存大小不定,所以不能用
總結
以上是生活随笔為你收集整理的8086CPU汇编:一般的标号与直接定址标号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu中实验环境配置《操作系统原
- 下一篇: IEEE浮点数表示