彙編 --實現一個迴圈程式 loop和cx
assume cs:code,ds:data,ss:stack
data segment db'welcome to masm!';定義要顯示的字串(共16位元組) db 02H,24H,71H;定義字元的屬性 data ends
stack segment dw 8 dup(0) stack ends
code segment
start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,10H
xor bx,bx;bx清零,用來索引顏色 mov ax,0b872H;算出螢幕第12行中間的視訊記憶體的段起始位置放入ax中
mov cx,3;s3迴圈控制行數,要顯示三個字串外迴圈為3次 s3: push cx;三個進棧操作為外迴圈s3儲存相關暫存器的值 push ax;以防止它們的值在內迴圈中被破壞 push bx
mov es,ax;此時es為螢幕第12行中間的視訊記憶體的段起始位置
mov si,0;si用來索引程式碼列的字元 mov di,0;di用來定位目標列
mov cx,10H ;s1迴圈控制存放的字元,一個字串中含有10H個位元組內迴圈為10H次 s1: mov al,ds:[si] mov es:[di],al inc si add id,2 loop s1;吃迴圈實現偶地址中存放字元
mov di,1;設定di的值為1,為在視訊記憶體奇數地址中存放字元的顏色屬性做準備 pop bx mov al.ds:[bx+10H];取消顏色屬性 inc bx
mov cx,10H;第二個內迴圈也為10H s2: mov es:[di],al add di 2 loop s2;此迴圈實現奇數地址存放字元的顏色屬性
;以下4句為下一趟外迴圈做準備 pop ax add ax,0AH;將視訊記憶體的段地址起始地址設定為當前行的下一行 ;[在段地址中甲0aH,相當於在偏移地址中加了0a0h(=160d)] pop cx loop s3
mov ax,4C00H int 21H
code ends end start