|
主题 : : 实验9 大家帮忙看看,为什么显示的都是一样的颜色? [已解决] |
回复[ 5次 ]
点击[ 305次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-10-28 03:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-09-20 22:11 |
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
data ends
stack segment
db 0,0,02,24,71 ;预先在栈里面排好了原色
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,2 ;栈顶指向stacksg:2
mov dx,data
mov ds,dx
mov ax,0b800h
mov es,ax ;显存段地址
mov dx,0000
mov cx,12
s:add dx,160 ;计算屏幕中间的地址
loop s
mov si,dx
mov cx,3
s2:mov bp,0
mov bx,0
pop ah ;把第一个原色出栈到AX的高位
push cx
mov cx,16
s1:mov al,[bx] ;把字符依次送到AX的地位字节
mov es:[si+40H+bp],ax ;一行160字节输入的内容占32字节所以前面留40H个字节
inc bx
add bp,2
loop s1
pop cx
add si,160
loop s2
mov ax,4c00h
int 21h
code ends
end start
大家帮忙看看,为什么我的显示的都是一个颜色?明明我已经用出栈来换了? | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-10-28 04:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-09-20 22:11 |
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 2h,24h,71h
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16 ;指向栈顶
mov dx,data
mov ds,dx
mov ax,0b800h
mov es,ax ;显存段地址
mov dx,0000
mov cx,12
s:add dx,160 ;计算屏幕中间的地址
loop s
mov si,dx
mov di,16 ;指向颜色
mov cx,3
s2:mov bp,0
mov bx,0
push cx
mov ah,[bx+di]
mov cx,16
s1:mov al,[bx]
mov es:[si+40h+bp],ax
inc bx
add bp,2
loop s1
pop cx
add si,160
inc di
loop s2
mov ax,4c00h
int 21h
code ends
end start
重新写了个,这个能通过,始终不明白上面的哪个那里有错。。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-10-29 03:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-09-20 22:11 |
|
|
|
|
|
[第3楼]
[ 回复时间:2009-10-30 09:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2009-10-29 10:41 |
栈的操作是以字为单位的,所以pop ah是有问题的 | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-11-01 22:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-09-20 22:11 |
|
|
|
|
|
[第5楼]
[ 回复时间:2009-11-13 21:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-09-20 22:11 |
此贴由 贴主 于 [ 2009-11-13 21:36 ] 结贴。 结贴原因:问题已解决 | | |
|