⑴ 匯編語言與介面技術怎麼求物理地址
1.匯編語言 SI DI BX BP SS DS
SI: 16位寄存器,源變址寄存器
DI: 16寄存器,目變址寄存器
BX: 16位寄存器(28位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指針寄存器
SS : 16位段寄存器作用存放前堆棧段段址般SP連用
DS: 16段寄存器, 作用存放前數據段段址
2.根據些求物理址
面幾寄存器跟求物理址談關系.
公式: 物理址 = 基礎址 + 偏移址 = CS*10H(基礎址)+ IP(偏移址)
CS: 16位段寄存器,存放前代碼段段址
IP: 存放條要執行指令偏移址
LZ明白追問
⑵ 匯編語言 有關段跨越物理地址的計算問題
是不是求ES:[BX]指向的物理地址的問題?
是的話,可以這樣計算:
(ES)*16+(BX)=物理地址
2100H*16+0100H=21100H
補充:
源操作數就是ES:[BX],它的物理地址可由上面公式計算出來,就是21100H
⑶ 匯編語言 SI DI BX BP SS DS 是什麼 怎樣根據這些求物理地址
SI、DI、BX、BP是8086CPU可用來作指針使用的寄存器,一般用來表示一個偏移量,具體的和定址方式有關。
SS、DS是段地址寄存器。
由於8086CPU是16的,而其存儲容量可達1MB,也就是20位的定址空間,因此編程時用兩個16位的地址來表示,即 段地址:偏移地址,它和實際地址,也就是物理地址的關系是:
物理地址=段地址×16+偏移地址
對於上面的寄存器,當作地址使用時,根據定址方式不同,有一種默認關系,只要指令中出現BP作地址的,則其段地址為SS,否則就為DS。當然還有段前綴一說,這要看實際情況來定了。
比如:
MOV AX,[BX];則其物理地址=DS×16+BX
MOV AX,[BP];則其物理地址=SS×16+BP
MOV AX,[BX][SI] ;則其物理地址=DS×16+(BX+SI)
MOV AX,[BP][SI];則其物理地址=SS×16+(BP+SI)
⑷ x86匯編語言求物理地址演算法
也沒那種最初的玩泥巴的心思。指條路你自己學著走:
需要指出,此演算法嚴格上是有缺陷的,其正確的前提是假設bx中的段地址高四位總為零,如此bx*10H就不會溢出,同時也需要加上偏移量後bx不產生溢出,這樣沖從限制下的結果才是正確的。
該演算法正確的前提是所得的物理地址高四位都是零,所以就不需多考慮,只需輸出0XXXXH即可。
至於將ax或內存的二進制以十六進制字元輸出,網路上有許多現成的簡單演算法,既然你都沒興趣自己嘗試,那就自己去找找吧,阿門。。。
真要得到任意二十位偏移物理地址,需要用到dx:ax
lds ax,list
mov bx,10H
xor dx,dx
mul bx
;至此得到段地址的20位物理地址存於dx:ax中,其中高12位始終為零也無使用意義
mov cx,offset list
add cx,2
;至此得到目標內存單元的偏移量
add ax,cx
adc dx,0
;至此得到目標內存單元的20位物理地址存於dx:ax的低20位
;輸出dx:ax的低20位即可,阿門。。。。
⑸ 匯編語言 物理地址問題
這個答案是錯誤的,正確的是:7E814H。
1、先計算數據區末字的偏移地址
16個字佔20H位元組的內存空間,0DDF6H+20H=DE16H,這是末字數據後面的偏移地址,末字的偏移地址為DE16H-2=DE14H。
2、再計算末字的物理地址
物理地址=段地址*10H+偏移地址=70A0H+DE14H=7E814H。
⑹ 匯編如何計算目標操作數的物理地址
第一個為ES(段基址)*16+SI(偏移地址)第二個為SS(段基址)*16+BP+SI+6。至於段基址的判斷為當含有BP時,段基址為SS,而如第一個已經給出段基址了為ES,其餘情況均為DS
⑺ 匯編語言SI、DI、BX、BP、SS、DS分別是什麼怎樣根據這些求物理地址
1.匯編語言 SI DI BX BP SS DS 是什麼
SI: 16位寄存器,源變址寄存器
DI: 16為寄存器,目的變址寄存器
BX: 16位寄存器(可分成2個8位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指針寄存器
SS : 16位段寄存器,作用是存放當前堆棧段的段地址,一般和SP連用
DS: 16為段寄存器, 作用是存放當前數據段的段地址
2.怎樣根據這些求物理地址
上面的這幾個寄存器跟求物理地址談不上關系.
有個公式: 物理地址 = 基礎地址 + 偏移地址 = CS*10H(基礎地址)+ IP(偏移地址)
CS: 16位段寄存器,存放當前代碼段的段地址
IP: 存放下一條要執行的指令的偏移地址
LZ如有不明白的地方,可追問
⑻ 匯編語言:SI、DI、BX、BP、SS、DS分別是什麼怎樣根據這些求物理地址
1.匯編語言 SI DI BX BP SS DS 是什麼
SI: 16位寄存器,源變址寄存器
DI: 16為寄存器,目的變址寄存器
BX: 16位寄存器(可分成2個8位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指針寄存器
SS : 16位段寄存器,作用是存放當前堆棧段的段地址,一般和SP連用
DS: 16為段寄存器, 作用是存放當前數據段的段地址
2.怎樣根據這些求物理地址
上面的這幾個寄存器跟求物理地址談不上關系.
有個公式: 物理地址 = 基礎地址 + 偏移地址 = CS*10H(基礎地址)+ IP(偏移地址)
CS: 16位段寄存器,存放當前代碼段的段地址
IP: 存放下一條要執行的指令的偏移地址
LZ如有不明白的地方,可追問
⑼ <匯編語言> 里說物理地址=段地址乘16d+偏移地址,那麼段地址*16d是如何計算
不是算出來的,這個和你的系統有關,這個根據你用的匯編支持的地址寬度、字長等等決定的,確切地是你匯編對應的CPU規定死的。
16d=10h=10000b,十進制是乘以16,16進制左移一位,2進制是左移4位。
這個其實是進制乘法的問題,你可以按照普通的豎式乘法計算,只不過,16進制是逢G(F+1)進1,2進制是逢2進1。
就像你平時做十進制的x*10的時候,很自然地會在後面加個0,16進制、2進制也是看到*10可以在後面加個0的。