实验10(1)代码疑问
本帖最后由 qwe1231069 于 2016-9-23 13:32 编辑从昨天开始编写,今天刚刚完成(其中失败了若干次,太笨了没办法)
主要想问下显存的地址,8行3列不应该是8*160+3*2=1286==506h,我用这个地址结果出来的都是一堆颜色
我改成5后就行了,不太懂。地址从0开始,6不正是个偶字节吗,字符放在偶字节中,不对吗?另外我代码写的太难看了,希望提些改进意见。
assume cs:code,ds:data
data segment
db'welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: mov ax,0b800h
mov es,ax
mov bl,dh
mov bh,0
mov ax,160
mul bx
mov bx,5
add bx,ax ;bx==要复制的显存地址
mov al,cl
s: mov ah,ds:
mov ch,ah
mov word ptr es:,ax ;ax是复制的值
inc si
add bx,2
mov cl,01
loop s
ret
code ends
end start 31行32行33行错了,因为ax作为复制的值,高位应该为颜色,低位为字符吧 zzzz76 发表于 2016-9-23 12:15
31行32行33行错了,因为ax作为复制的值,高位应该为颜色,低位为字符吧
大哥我已经编译过了没错
已经实现了功能
不过我不知道为啥我把地址设成奇数,程序才正常 这样说吧,程序没问题,你把bx改成任何奇数都行 因为mov word ptr es:,ax,这一步的之前三步,字符对应的颜色被你赋值在低位相应字符在高位(改成奇数才能保证字符在偶数位),你给每个字符赋不同的颜色,你会发现你所有的字符对应的颜色都向前移动了一位 zzzz76 发表于 2016-9-23 12:52
这样说吧,程序没问题,你把bx改成任何奇数都行 因为mov word ptr es:,ax,这一步的之前三步,字符对应的颜 ...
我懂了
谢谢
我就是没绕过那个弯
我是在想内存中是7702,那ax也就是7702,忘了高位和低位
非常感谢你又跟我解释了一遍
页:
[1]