关于王爽《汇编语言》实验10.3的疑问

assumecs:codedatasegmentdb10dup(0)dataendscodesegmentstart:movax,12666movbx,datamovds... assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
mov dx,0;这条指令删除后,窗口就一闪而过了,加了之后就可以显示结果,什么原因???
call dtoc

mov dh,1
mov dl,3
mov cl,2
call show_str

dtoc: mov bx,10
s: mov cx,ax ;保存商,商为0就退出循环
div word ptr bx
add dx,30h ;余数
mov ds:[si],dx
mov dx,0

inc si
loop s
ret

show_str:mov bx,0b800h
mov es,bx ;Video Memory
mov di,0
mov ah,0
mov si,0

mov al,0a0h ;160位一行
dec dh ;行数减1
mul dh ;al乘以dh,积为ax

dec dl ;计算列数
add dl,dl ;由于每个字占两位,低位为字,高位为颜色
add al,dl
mov bx,ax ;计算字母显示的位置

mov al,cl
mov ch,0

s1: mov byte ptr cl,ds:[si]
mov es:[bx+di],cl
mov es:[bx+di+1],al
jcxz ok
inc si
add di,2
jmp short s1
ok: mov ah,1
int 21H
code ends
end start
展开
 我来答
可轩163
2015-07-23 · TA获得超过1.3万个赞
知道大有可为答主
回答量:4824
采纳率:88%
帮助的人:1792万
展开全部
dtoc子程序中,有条除数是16位的除法指令div word ptr bx,
被除数高16默认保存于DX,低16位默认保存于AX,
主程序call dtoc之前,mov dx,0指令作用是将被除数高16位清零。
若call dtoc之前无mov dx,0指令,会发生除法溢出。
追问
谢谢啊,不过为什么我用debug查看dx的值,没有mov dx,0这条指令,dx也是0啊
做而论道
高能答主

2015-07-23 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
这程序,在什么地方结束?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式