|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 957591782 于 2012-2-13 11:42 编辑
stacks segment stack ;堆栈段
dw 128 dup(?)
stacks ends
datas segment ;数据段
one db 100d
db 0
db 100d dup(0)
two db 100d
db 0
db 100d dup(0)
diyi db 300d dup(0) ;第一个数的位数 ,得数保存在这里
dier db 300d dup(0) ;第二个数的位数
baohudi dw 0
kakama db 0 ;进位变量
datas ends
codes segment ;代码段
assume cs:codes,ds:datas
start: mov ax,datas ;初始化
mov ds,ax
mov es,ax
huiche macro ;换行宏
push dx
push ax
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop ax
pop dx
endm
lea dx,one
mov ah,10d
int 21h
huiche
lea dx,two
mov ah,10d
int 21h
xor cx,cx
and byte ptr kakama,00000000b
mov cl,[one+1]
add cl,[two+1]
;开始
xor ax,ax
xor cx,cx
mov cl,[two+1]
clc
xor dx,dx
mov dl,[two+1]
mov di,dx
mov dl,[one+1]
add di,dx
dec di
mov baohudi,di
lea si,two
inc si
xor ax,ax
mov al,[two+1]
add si,ax
waiceng: lea bx,one
inc bx
add bl,[one+1]
push cx ;保护,下面就进入内层循环了。外层循环时候再弹出
push di ;保护
clc ;清进位
lahf ;取
xor cx,cx
mov cl,[one+1] ;内层循环次数
jisuan: mov al,ds:[bx]
and al,00001111b
mov dl,byte ptr ds:[si]
and dl,00001111b
mul dl
aam
sahf ;置
add al,kakama
aaa
mov kakama,ah
lahf ;取
mov [dier+di],al
dec di
dec bx
loop jisuan ;内层
;特殊处理,这里处理的是判断有没有最高的进位。
sahf ;置
xor al,al
adc al,kakama
mov [dier+di],al
;开始相加处理
push ax
push bx
clc
lahf
mov di,baohudi
mov cx,di ;循环相加次数
inc cx
jiachuli: mov al,[diyi+di]
sahf
adc al,[dier+di]
aaa
lahf
mov [diyi+di],al
dec di
loop jiachuli
pop bx
pop ax
;相加处理结束
dec si
mov di,baohudi
mov cx,di
inc cx
qingkong: and byte ptr [dier+di],00000000b
dec di
loop qingkong ;将dier数组清空
pop di
pop cx
and kakama,00000000b ;进位变量清零
dec di
loop waiceng
;输出-start
mov cx,baohudi
inc cx ;其中保存的只是偏移还需加1 才能得出循环的次数
mov si,0
dec si
chuliling: inc si
cmp [diyi+si],0
loopz chuliling
inc cx ;循环出来还得将cx加1,因为循环的原因会多减一次
huiche ;换行
shuchu: mov dl,[diyi+si]
add dl,30h
mov ah,02h
int 21h
inc si
loop shuchu
mov ax,4c00h ;退出程序
int 21h
codes ends
end start |
评分
-
查看全部评分
|