org 07c00h ;告訴彙編編譯器,程序的段地址是07c00h
;org指令明確告訴編譯器,我們的程序的段地址是7C00H
;而不是原來的0000
;org指令明確告訴編譯器,我們的程序的段地址是7C00H
;而不是原來的0000
mov ax,cs ;int 彙編指令 根據終端編號,int 10h顯示字符串。
;bios中的現實字符串的。
mov es,ax
mov bp,msgstr ;es:bp 指向的內容就是我們要顯示的字符串的地址了。
mov cx,13 ;顯示的長度
mov dh,12 ;顯示的行號
mov dl,36 ;顯示的列號
mov bh,0 ;顯示的頁數
mov al,1 ;顯示的是字符串
mov bl,0ch ;顯示的字符屬性
mov es,ax
mov bp,msgstr ;es:bp 指向的內容就是我們要顯示的字符串的地址了。
mov cx,13 ;顯示的長度
mov dh,12 ;顯示的行號
mov dl,36 ;顯示的列號
mov bh,0 ;顯示的頁數
mov al,1 ;顯示的是字符串
mov bl,0ch ;顯示的字符屬性
mov ah ,13h ;明確調用13h子程序
msgstr: db "hello my os !"
int 10h
times 510-($-$$)db 0 ;重複N次每次填充爲0
dw 55aah
jmp $ ;不斷的跳轉到當前位置,是個死循環;
現象:當把這段程序編譯後,寫入到虛擬軟盤,使用virtualpc 2007啓動該虛擬軟盤;
只有hello my os 或者hello os 可以正確的打印到虛擬機中央,而改成 yatou
os 就沒法顯示。
分析:經過阿燦兄(彙編高手)知,msgstr: db "hello my os !" 所寫的位置不對;
被當成代碼執行了。所以出錯。
結果:經改正OK!
改後代碼爲:
org 07c00h ;告訴彙編編譯器,程序的段地址是07c00h
;org指令明確告訴編譯器,我們的程序的段地址是7C00H
;而不是原來的0000
;org指令明確告訴編譯器,我們的程序的段地址是7C00H
;而不是原來的0000
mov ax,cs ;int 彙編指令 根據終端編號,int 10h顯示字符串。
;bios中的現實字符串的。
mov es,ax
mov bp,msgstr ;es:bp 指向的內容就是我們要顯示的字符串的地址了。
mov cx,16 ;顯示的長度
mov dh,12 ;顯示的行號
mov dl,36 ;顯示的列號
mov bh,0 ;顯示的頁數
mov al,1 ;顯示的是字符串
mov bl,0ch ;顯示的字符屬性
mov es,ax
mov bp,msgstr ;es:bp 指向的內容就是我們要顯示的字符串的地址了。
mov cx,16 ;顯示的長度
mov dh,12 ;顯示的行號
mov dl,36 ;顯示的列號
mov bh,0 ;顯示的頁數
mov al,1 ;顯示的是字符串
mov bl,0ch ;顯示的字符屬性
mov ah ,13h ;明確調用13h子程序
int 10h
msgstr: db "hello yatou os !"
times 510-($-$$)db 0 ;重複N次每次填充爲0
dw 55aah
times 510-($-$$)db 0 ;重複N次每次填充爲0
dw 55aah
jmp $ ;不斷的跳轉到當前位置,是個死循環;
霍霍!