|
主题 : : 实验九的困惑? 求解 [待解决] |
回复[ 8次 ]
点击[ 312次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-03-02 07:55 ]
[引用]
[回复]
[ top ] | |
荣誉值: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 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-03-02 13:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-23 13:24 |
我测试过你的代码,是可以在b8000处显示'welcome to masm' 的,但因为是显示在屏幕左上方(第一行),可能会因刷屏而看不见的,你可以试试不用debug,直接在命令行下用cls命令清屏再运行程序 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-03-02 13:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-23 13:24 |
|
|
|
|
|
[第3楼]
[ 回复时间:2011-03-02 20:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-26 12:17 |
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,0720h ;这个地方是的IP设置为 0720h 也就是居中 12*80*2+32*2
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 | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-03-02 20:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-26 12:17 |
一行居中应该是 07c0h,上面写错了.
0720是实验3行的第一行IP | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-03-07 13:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2011-02-04 09:04 |
给个自己的程序:
assume cs:code,ds:data
data segment
db 'welcome to masm!'
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b878h
mov es,ax
mov cx,3
mov bx,40h
s00:
mov di,0
mov si,0
mov dx,cx
mov cx,16
s01:
mov al,[si]
mov es:[bx+di],al
inc si
add di,2
loop s01
add bx,0a0h
mov cx,dx
loop s00
mov cx,16
mov bx,41h
mov di,0
s10:
mov es:[bx+di],byte ptr 2h
mov es:[bx+di+0a0h],byte ptr 24h
mov es:[bx+di+140h],byte ptr 71h
add di,2
loop s10
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-03-08 00:27 ]
[引用]
[回复]
[ top ] | |
荣誉值: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 | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-03-08 00:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-03 21:13 |
Welcome to masm!
,Welcome to masm!
,Welcome to masm!
,[SI] | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-03-23 21:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-23 08:05 |
谢谢各位的回复啊,因为一直在忙也不记得回帖了。
问题自己解决了,确实是因为滚屏的问题没有看到 | | |
|