本帖最后由 yundi 于 2015-12-30 22:24 编辑 assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
db 'Welcome to masm!';要输出的字符串
db 20h,24h,71h;显示属性
datasg ends
stacksg segment
db 16 dup(0);栈
stacksg ends
codesg segment
start:
;关联各段
mov ax,datasg
mov ds,ax
mov ax,stacksg
mov ss,ax
mov ax,0b800h
mov es,ax
;用#号显示25X80的四个角
mov al,'#'
mov ah,20h
mov es:[0],ax ;(0,0)=>0*160+0*2=0
mov es:[158],ax ;(0,79)=>0*160+79*2=158
mov es:[3840],ax ;(24,0)=>24*160+0*2=3840
mov es:[3998],ax ;(24,79)=>24*160+0*2=3998
;内存的线性结构(偏移量)转换为逻辑上的数组结构(x,y)
mov cx,3
mov bx,0
mov bp,0
s1:;外循环,输出行
push cx;
mov cx,16
mov si,0
mov di,0
s2:;内循环,输出行内字符
mov al,ds:[si];取得字符
mov ah,ds:[16+bp];取得属性
mov es:[1824+bx+di],ax;写入内存,1824=160*11+32*2
add si,1;下个字符
add di,2;下个内存位置
loop s2
pop cx
add bp,1;下个属性
add bx,160;下行内存位置
loop s1
mov ax,4c00h
int 21h
codesg ends
end start
|