qwe1231069 发表于 2016-9-23 10:24:42

实验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

zzzz76 发表于 2016-9-23 12:15:35

31行32行33行错了,因为ax作为复制的值,高位应该为颜色,低位为字符吧

qwe1231069 发表于 2016-9-23 12:19:43

zzzz76 发表于 2016-9-23 12:15
31行32行33行错了,因为ax作为复制的值,高位应该为颜色,低位为字符吧

大哥我已经编译过了没错
已经实现了功能
不过我不知道为啥我把地址设成奇数,程序才正常

zzzz76 发表于 2016-9-23 12:52:28

这样说吧,程序没问题,你把bx改成任何奇数都行 因为mov word ptr es:,ax,这一步的之前三步,字符对应的颜色被你赋值在低位相应字符在高位(改成奇数才能保证字符在偶数位),你给每个字符赋不同的颜色,你会发现你所有的字符对应的颜色都向前移动了一位

qwe1231069 发表于 2016-9-23 13:32:13

zzzz76 发表于 2016-9-23 12:52
这样说吧,程序没问题,你把bx改成任何奇数都行 因为mov word ptr es:,ax,这一步的之前三步,字符对应的颜 ...

我懂了
谢谢
我就是没绕过那个弯
我是在想内存中是7702,那ax也就是7702,忘了高位和低位
非常感谢你又跟我解释了一遍
页: [1]
查看完整版本: 实验10(1)代码疑问