王爽汇编实验10(1)的一个问题
我自己编了一下这个实验的第一个程序显示字符串但是有一些问题不知为何,请教一下!assume cs:codesg,ds:datasgdatasg segment
db 'Welcome to Masm!',0
datasg ends
codesg segment
start: mov dh,8
mov dl,3
mov cl,5
mov ax,datasg
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
mov ax,0B800h
mov es,ax
;计算字符现显示位位置保存在bx中
mov al,160
mov bx,0
mov bl,dh
mul bl
mov bx,ax
mov dh,0
add bx,dx
s1: mov dh,cl ;读入高八位的字符属性
mov ch,0
mov cl,ds:
jcxz ok ;检查是否读到字符串尾
mov dl,cl
mov es:,dl
mov es:,dh
inc si
add di,2
jmp short s1
ok: ret
codesg ends
end start
这是我运行后的界面
本帖最后由 xiaosawanjava 于 2014-6-26 09:34 编辑
第一个箭头指向错了,是上面一句add dx,dx
还是别偷懒 把列数dl*2去掉 如果dl是偶数还行 上面dl是3 奇数就会出错 把 mov ah,dl 改为mov al,2 mul dl 支持楼上的回答!{:2_27:} xiaosawanjava 发表于 2014-6-26 00:16 static/image/common/back.gif
第一个箭头指向错了,是上面一句add dx,dx
谢谢,成功了! xiaosawanjava 发表于 2014-6-26 00:16 static/image/common/back.gif
第一个箭头指向错了,是上面一句add dx,dx
等等,我还是有点不懂为什么要 ADD DX,DX
如果不要这一句话的话,那么DX的值是3,就是要3啊,在第四列显示(3) 84561475 发表于 2014-6-26 18:13 static/image/common/back.gif
等等,我还是有点不懂为什么要 ADD DX,DX
如果不要这一句话的话,那么DX的值是3,就是要3啊 ...
额,我看错了是第3列,因为一个字符在显存显示 要占2个字节, 一个是字符的ascii码一个是字符的属性,也就是颜色那些,所以 你要在第3列显示应该是 3*2 等于6 从偏移地址6 开始写入 add dx,dx相当于 dx*2 大概知道就行了
等你学32位汇编的时候 够你了解这些东西了 我现在 连xor是嘎哈的也记不起来 但不记得不能说是不会用 不知道的时候再查呗
大概知道就行了 这些算法之类的 以后都用不上 又不是小学生 老是算嘎哈啊
因为我不记 听一篇教程我会写个笔记
那笔记里面的东西 就都是我自己的
编程面太广了 源码只要你能看懂 那个程序就是你的
多看源码 。。。。我是这么想的
页:
[1]