求解 汇编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 Q中列的处理有问题。显示一个字符要用2个字节,也就是说列的元素基本单元是2个字节。
所以处理列时还得乘2。 是啊,列还要乘2
;计算行和列
mov ax,160
mul dh
add dl,dl
add al,dl
mov bp,ax
程序不会出错,不过显示出来的不是你想要的而已。因为单列是修改颜色属性,偶数列才是要显示出来的数据。 谢谢各位高手
顶!:o:({:1_1:}{:1_1:}{:1_1:}
页:
[1]