記一次8086彙編除錯 關於編寫 7ch 中斷例程輸出字串亂碼
阿新 • • 發佈:2018-11-09
記一次8086彙編除錯 關於編寫 7ch 中斷例程輸出字串亂碼
輸出welcome to asm
data segment DB 'welcome to asm ','$' data ends code segment start: mov ah,2 ;置游標 mov bh,0 ;第0頁 mov dh,12 ;dh中放行號 mov dl,35 ;dl中放列號 int 10h mov ax,data mov ds,ax mov dx,0 ;ds:dx指向字串的首地址data:0 mov ah,9 int 21h mov ax,4c00h int 21h code ends end start
編寫內中斷輸出welcome to asm
assume ds:data,cs:code DATA SEGMENT DB 'welcome to asm!','$' data ends code segment start: mov ax,cs mov ds,ax mov si,offset capital mov ax,0 mov es,ax mov di,200h mov cx,offset capitalend - offset capital cld rep movsb mov ax,0 mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 mov ax,4c00h int 21h capital: mov ah,2 ;置游標 mov bh,0 ;第0頁 mov dh,12 ;dh中放行號 mov dl,35 ;dl中放列號 int 10h mov ax,data mov ds,ax mov dx,0 ;ds:dx指向字串的首地址data:0 mov ah,9 int 21h mov ax,4c00h int 21h iret capitalend:nop code ends end start
輸出如圖 前者能正常輸出 後者亂碼。
對著debug的黑框框調了一整晚後
終於發現了問題
呼叫編寫的7ch內中斷後 賦給ax的data的段地址並不是data的真正段地址
裡面的內容自然也不是我們想要輸出的字串
內中斷會影響到安裝程式之前的data段地址。
把data段放到內中斷後就行了