|
主题 : : 实验九的困惑? 求解 [待解决] |
回复[ 8次 ]
点击[ 313次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2011-03-02 07:55 ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-23 08:05 |
在做实验九的时候弄了好久一直没弄出来,
为了简化问题,我先写的是将字符显示成绿色的字。
我给的代码中总是不能改变B800:0000中的值,
当然也就看不到结果了。
想了很久没想出来,望有高手指点一二。
代码如下:
assume cs:code,ds:data
data segment
db 'welcome to masm'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0B800h
mov es,ax
mov bx,0
mov si,0
mov di,0
mov cx,15
s:
mov dl,[si]
mov es:[di],dl
mov dh,2h
mov es:[di+1],dh
add si,1
add di,2
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第6楼] [ 回复时间:2011-03-08 00:27 ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-03 21:13 |
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome to masm!'
dw 02h,24h,71h ;三种颜色的代码
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:mov ax,data ;设置字符所在为ds段
mov ds,ax
mov ax,stack ;设置载空间
mov ss,ax
mov sp,16
mov ax,0b800h ;设置输出为ES段
mov es,ax
mov bp,1030 ;bp=80*12行+70=1030差不多在中间了
mov si,16 ;设置si为颜色所在内存地址
mov cx,3 ;显示3行所以设外层loop为3
s1:mov di,0
mov bx,0
push cx ;外层loop用来保存cx值
mov cx,16
s:push [bx] ;把ds:0中的字显示到屏幕第12行中间
pop es:[bp+di] ;这里用di来每显一个字后向2字节
push [si] ;把颜色输入
pop es:1[bp+di]
inc bx
add di,2 ;这里用di来每显一个字后向2字节
loop s
add si,2 ;换一种颜色
add bp,160 ;屏幕显示换一行
pop cx ;取回外层loop的CX值
loop s1
mov ax,4c00h
int 21h
code ends
end start | | |
|