推薦工具Win-Masm
assume?cs:code,ds:data
??;數據段
??;----------------------------------------------
data?segment

data?ends

??;代碼段
??;----------------------------------------------
code?segment????
start:
??;安裝do0子程序到0:200h
??;----------------------------------------------
??mov?ax,cs?????????;段寄存器之間不準直接傳遞數據
??mov?ds,ax??????????????????????
??mov?si,offset?do0
?
??mov?ax,0
??mov?es,ax
??mov?di,200h
??
??;movsb將ds:si指向的內存單元中的字節送入es:di中
??;if(DF==0){?si++;di++}?else{si--,di--}?
?????????????????
??mov?cx,offset?do0end-offset?do0??;設置復制代碼的長度
??cld??????????????????????????????;DF=0??
??rep?movsb????????????????????????;等價于while(cx--!=0)?movsb;
??
??;設置中斷程序0指向0:200h處
??;--------------------------------
??mov?ax,0
??mov?es,ax
??;中斷向量占兩個字,高字地址存放段地址,低字地址存放偏移地址
??mov?word?ptr?es:[0*4],200h
??mov?word?ptr?es:[0*4+2],0
??
??;調用0號中斷
??;---------------------------------
??int?0
???
??;程序返回dos
??mov?ax,4c00h
??int?21h

??;do0子程序:顯示字符串"hello?world!"
??;----------------------------------
do0:
?jmp?short?do0start
?db?"hello?world!"

do0start:
?mov?ax,0b800h???????;0b800h地址為顯存地址
?mov?es,ax
?mov?di,12*160+36*2
?
?mov?ax,cs
?mov?ds,ax
?mov?si,202h

?mov?cx,12
?s:mov?al,[si]
???mov?es:[di],al
???inc?si
???add?di,2
?loop?s
?
?mov?ax,4c00h
?int?21h??
do0end:nop

code?ends
end?start