实验9自己编写的代码没法实现屏幕字符
下面是我的代码 请高手指导一下assume cs:code,ds:datadata 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 cx,3
s: mov si,0
mov bx,0
mov dx,cx
mov cx,16
s0: mov al,
mov byte ptr es:,al
inc bx
add si,2
loop s0 ;此循环实现es段偶偏移地址中存放字符
mov si,1
mov cx,16
s1: mov bx,dx
mov al,
mov byte ptr es:,al
add si,2
loop s1 ;此循环实现es段奇偏移地址中存放属性
mov cx,dx ;恢复外循环cx值
mov ax,es
add ax,16 ;段地址向下移一行
mov es,ax
loop s
mov ax,4c00h
int 21h
code ends
end start
自己调试了很多遍,发现没法利用 mov es:,al指令 来实现对b872基址内存进行修改
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:
mov byte ptr es:,al
inc si
add di,2
loop s0 ;此循环实现es段偶偏移地址中存放字符
mov di,1
mov cx,10h
s1:;不明白楼主此指令作何用 mov bx,dx
mov al,ds:10h ;将颜色属性送入AL
mov byte ptr es:,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:,al指令 来实现对b872基址内存进行修改
lyoal 发表于 2012-11-30 16:06 static/image/common/back.gif
非常感谢,非常感谢 wawa 发表于 2012-12-3 20:19 static/image/common/back.gif
非常感谢,非常感谢
共同学习,共同进步
页:
[1]