Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не работает перекодировка. АСМ

29K
13 апреля 2008 года
Zloi_lamer
9 / / 23.01.2008
привет. есть прога, код верный, всё работает, кроме одного, не кодируется введённое число из строки в двоичное.:confused:
Код:
.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
551
13 апреля 2008 года
Pavia
357 / / 22.04.2004
Если не работает - значит код неверный. Где-то ошибка. Возьми отладчик debug или turbo debug (td) и пройдись по коду.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог