代碼及解釋如下:
;在屏幕的指令位置(8行8列處以指定顏色輸出 data段中的字符串),可記錄到Blogassume cs:codedata segment db 'welcome to masm',0 ;data段定義好要輸出的字符串,以'0'作為結束標志data endsstack segment db 128 dup(0)code segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,128 call init_data ;初始化數據 call show_str ;顯示的方法 mov ax,4c00h int 21h;============================================================init_data: mov ax,0B800h mov es,ax mov dh,8 ;指定行號 mov dl,8 ;指定列號 mov cl,00000011B;指定顏色 mov si,0 mov di,0 ret;============================================================show_str: call clear_screen ;清屏 call getRow ;獲取指定行號的字節偏移數 call getCol ;獲取指定列號 call show_String ;真正的顯示字符串方法 ret;============================================================clear_screen: push cx push dx push es push bx mov cx,2000 ;一頁有2000字符,每個字符2個字節 mov dx,0700h ;將屏幕上的雙字用0700h代替 mov bx,0clearScreen: mov es:[bx],dx add bx,2 loop clearScreen pop bx pop es pop dx pop cx ret;============================================================show_String: push cx ;保存下面將要用到的寄存器 push ds push es push dx push si push di mov dh,cl ;高位存顏色 mov cx,0showString: mov cl,ds:[si] jcxz showStringRet mov dl,ds:[si] ;低位存字符 mov es:[di],dx add di,2 inc si jmp showString showStringRet: pop di ;還原寄存器 pop si pop dx pop es pop ds pop cx ret ;============================================================getRow: mov al,dh mov bl,160 ;一行80字符,160字節 mul bl mov di,ax ret;============================================================getCol: mov al,dl mov bl,2 mul bl add di,ax ret;============================================================ code endsend start
新聞熱點
疑難解答
圖片精選