|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- assume cs:codesg
- data segment
- db 'welcome to masm!'
- db 02h,24h,71h
- data ends
- stack segment
- dw 8 dup(0)
- stack ends
- codesg segment
- start: mov ax,stack
- mov ss,ax
- mov sp,16 ;初始化栈
- mov ax,0b872h
- mov es,ax ;初始化扩展段,指向待写入的显存地址
- mov ax,data
- mov ds,ax ;ds指向待写入的数据
-
- mov cx,3
- mov bx,0
- mov si,0
- mov di,0
- mov dx,0 ;循环初始化
-
- s1: push cx ;由于内层有嵌套循环,将外层循环的cx推入栈中暂存
- mov cx,16
- s: mov al,ds:[si] ;将数据段中的字符数据取出,写入ax低位
- mov ah,ds:10h[bx] ;将数据段中的字符显式属性取出,写入ax高位(同一行的字符属性相同)
- mov es:[di],ax ;将字符数据和字符属性同时写入指定缓存区域
- inc si ;si是源数据地址的偏移地址,+1指向下一个字符
- add di,2 ;di是待写入显存的偏移地址,+2指向下一个显式字符的地址
- loop s
-
- pop cx ;取出外层循环的值
- mov si,0
- mov di,0 ;偏移地址清零,准备写入下一行数据
- add dx,0a0h ;dx记录移动到下一行需要的偏移
- add di,dx ;偏移地址指向下一行
-
- inc bx ;bx控制写入的字符属性
- loop s1
-
- mov ax,4c00h
- int 21h
- codesg ends
- end start
复制代码 |
|