
data segment
str db 20h
num db 0
content db 20h dup(0)
data ends
...
mov dx,offset str
mov ah,0ah
int 21hdata segment
consequence dw 20h;存放结果
data ends
...
xor ax,ax;用异或清零
mov al,str+1;一共这么多字符,循环的范围是str[2]到str[si+1]
mov si,ax;用si计数
flag:xor ax,ax
mov al,str[si+1]
sub ax,30h;-30h将ascii码转数字
内循环
add consequence,ax
dec si
cmp si,0;si=0的时候不能再跳转了
jnz flag
mov ax,consequencedata segment
cur dw 0;第几位
data ends
...
xor bx,bx
mov bl,num
mov cur,bx
mul10:cmp si,cur;如果外循环正处于第n位,内循环也处于第n位,不需要再乘以10
jz endd
mov bx,0ah
mul bx;ax*10,结果存放在dx|ax
dec cur
jmp mul10
endd:binout proc;将ax的值以二进制显示
xor si,si;利用si寻址
mov bx,2
divv:cwd
div bx;余数在dx
add dl,30h;转位ascii码
mov num[si],dl;
inc si
cmp ax,0;商0即结束
jnz divv;商不为0的时候
mov cx,si
;上面多加了一次si
display: dec si
mov dl,num[si]
mov ah,02h;调用字符显示
int 21h
loop display
ret
binout endp