王爽《匯編語言》(第三版)實驗9解析
阿新 • • 發佈:2018-08-18
src p s 代碼 出棧 語言 註意 指向 .com 第一個
簡介
題目請對照書本
代碼
assume cs:code data segment db ‘welcome to masm!‘ db 02h,24h,71h ; 要求的三個顏色對應的16進制代碼 data ends stack segment db 16 dup(0) ; 也可以是下面的定義法: ; dw 8 dup(0) stack ends code segment start: ; 設置data段,以及ds:bx指向data段的第一個單元, ; 即ds:[bx]的內容就是data段第一個單元的內容 mov ax,data mov ds,ax ;設置顯示緩存區段 mov ax,0b800h ;設置起始緩存 mov es,ax ;設置棧段 mov ax,stack mov ss,ax mov sp,10h ;指向棧頂 ;初始化三個寄存器 mov bx,780h ; 行 從12-14行(註意:從第1行開始計數) mov si,10h ; 顏色的偏移量,三次循環每次 ; 增加 1h 指向下一個顏色 mov cx,3 ; 三次循環改變行 s: mov ah,ds:[si] ;顏色事先存放在ah中 push cx push si mov cx,16 ; 16次循環改變列 mov si,64 ; 這裏的si的意義是多少列, ; 為什麽從64列開始呢? ; (1)字符串為32字節,16字節ASCLL碼,16字節屬性 ; (2)每一行有160列,那麽余下有 160-32=128列為空白 ; 要使得字符串居中顯示,那麽字符串的左邊和右邊 ; 都應該是64字節(128/2),而列數是從0開始計數, ; 所以左邊的64字節為0-63,所以這裏偏移量為64 mov di,0 s0: mov al,ds:[di] ;將date段中的字符一個一個傳入es中 mov es:[bx+si],al ; 低位存放字符 mov es:[bx+si+1],ah ; 高位存放顏色 add si,2 ;顯示緩存區字符ASCII碼偏移量為2 add di,1 ;data段字符的偏移量,每次加 1 loop s0 pop si pop cx ;後進先出,先出棧si,再出棧cx add si,1h ;指向下一個顏色 add bx,0a0h ;指向下一行 160=0a0h loop s mov ax,4c00h int 21h code ends end start
結果
編譯、鏈接、執行即可得到我們想要的結果。
王爽《匯編語言》(第三版)實驗9解析