上学期写了个10位数相乘的,也许对楼主有帮助
.model small
.386
data segment
buff1 db 10 dup(0) ;存放第一个数
buff2 db 10 dup(0) ;存放第二个数
len db 0ah ;操作数10
k word 0 ;结果数组中的下标
ones db 0 ;个位数
tens db 0 ;十位数
hint1 db 0ah,0dh,0ah,0dh,'Please input the first number(10 bits):','$'
hint2 db 0ah,0dh,0ah,0dh,'Please input the second number(10 bits):','$'
hint3 db 0ah,0dh,0ah,0dh,'The result is:','$'
data ends
extra segment
db 20 dup(0) ;存放结果
extra ends
code segment use16
assume cs:code,ds:data,es:extra
start:
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
mov dx,offset hint1 ;输出提示信息
mov ah,09h
int 21h
xor si,si
readnum1: ;读入十个数
xor al,al
mov ah,01h
int 21h
sub al,30h
mov buff1[si],al ;存放在buff1中
inc si
cmp si,09h
jbe readnum1 ;未满十个,继续读入
mov dx,offset hint2 ;输出提示信息
mov ah,09h
int 21h
xor si,si
readnum2: ;读入十个数
xor al,al
mov ah,01h
int 21h
sub al,30h
mov buff2[si],al ;存放在buff2中
inc si
cmp si,09h
jbe readnum2 ;未满十个,继续读入
xor cx,cx
xor bx,bx
xor ax,ax
xor dx,dx
mov si,0ah ;外循环
next1:
mov di,0ah ;内循环
next2:
mov al,buff1[si-1]
mov bl,buff2[di-1]
mul bl
div len
mov tens,al ;取商
mov ones,ah ;取余
mov k,0
add k,si
add k,di ;k=di+si
mov bp,k
mov ah,ones
add es:[bp],ah ;放入个位
cmp byte ptr es:[bp],0ah
jnge here1 ;小于10则跳到here1
xor ax,ax
mov al,es:[bp]
div len
mov es:[bp],ah
add byte ptr es:[bp-1],01h
here1:
mov al,tens
add es:[bp-1],al
;这段可以不要,因为进位最多不超过1位(9*9=81)
;cmp byte ptr es:[bp-1],0ah
;jnge here2 ;小于10则跳到here2
;xor ax,ax
;mov al,es:[bp-1]
;div len
;mov byte ptr es:[bp-1],00h
;mov es:[bp-1],ah
;add byte ptr es:[bp-2],01h
here2:
dec di
cmp di,0
ja next2 ;内循环
dec si
cmp si,0
ja next1 ;外循环
mov dx,offset hint3 ;输出提示信息
mov ah,09h
int 21h
xor si,si
mov si,01h ;0单元没用
print: ;输出结果
xor dl,dl
mov dl,es:[si]
add dl,30h
mov ah,02h
int 21h
inc si
cmp si,20
jbe print
exit:
mov ax,4c00h
int 21h
code ends
end start