毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

汇编语言(王爽主编)的实验10.1代码

更新时间:2013-9-17:  来源:毕业论文

汇编语言(王爽主编)的实验10.1代码

按照自己的思路写了显示字符串的函数,可是执行完成后并没有显示出绿色的字符串。求指导哇
另外,我在第二个注释位置行,如果直接将 mov es:[bx + di],[si],为什么不行
我的代码如下:
assume cs:code

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,0
mov al,160 ;8位只能和8位的相乘
mul dh
add bx,ax
mov ax,0
mov al,2
mul dl
add bx,ax

mov ax,0b800H
mov es,ax
mov di,0
change:
push cx

mov cl,[si]
mov ch,0
jcxz ok
 
mov al,[si]
mov es:[bx + di],al ;不能直接将[si]传递给es:[bx + di]
pop cx
mov es:[bx + di + 1],cl
inc si
add di,2
jmp short change
ok:ret

code ends

end star

mov es:[bx + di],[si] 这样的指令是不可以的,因为不支持两个操作数都是内存类型的。
你的这个程序有个大问题吧,jcxz ok 后,没有将之前 push cx 恢复,导致堆栈失衡,子程无法正确返回,所以应该在 ok: 后加上 pop cx 指令。
不能正确显示,大致和 windows 下的命令行窗口的显示兼容性有关吧,最简单的就是来个如 DOSBox 这样的虚拟纯 dos 系统,在那里面进行测试。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。