~疯子 发表于 2011-11-30 11:08:10

求解 汇编call和ret的问题 那位老师给解答下 谢谢

为什么有的不能做为列的数呢
如列现在是10我把它改为3就出错这是什么原因
assume cs:c_s,ds:d_s
                ;定义数据段
                d_s        segment
                        db 'Welcome to masm!'        ;要显示的数据
                d_s        ends
               
                ;定义代码段
                c_s        segment
                a:        mov ax,d_s
                        mov ds,ax        ;指定源数据地址
                       
                        ;参数
                        mov dh,8        ;行
                        mov dl,10        ;列
                        mov cl,5        ;颜色属性
                       
                        ;调用过程
                        call Q
                        mov ax,4c00h
                        int 21h
                       
                       
                        ;过程
                Q:        mov ax,0b800h
                        mov es,ax        ;指定目的地址
                       
                        mov si,0                ;索引内存单元
                        mov bx,0                ;索引字符数据
                        mov bp,0                ;索引行号
                       
                        ;计算行和列
                        mov ax,160
                        mul dh
                        add al,dl
                        mov bp,ax
                       
                        ;设置颜色属性
                        mov ah,cl
                       
                        mov cx,16
                s:        mov al,ds:                ;字符数据
                        mov es:,ax
                        inc bx                ;偏移字符数据加1
                        add si,2        ;偏移内存单元加2,偏移一个字单元
                        loop s        ;循环
                        ret                ;返回调用者
                       
                c_s        ends
               
end a

cqy55555 发表于 2011-11-30 11:30:51

Q中列的处理有问题。显示一个字符要用2个字节,也就是说列的元素基本单元是2个字节。
所以处理列时还得乘2。

zzmatrix 发表于 2011-11-30 11:45:08

是啊,列还要乘2

                        ;计算行和列
                        mov ax,160
                        mul dh
                        add dl,dl
                        add al,dl
                        mov bp,ax

api 发表于 2011-11-30 12:20:26

程序不会出错,不过显示出来的不是你想要的而已。因为单列是修改颜色属性,偶数列才是要显示出来的数据。

~疯子 发表于 2011-12-6 14:01:58

谢谢各位高手

这不是斯巴达 发表于 2011-12-7 16:04:51

顶!:o:({:1_1:}{:1_1:}{:1_1:}
页: [1]
查看完整版本: 求解 汇编call和ret的问题 那位老师给解答下 谢谢