|

楼主 |
发表于 2015-12-30 22:13:31
|
显示全部楼层
本帖最后由 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
复制代码
|
|