Я пытаюсь преобразовать строку в десятичную, а затем добавить все числа до этой десятичной дроби (например, если число равно 5, мне нужно добавить 1 + 2 + 3 + 4 + 5), а затем распечатать это число послепреобразование его обратно в десятичное.
Я пытаюсь выполнить следующие шаги, код не завершен, до сих пор я просто конвертирую строку в десятичную и проверяю, преобразована ли она, есть какая-то ошибка
title fill in title
;------------------------------------------------------------------------------
stacksg segment para stack 'Stack'
db 32 dup(0)
stacksg ends
;---------------------------------------------------------------------------------------------
datasg segment para 'Data'
paralst label byte
maxlen DB 20
actlen DB ?
indata DB 20 dup ('$')
strout DB "Enter a number between 1 and 20: $"
errors DB "USER ERROR$"
sum DB "The sum is: $"
datasg ends
;-----------------------------------------------------------------------------------
codesg segment para 'Code'
main proc far
assume ss:stacksg, ds:datasg, cs:codesg
mov ax, datasg ;initialize data segment registers
mov ds, ax
mov es, ax
MOV AH, 06H
MOV AL, 0
MOV CX, 0 ; ch-row, cl-columns
MOV DH, 79
MOV DL, 79
MOV BH, 01000000B
int 10H
Mov AH, 02H
MOV BH, 00H
MOV DH, 12 ; or mov dx 0c28h
MOV DL, 25
INT 10H
MOV AH, 09H
LEA DX, STROUT
INT 21H
Mov AH, 0AH
LEA DX, paralst
int 21H
;converting string to decimal
CALL READ_NUM
READ_NUM Proc Near
push BX
push CX
push DX
LEA BX, indata
Mov AX, 0
Mov CX, 0
Mov DL, 10
again:
MOV CL, [BX]
CMP CL, 0DH
JE THEEND
SUB CX, 30H
MUL DL
ADD AX, CX
INC BX
THEEND:
POP DX
POP CX
POP BX ; conversion complete
CMP AX, 20 ; since converted decimal is in AX,
; i am checking if it is over 20 or below 1....
; there is where i get error.
JG ERRS
CMP AX, 1
JL ERRS
mov ax, 4c00h
int 21h
MOV DX, 0
MOV CX, 1
TOPPY:
CMP DX, AX
JG ENDDY
ADD CX, DX
INC DX
JMP TOPPY
ERRS:
Mov AH, 02H
MOV BH, 00H
MOV DH, 15 ; or mov dx 0c28h
MOV DL, 25
INT 10H
MOV AH, 09H
LEA DX, errors
INT 21H
mov ax, 4c00h
int 21h
ENDDY:
Mov AH, 02H
MOV BH, 00H
MOV DH, 16 ; or mov dx 0c28h
MOV DL, 25
INT 10H
MOV AH, 09H
LEA DX, sum
INT 21H
mov ax, 4c00h
int 21h
Ret
READ_NUM endp
main endp ;end of procedure
codesg ends ;end of code segment
end main ;end of program