1樓:匿名使用者
在真實模式下,定址採用和8086相同的16位段和偏移量,最大定址空間1mb,最大分段64kb,也就是說當偏移量大於ffffh時,要將段地址加1,偏移量減去10000h,如果所得的偏移量仍然大於ffffh時,再將段地址加1,偏移量減去10000h,直至偏移量小於等於ffffh為止(即取其64k的模)
2樓:匿名使用者
ffffh就是2^16=64k;加上段地址就是實際的地址偏移,一個段內最大定址空間64k。
這是實地址模式下的定址方式。
3樓:匿名使用者
楊季文的這本書確實有很大問題,難點不加詮釋,讓人越讀越產生疑問「則取其64k的模」應該表示為「則取其與64k的模」,64k即65536,十六進位制表示為10000h
運算方法為:
(暫存器+立即數) mod 10000h
用windows自帶的計算器程式(程式設計師模式)可以驗證其正確例如:(ffffh+1) mod 10000h,其結果為0(ffffh+9) mod 10000h,其結果為8
4樓:匿名使用者
那就是從頭開始了0000
組合語言中有效地址和偏移地址的區別?
5樓:匿名使用者
這裡有三個概念 你需要copy
明白 1 實體地址 2.邏輯地址(有效地址)
3.偏移地址
在80x86裡 匯流排介面部件biu 提供了16雙向資料匯流排 20位地址匯流排
8086最大定址1mb的儲存空間 但是在cpu 內部暫存器結構都是16位 顯然不能滿足20位的地址定址要求 所以就將1mb的空間 劃分出若干個邏輯段 每個段最大位64kb 段用一個段地址來標識 段暫存器就是用來存放段的起始地址的 因此 實體地址 有段地址 和 段內偏移量地址兩部分組成
有效地址是這樣表示的:***x:yyyy 前四位是段的起始地址 後四位是 在本段內的偏移地址 就是偏移量 這就是邏輯地址
而實體地址是20位的 它是怎樣得到的呢?
使段地址左移一位 這樣就成了***x0 然後在加上yyyy 這個偏移地址
就得到了 所謂的實體地址了 這樣就得到了公式:
實體地址=段地址*16(就是相當於左移一位)+偏移地址;
這樣說 明白嘛??
6樓:傳說西西里
在80x86裡,把運算元的偏移地址稱為有效地址即「ea」
表示式為:ea=基址+(變址*比例因子)+位移量。
7樓:匿名使用者
偏移地址就是相對位移
彙編中偏移量的作用是什麼?
8樓:阿顏
實體地址就是資料在記憶體中實際存放的位置.因為8086或8088有20條地址線,定址能力有2的20次方,1mbit.而8086或8088內部暫存器是是16位的,無法用一個位完全表示出來.
所以採用段首地址+偏移量兩個暫存器來表示的方式,俗稱pc或cs:ip來表示一個實際的實體地址,這就是所謂的虛擬地址.例如段首地址為0000h,而偏移量的範圍就在0000h-ffffh之間,就表示00000h-0ffffh的實際記憶體單元.
就是說一個段的大小在64kb. sub1 db 03h,35h 這個命令中,sub1表示存放03h,35h這兩個資料的首地址,相當於c語言中字串陣列的首地址.假如這個sub1在資料段中,有專門的資料段暫存器ds,它的實際地址就是ds:
sub1
9樓:絕夢幻劺
組合語言中的定義為: 把儲存單元的實際地址與其所在段的段地址之間的距離稱為段內偏移,也稱為「有效地址或偏移量」。 亦:
儲存單元的實際地址與其所在段的段地址之間的距離. 本質其實是「實際地址與其所在段的段地址之間的距離」求採納
關於組合語言中的loop指令,關於組合語言中的LOOP指令
這個程式迴圈一次,是由cx存放的。cx中存放的是迴圈的次數 程式設計計算2 12 assume cs code code segment mov ax,2 mov cx,11 s add ax,ax loop s mov ax,4c00h int 21h code ends end執行loop s時...
關於組合語言移植性的問題,關於組合語言中的LOOP指令
兄弟,你理解錯了,首先你要明白,組合語言是一種針對具體機器的低階語言,這裡說的不同機器一般來講是指cpu指令系統不相相容的兩種機器,比如常用的8086與51,dsp,arm,等等,他們的指令系統都不是通用的。自然移植到別的機器上不行,舉個例子來說吧,假如51,的p0埠可以用來點亮一盞燈,但是對808...
組合語言中test的用法,彙編中的TEST指令
蘇嘉愛娛樂 test對兩個引數 目標,源 執行and邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。test ax,bx 與 and ax,bx 命令有相同效果,只是test指令不改變ax和bx的內容,而and指令會把結果儲存到ax中。test命令將兩個運算元進行邏輯與運算,並根據運算結果設定...