《汇编语言》王爽 实验10 (3) 有一句,我不能理解,下面我贴出来,标记出来

assumecs:codedatasegmentdb10dup(0)dataendsstacksegmentdw8dup(0)stackendscodesegmentst... assume cs:code

data segment
db 10 dup (0)
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
start: mov ax,42243
mov bx,data
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,10h
mov si,0
call dtoc

mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h

dtoc: push ax
push bx
push si
mov bx,10
mov si,0

s0: mov dx,0
div bx
add dx,30h
push dx
mov cx,ax
inc si
inc cx ;这里为什么要加???
loop s0

mov cx,si
mov si,0
s1: pop ds:[si]
inc si
loop s1

pop si
pop bx
pop ax
ret

show_str: push ax
push dx
push cx
push si
mov di,0
mov bl,dh
dec bl
mov al,160
mul bl
mov bx,ax
add dl,dl
add bl,dl
mov ax,0b800h
mov es,ax
mov al,cl
s: mov ch,0
mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
add di,2
inc si
loop s
ok: pop si
pop cx
pop dx
pop ax
ret
code ends
end start
展开
 我来答
Crack_Hack
2017-01-24 · TA获得超过148个赞
知道答主
回答量:30
采纳率:0%
帮助的人:32.5万
展开全部
s0: mov dx,0
div bx
add dx,30h
push dx
mov cx,ax
inc si
inc cx ;这里为什么要加???
loop s0
注意:1、下面这一句loop,它是循环指令,循环次数由计数寄存器CX指定。是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次。执行LOOP指令时,CPU自动将CX的值减1。
2、AX的值不确定,AX可能为0,mov cx,ax CX就有可以为0,为保证LOOP至少循环2次,除法的高低位才能计算完成,避免CX= -1,所以给CX+1,
匿名用户
2020-06-18
展开全部
没有这一步的话,商为0时,0-1,CX就变成FFFF了,就无限循环了,用jmp short s0更灵活
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
专注教材PPT
2018-05-09
知道答主
回答量:8
采纳率:0%
帮助的人:8309
展开全部
因为商为0时还要计算一步,输出余数,所以要多执行一步,Inc cx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式