数值求和
提示输入数字;输入任意正整数数字int,点击Enter结束输入;输出“1+2+3+…+int”的值;点击Enter程序退出;
这个问题咋用最原始的汇编语言做了?实在是刚学学不明白,希望各位大佬帮帮我,或者给个思路也行,谢谢大家
数值求和
提示输入数字;输入任意正整数数字int,点击Enter结束输入;输出“1+2+3+…+int”的值;点击Enter程序退出;
这个问题咋用最原始的汇编语言做了?实在是刚学学不明白,希望各位大佬帮帮我,或者给个思路也行,谢谢大家
data segment
d1 db 20 dup(0)
data ends
stack segment
db 128 dup(0)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
lea di,d1
mov cx,5
l0:
mov ah,1 ;输入数为一位数字连续输入,多位数字时稍加改变即可
int 21h
mov [di],al
inc di
loop l0
cld
mov dl,0
mov bx,000fh
mov cx,5
mov si,0
l1:
lodsb ;将ascii码值转换为二进制并相加
and ax,bx
add dl,al
loop l1
cmp dl,10
jb b1
mov ax,0
mov al,dl
cbw
mov bl,10
div bl
add ah,30h ;讲二进制转换为ascii码
add al,30h
xchg al,ah
mov bx,ax
mov dl,ah
mov ah,2
int 21h
mov dl,bl
mov ah,2
int 21h
jmp b2
b1:
add dl,30h
mov ah,2
int 21h
b2:
mov ax,4c00h
int 21h
code ends
end start
下面的是1-100求和的
DATA SEGMENT
RESULT DB 4 DUP(?)
DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV CX,100
MOV AX,0
NEXT:
ADD AX,CX
LOOP NEXT
MOV DX,0
MOV BX,10D
DIV BX
ADD DL,30H
MOV RESULT[3],DL
MOV DX,0
DIV BX
ADD DL,30H
MOV RESULT[2],DL
MOV DX,0
DIV BX
ADD DL,30H
MOV RESULT[1],DL
ADD AL,30H
MOV RESULT[0],AL
MOV AH,09H
LEA DX,RESULT
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START