1. 程式人生 > 實用技巧 >支援中斷和修改的雙集合組合遍歷演算法

支援中斷和修改的雙集合組合遍歷演算法

四、實驗結論

1.實驗任務1

 1 assume cs:code, ds:data
 2   
 3 data segment
 4         db 'welcome to masm!'
 5         db 2h,24h,71h                
 6 data ends
 7 
 8 
 9 code segment
10 start:
11     mov ax,data
12     mov ds,ax
13 
14     mov ax,0B872h
15     mov es,ax
16 
17     mov cx,3        ;外層迴圈三次
18 mov bx,0 ;記錄當前行數 19 20 s0: mov dx,cx ;記錄下迴圈次數,也是顏色下標 21 mov cx,16 ;每行顯示16個字元,記憶體迴圈16次 22 23 mov di,0 ;記錄記憶體迴圈的次數 24 mov si,0 ;記錄顯示的位置 25 26 s1: mov al,ds:[di] ;低位元組顯示文字 27 mov ah,ds:[bx+16] ;高位元組顯示顏色 28 mov es:[si],ax 29 add si,2
;移動2個視訊記憶體地址 30 inc di ;移動到下一個字元 31 loop s1 32 33 mov cx,dx ;恢復外迴圈的cx值 34 mov ax,es+160 35 mov es,ax ;切換到下一行的位置 36 inc bx ;移動到下一個顏色 37 loop s0 38 39 mov ax,4c00h 40 int 21h 41 42 code ends 43 end start

2.實驗任務2

 1 assume cs:
code, ds:data 2 data segment 3 str db 'try', 0 4 data ends 5 6 code segment 7 start: 8 mov ax, data 9 mov ds, ax 10 11 mov si, offset str 12 mov al, 2 13 call printStr 14 15 mov ah, 4ch 16 int 21h 17 18 printStr: 19 push bx 20 push cx 21 push si 22 push di 23 24 mov bx, 0b800H 25 mov es, bx 26 mov di, 0 27 s: mov cl, [si] 28 mov ch, 0 29 jcxz over 30 mov ch, al 31 mov es:[di], cx 32 inc si 33 add di, 2 34 jmp s 35 36 over: pop di 37 pop si 38 pop cx 39 pop bx 40 ret 41 42 code ends 43 end start

將第3行的str db 'try', 0修改為str db 'another try', 0,結果如下:

將第12行的mov al, 2修改為mov al, 4,結果如下: