|
主题 : : 请问我的实验9程序哪错了,改了一个下午也没改好,显示老是不正常 [待解决] |
回复[ 17次 ]
点击[ 530次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2012-03-17 23:06 ] | |
荣誉值:4
信誉值:6
注册日期:2012-02-25 16:01 |
assume cs:code
data segment
db 'welcome to masm!'
dw 3 dup (0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ss,ax
mov sp,16h
mov ax,0b800h
mov es,ax
mov bx,0
mov bp,0
mov si,6e0h
mov cx,16
s:push cx
mov al,ds:[bx]
mov ah,02h
mov es:[si+bp],ax
add bp,2
inc bx
loop s
s0:pop cx
push cx
mov bx,0
mov bp,0
mov al,ds:[bx]
mov ah,24h
mov es:[si+0a0h+bp],ax
add bp,2
inc bx
loop s0
s1:pop cx
mov bx,0
mov bp,0
mov al,ds:[bx]
mov ah,71h
mov es:[si+140h+bp],ax
add bp,2
inc bx
loop s1
mov ax,4c00h
int 21h
code ends
end start
编译完后运行,在屏幕中间右边只显示出'welcome'这几个字,然后就是几个小方块,第二行就只有一个绿底的小方块,第三行也是一个白底的小方块.请大大们帮下忙,我到底哪出错了,我的系统是深度技术ghostxp_sp3极速纯净版_2011.12,感激不尽!! | | |
|
|
|
|
[第12楼] [ 回复时间:2012-05-11 20:27 ] | |
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35 |
要是需要显示很多种颜色的字符串,很明显,你修改后的程序不够好,不够简洁,至少没我这个简洁。我的程序如果需要的显示的颜色比较多,只需要在段中多加几个颜色上去,然后循环的个数和要显示的行数相对应改下即可。附上我写的程序。
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!' ;要显示的字符串
db 71h,24h,2h ;定义颜色,分别是白底蓝色、绿低红色、绿色
code segment
stack segment ;栈段
dw 8 dup (0)
stack ends
start: mov ax,data
mov ds,ax
mov ax,0b86eh ;0b86e为显存的第11行
mov es,ax
mov ax,stack
mov ss,ax
mov sp,16
mov cx,3 ;以颜色的个数为外循环
mov bp,64 ;显存的第32列,之前有32*2=64个字节
mov bx,0
s0: mov si,cx
dec si ;取颜色段中最后一个单元颜色
mov ah,[bx+16+si] ;ax的高位ah为颜色
push cx ;
mov cx,16 ;字符串个数
mov di,0
mov si,0
s1: mov al,[bx+si] ;ax的低位al为要显示的字符
mov es:[bp+di],ax ;传到显存,以显示字符
inc si
add di,2
loop s1
add bp,160 ;显存下一行
pop cx ;显示完一行颜色字符串后,选取下一个颜色,再次循环显示字符串
loop s0
mov ax,4c00h
int 21h
code ends
end start | | |
|