.model small
.stack 100
.data
usl db 10,13,"Uslovie zada4i po lab 1:",10,13
db "Vvesti n, poscitati summu y=Summa(2+3+...+k)k!, k=3,...,n",10,13,0Ah,0Dh,'$'
podsk db "Vvedite n ( 3 <= n <= 10 ) ",0Ah,0Dh,'$'
podsk2 db 0Ah,0Dh,"Vvedennaia stroka: ",0Ah,0Dh,'$'
rez db 10,13,"y = ",'$'
nl db 0Ah, 0Dh,'$'
n dw ?
err_msg db 10,13, "O6ibka vvoda", 10,13, '$'
blength db ?
bcontents equ this byte
vvod db 2
dlin db 2
buf db 4 dup('$')
Slag dw 2
fact dw 2
k dw 2
summa dw 0
des dw 10
.code
start:
mov ax,@data
mov ds,ax
; вывод условия
lea dx,usl
mov ah,9
int 21h
; вывод запроса на ввод n
lea dx,podsk
mov ah,9
int 21h
; ввод строки co значением n
mov dx,offset vvod
mov ah,0Ah
int 21h
; вывод введенной строки
lea dx,podsk2
mov ah,9
int 21h
lea dx,buf
mov ah,9
int 21h
mov dx, offset nl
mov ah, 9
int 21h
; перевод значения n из символьного в двоич
xor di, di ;DI=0 -номер байта в буфере
xor ax, ax ;АХ=0-текущее значение результата
mov cl, blength
xor ch, ch
xor bx, bx
mov si, cx ; SI- длина буфера
mov cl, 10 ; cl=10- множитель для mul
asc2bin:
mov bl, byte ptr bcontents[di]
sub bl, '0' ; цифра= код цифры-код символа '0'
jb asc_error ; если код символа был меньше, чем код "0"
cmp bl, 10 ;или больше чем "10"
ja asc_error ;выйти из программы с сообщением об ошибке
mul cx ;иначе : умножить текущий результат на 10
add ax, bx ; добавить к нему новую цифру
inc di ; увеличить счётчик
cmp di, si ;если счётчик+1 меньше числа символов-
jb asc2bin ;продолжить
asc_error:
mov dx, offset err_msg
mov ah, 9
int 21h
; расчёт суммы
m1:
inc k
mov ax,k
add slag,ax
mov ax,fact
xor dx,dx
mul k
mov fact,ax
mov ax,fact
xor dx,dx
mul slag
add summa,ax
mov ax,k
cmp n,ax
jne m1
; перевод из двоичного в символьное десятичное
mov si, offset rez+14
mov ax,summa
m2:
xor dx,dx
div des
add dl,'0'
mov [si],dl
dec si
cmp ax,0
jne m2
; Вывод Результатa
mov dx, offset rez
mov ah, 9
int 21h
; переход на новую строку
mov dx, offset nl
mov ah, 9
int 21h
mov ah, 4ch
int 21h
end start
Не работает перекодировка. АСМ
привет. есть прога, код верный, всё работает, кроме одного, не кодируется введённое число из строки в двоичное.:confused:
Если не работает - значит код неверный. Где-то ошибка. Возьми отладчик debug или turbo debug (td) и пройдись по коду.