还没写完,后面超限的部分不知道为啥不对
现在对了quq,加了用两个寄存器进行64位除法就能显示64位数了
真的麻烦,百度都没有这个东西(百度真的垃圾,查汇编都是c语言
.MODEL SMALL
.DATA
VAR1L DD 1
VAR1H DD 0
VAR2L DD 1
VAR2H DD 0
VAR3L DD 0
VAR3H DD 0
TIMES DD 1
TEMPL DD 0
TEMPH DD 0
TEMPOUTL DD 0
TEMPOUTH DD 0
.STACK 4096
.CODE
MAIN PROC FAR
.386
START:
MOV ECX,1
MOV VAR1L,ECX
MOV ECX,1
MOV VAR2L,ECX
MOV ECX,1
MOV TIMES,ECX
MOV ECX,0
MOV VAR1H,ECX
MOV VAR2H,ECX
MOV VAR3L,ECX
MOV VAR3H,ECX
COUNT:
CLC
MOV EDX,VAR1L
MOV VAR3L,EDX
MOV EDX,VAR1H
MOV VAR3H,EDX
MOV EDX,VAR1L
ADC EDX,VAR2L
MOV VAR1L,EDX
MOV EDX,VAR1H
ADC EDX,VAR2H
MOV VAR1H,EDX
MOV EDX,VAR3L
MOV VAR2L,EDX
MOV EDX,VAR3H
MOV VAR2H,EDX
JMP OUTPUT
NEXT:
CMP TIMES,48
JZ EXIT
INC TIMES
JMP COUNT
OUTPUT:
MOV EDX,VAR1H
MOV EcX,VAR1L
push ecx
mov eax,ecx
mov di,0 ;di记录数字有几位
mov ebx,10 ;除数10
div ebx
add edx,30h ;余数+30h变为对应的十进制ascll码
push edx ;低位入栈
inc di ;位数+1
s:
mov edx,0
mov ebx,10 ;除数10
div ebx
add edx,30h ;余数+30h变为对应的十进制ascll码
push edx ;低位入栈
inc di ;位数+1
mov ecx,eax ;把商放cx里用 jcxz跳转
jcxz s5 ; 商0的时候跳转,说明该数已经全部转换为十进制且入栈
jmp s
s5:
mov cx,di ;cx放一共有几位,循环计数
s4:
pop edx ;之前进栈的,现在出来
mov ah,2h
int 21h
loop s4 ;循环直到cx=0
mov dl,0dh
mov ah,2h
int 21h
mov dl,0ah
mov ah,2h
int 21h
pop ecx
jmp NEXT
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
END START
END