主题:[讨论]讨论加分贴:讨论一个汇编错误
先看下面一段代码:
.model small
.data
NumFirst_2 db 0,0,0,0,0,0,0,0,0,0,1,5,2,3,6,5
NumSec_2 db 0,0,0,0,0,0,0,0,0,0,0,0,1,2,5,4
Answertemp db 17 dup(0)
AnswerMul db 32 dup(0)
MulPoint db 0
length_1 dw 6
length_2 dw 4
SiStore dw 0
CxStore dw 0
.code
main proc far
start:
mov ax,@data
mov ds,ax
;call DataInput
;call DataCorrect
call DataOutput
mov cx,0
mov cx,word ptr length_2
mov si,15
Label_mul_loop:
mov SiStore,si
mov CXStore,cx
call Mul_part
call ShiftR
call Add_part
call SetZeroMul;//set AnswerMul[] by 0
mov cx, CxStore
mov si,SiStore
dec si
dec cx
jnz Label_mul_loop
call Mul_output
ret
main endp
Mul_part proc near
; mov si,15
mov di,15
mov cx,0
mov cx,word ptr length_1
Mul_part_loop:
mov al,numSec_2[si]
mov bl,numFirst_2[di]
mul bl
aam
add al,Answertemp[di + 1]
aaa
mov Answertemp[di + 1],al
mov Answertemp[di],ah
mov ax,0
dec di
dec cx
jnz Mul_part_loop
;/////////////
mov si,0
mov cx,17
call Newline
Mul_part_output:
mov dl, Answertemp[si]
add dl,30h
mov ah,2
int 21h
inc si
dec cx
jnz Mul_part_output
call Newline
ret
Mul_part endp
ShiftR proc near
mov si,31
mov cx,31
ShiftR_label:
mov al,AnswerMul[si - 1]
mov AnswerMul[si] ,al
dec si
dec cx
jnz ShiftR_label
mov al,MulPoint
mov AnswerMul[0],al
mov al,0
mov MulPoint,al
ret
ShiftR endp
Add_part proc near
mov si,16
mov cx,17
clc
Add_part_loop:
mov al,AnswerMul[si]
adc al,Answertemp[si]
aaa
mov AnswerMul[si],al
dec si
dec cx
jnz Add_part_loop
mov al,0
adc al,0
mov MulPoint,al
ret
Add_part endp
.model small
.data
NumFirst_2 db 0,0,0,0,0,0,0,0,0,0,1,5,2,3,6,5
NumSec_2 db 0,0,0,0,0,0,0,0,0,0,0,0,1,2,5,4
Answertemp db 17 dup(0)
AnswerMul db 32 dup(0)
MulPoint db 0
length_1 dw 6
length_2 dw 4
SiStore dw 0
CxStore dw 0
.code
main proc far
start:
mov ax,@data
mov ds,ax
;call DataInput
;call DataCorrect
call DataOutput
mov cx,0
mov cx,word ptr length_2
mov si,15
Label_mul_loop:
mov SiStore,si
mov CXStore,cx
call Mul_part
call ShiftR
call Add_part
call SetZeroMul;//set AnswerMul[] by 0
mov cx, CxStore
mov si,SiStore
dec si
dec cx
jnz Label_mul_loop
call Mul_output
ret
main endp
Mul_part proc near
; mov si,15
mov di,15
mov cx,0
mov cx,word ptr length_1
Mul_part_loop:
mov al,numSec_2[si]
mov bl,numFirst_2[di]
mul bl
aam
add al,Answertemp[di + 1]
aaa
mov Answertemp[di + 1],al
mov Answertemp[di],ah
mov ax,0
dec di
dec cx
jnz Mul_part_loop
;/////////////
mov si,0
mov cx,17
call Newline
Mul_part_output:
mov dl, Answertemp[si]
add dl,30h
mov ah,2
int 21h
inc si
dec cx
jnz Mul_part_output
call Newline
ret
Mul_part endp
ShiftR proc near
mov si,31
mov cx,31
ShiftR_label:
mov al,AnswerMul[si - 1]
mov AnswerMul[si] ,al
dec si
dec cx
jnz ShiftR_label
mov al,MulPoint
mov AnswerMul[0],al
mov al,0
mov MulPoint,al
ret
ShiftR endp
Add_part proc near
mov si,16
mov cx,17
clc
Add_part_loop:
mov al,AnswerMul[si]
adc al,Answertemp[si]
aaa
mov AnswerMul[si],al
dec si
dec cx
jnz Add_part_loop
mov al,0
adc al,0
mov MulPoint,al
ret
Add_part endp