|
发表于 2012-11-30 16:06:00
|
显示全部楼层
- data segment
- db 'Welcome to masm!'
- db 71h,24h,02h
- data ends
- code segment
- start: mov ax,data
- mov ds,ax
-
- mov ax,0b872h
- mov es,ax
- mov bx,0 ;使用BX来定义目标行,每循环一次加16字节
- mov bp,0 ;索引颜色,因为每一行颜色是相同的,故单独放一个寄存器中
-
- mov cx,3
- s: mov dx,cx ;将CX行循环数存入BX中,以备后面提取,建议楼使用栈来存放,以方便后面章节中对栈深入理解
- mov si,0 ;索引原数据列
- mov di,0 ;索引目标数据列,建议使用DI,避免代码过多时眼花缭乱
-
- mov cx,10h
- s0:mov al,ds:[si]
- mov byte ptr es:[bx+di],al
- inc si
- add di,2
- loop s0 ;此循环实现es段偶偏移地址中存放字符
-
-
- mov di,1
- mov cx,10h
- s1:;不明白楼主此指令作何用 mov bx,dx
- mov al,ds:10h[bp] ;将颜色属性送入AL
- mov byte ptr es:[bx+di],al
- add di,2
- loop s1 ;此循环实现es段奇偏移地址中存放属性
-
- inc bp
- mov cx,dx ;恢复外循环cx值
- ;mov ax,es
- add bx,0a0h ;段地址向下移一行
- ;mov es,ax
- loop s
-
- mov ax,4c00h
- int 21h
- code ends
- end start
- ;这一段代码下来,寄存器快用光了,如果是大段代码就不够用,所以栈是最好的选择。
- ;自己调试了很多遍,发现没法利用 mov es:[si],al指令 来实现对b872基址内存进行修改
复制代码
|
|