鱼C论坛

 找回密码
 立即注册
查看: 2948|回复: 5

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

[复制链接]
发表于 2011-11-30 11:08:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么有的不能做为列的数呢
如列现在是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:[bx]                ;字符数据
                        mov es:[bp+si],ax
                        inc bx                ;偏移字符数据加1
                        add si,2        ;偏移内存单元加2,偏移一个字单元
                        loop s        ;循环
                        ret                ;返回调用者
                       
                c_s        ends
               
end a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 11:30:51 | 显示全部楼层
Q中列的处理有问题。显示一个字符要用2个字节,也就是说列的元素基本单元是2个字节。
所以处理列时还得乘2。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 11:45:08 | 显示全部楼层
是啊,列还要乘2

                        ;计算行和列
                        mov ax,160
                        mul dh
                        add dl,dl
                        add al,dl
                        mov bp,ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 12:20:26 | 显示全部楼层
程序不会出错,不过显示出来的不是你想要的而已。因为单列是修改颜色属性,偶数列才是要显示出来的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-6 14:01:58 | 显示全部楼层
谢谢各位高手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-7 16:04:51 | 显示全部楼层
顶!:o:({:1_1:}{:1_1:}{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表