用EMU8086實現段間遠呼叫

2021-10-10 06:14:11 字數 1234 閱讀 5153

本程式設定了兩個**段,在乙個**段中使用call指令呼叫另乙個**段中的乙個過程,過程名為set_bx

emu8086的匯程式設計序沒有智慧型到直接使用 call far ptr set_bx 就能自動幫你把段基址和偏移位址傳遞給 call 指令,必須要手動儲存段基址和偏移位址,用段間間接遠呼叫來實現

stack

segment

stack

stapn

dw32

dup(0)

stack

ends

data

segment

addressdw2

dup(?)

;定義雙字變數用來存放遠跳轉的cs:ip

data

ends

code2

segment

set_bx

proc

farmov

bx,1234h

retf

set_bx

endp

movbx

,3333h

code2

ends

code

segment

assumecs:

code,ds

:data,ss

:stack

start

:movax,

stack

movss,ax

movsp,64

;設定堆疊段

movax,

data

movds,ax

;設定資料段

movdi,0000h ;資料段偏移位址

mov[di

],offset

set_bx

incdi

incdi

movax

,code2

mov[di]

,axcall

dword

ptraddress

movax

,1234h

int 21h

code

ends

endstart

也可以準備乙個附加段,用來存放自定義的proc過程的段基址和偏移位址,並且給這個雙字變數命名為 adddress_【功能】,例如 address_set_bx,就表示 set_bx 這個過程在**段中的段基址和偏移位址存放在記憶體中的 address_set_bx 雙字單元中。

emu8086 資料排序

方法 冒泡法 顯示 int 21,功能號9 you may customize this and other start up templates the location of this template is c emu8086 inc 0 com template.txt name sort ...

Proteus與emu8086實現流水燈聯調

poteus與emu8086聯調實現流水燈 按我們的原理圖可以看到io埠是通過位址線進行直接編址,但我們最開始仍然用僵化的思維想問題,覺得埠嘛,肯定是按書上的寫吧!然後什麼303h 304h最常見的這些書上常用的8255和8253的位址就寫程序式裡了。其實寫的時候我心裡就比較懸,所以最後結果沒出來,...

匯程式設計序練習emu8086

連續輸入三個字母 不限大小寫 將三個字母的ascii碼相加後將所得的結果以十六進製制數的形式顯示到螢幕上 data segment buff db 200 db 0 db 200dup 0 xle0 db 0 xle1 db 0 xle2 db 0 val1 db 0 val2 db 0 endd ...