Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Программный перевод чисел в десятиричную систему
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
skuzma skuzma вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2006
По умолчанию Программный перевод чисел в десятиричную систему - 05.06.2006, 11:12

Есть код программы, переводящей двойное слово в десятичное со знаком, но она не всегда работает. Помогите разобраться

Код:
stack segment para stack 'stack' 
    db 100h dup (?) 
stack ends 

extrn slave_1:far 

data segment para public 'data' 
    xxx      dd 0ffffcf22h 
    str_res  db   12 dup (20h) 
    db '$' 
data ends 

code segment para public 'code' 
assume cs:code, ds:data, ss:stack 

.486 
main proc 
        mov ax,data 
   mov ds,ax 
  ; mov ax,data 
   mov ss,ax 

   mov eax,xxx 
   push ax 
   shr eax,16 
   push ax 
   lea ax, str_res 
  ;mov ax, offset str_res 
   push ax 
    call slave_1 
   add sp, 6 

   mov ax,offset str_res 
   push ax 


xor edx,edx 
xor eax,eax 
   mov ah, 09h 
   lea dx, str_res 
   int 21h 
   mov ah , 01h 
   int 21h 

   mov ax,4c00h 
   int 21h 
main endp 
code ends 
end main 




code_sl segment para public 'code' 
assume cs:code_sl 

public slave_1 
slave_1 proc far 
.486 
   push   bp 
   mov   bp, sp 
  ; 
  ;soxraniaem icpolzuemie registri 
  ; 
   push   si 
   push   di 
   push   cx 
   push   edx 
  ; 
  ; 
   xor   ax, ax 
   xor   cx, cx 
   mov   ax, word ptr [bp+8];1par - isxodnoe 4icla 
   shl   eax,16 
   mov   ax, word ptr [bp+10] 
   mov   si, [bp+6]      ;2par - addr stroki rezultata 
   mov   di, si         ;zapominaem si v di 
   PUSH   0Ah 
   PUSH   00h         ;10 - v stek 

   cmp   eax, 0 
   jg   M_1 
   mov   dl, '-' 
   mov   [si], dl 
   inc   si 
   inc   di 
   neg   eax 
   mov ebx,10 
M_1: 
   xor   edx, edx 
   div   ebx; dword ptr [bp-12]  ;delim 4iclo na 10 
   add   dl, 30h       ;octatok (dx) perevodim v ascii 
   mov   [si],  dl      ;i zapicivaem v stroku rez-ta 
   inc   cx 
   cmp   cx, 12         ;ecli stroka ne pomewaetca v 
   jge   EXT_1         ;otvedennii format   12 cifr 

   inc   si 
   cmp   eax, 0        ;podelili li 4iclo? 
   jne   M_1 

   dec   si 
M_2: 
       cmp     si, di        ;povora4ivaem stroku 
       jle     EXT_0 
       mov     al, [si] 
       xchg    al, [di] 
       mov     [si], al 
       dec     si 
       inc     di 
       jmp     M_2 

EXT_0:   xor   ax, ax 
   jmp   EXT 

EXT_1:   mov   ax, 01h 

EXT:   add   sp, 2 
   pop   dx 
   pop   cx 
   pop   di 
   pop   si 
   mov   sp, bp 
   pop   bp 
   ret 

vihod:   ret 
slave_1 endp 

code_sl ends 
end
Ответить с цитированием
  (#2 (permalink)) Старый
skuzma skuzma вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2006
По умолчанию Программный перевод чисел в десятиричную систему - 05.06.2006, 11:12

Есть код программы, переводящей двойное слово в десятичное со знаком, но она не всегда работает. Помогите разобраться

Код:
stack segment para stack 'stack' 
    db 100h dup (?) 
stack ends 

extrn slave_1:far 

data segment para public 'data' 
    xxx      dd 0ffffcf22h 
    str_res  db   12 dup (20h) 
    db '$' 
data ends 

code segment para public 'code' 
assume cs:code, ds:data, ss:stack 

.486 
main proc 
        mov ax,data 
   mov ds,ax 
  ; mov ax,data 
   mov ss,ax 

   mov eax,xxx 
   push ax 
   shr eax,16 
   push ax 
   lea ax, str_res 
  ;mov ax, offset str_res 
   push ax 
    call slave_1 
   add sp, 6 

   mov ax,offset str_res 
   push ax 


xor edx,edx 
xor eax,eax 
   mov ah, 09h 
   lea dx, str_res 
   int 21h 
   mov ah , 01h 
   int 21h 

   mov ax,4c00h 
   int 21h 
main endp 
code ends 
end main 




code_sl segment para public 'code' 
assume cs:code_sl 

public slave_1 
slave_1 proc far 
.486 
   push   bp 
   mov   bp, sp 
  ; 
  ;soxraniaem icpolzuemie registri 
  ; 
   push   si 
   push   di 
   push   cx 
   push   edx 
  ; 
  ; 
   xor   ax, ax 
   xor   cx, cx 
   mov   ax, word ptr [bp+8];1par - isxodnoe 4icla 
   shl   eax,16 
   mov   ax, word ptr [bp+10] 
   mov   si, [bp+6]      ;2par - addr stroki rezultata 
   mov   di, si         ;zapominaem si v di 
   PUSH   0Ah 
   PUSH   00h         ;10 - v stek 

   cmp   eax, 0 
   jg   M_1 
   mov   dl, '-' 
   mov   [si], dl 
   inc   si 
   inc   di 
   neg   eax 
   mov ebx,10 
M_1: 
   xor   edx, edx 
   div   ebx; dword ptr [bp-12]  ;delim 4iclo na 10 
   add   dl, 30h       ;octatok (dx) perevodim v ascii 
   mov   [si],  dl      ;i zapicivaem v stroku rez-ta 
   inc   cx 
   cmp   cx, 12         ;ecli stroka ne pomewaetca v 
   jge   EXT_1         ;otvedennii format   12 cifr 

   inc   si 
   cmp   eax, 0        ;podelili li 4iclo? 
   jne   M_1 

   dec   si 
M_2: 
       cmp     si, di        ;povora4ivaem stroku 
       jle     EXT_0 
       mov     al, [si] 
       xchg    al, [di] 
       mov     [si], al 
       dec     si 
       inc     di 
       jmp     M_2 

EXT_0:   xor   ax, ax 
   jmp   EXT 

EXT_1:   mov   ax, 01h 

EXT:   add   sp, 2 
   pop   dx 
   pop   cx 
   pop   di 
   pop   si 
   mov   sp, bp 
   pop   bp 
   ret 

vihod:   ret 
slave_1 endp 

code_sl ends 
end
Ответить с цитированием
  (#3 (permalink)) Старый
Ethermind Ethermind вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.06.2006
По умолчанию 06.06.2006, 13:41

Интересно узнать когда именно "не всегда работает..."
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из двоичной в десятичную систему чисел CipDomich С/С++ 3 13.11.2010 18:09
Написание масштабирования программный чисел player1 Вопросы начинающих программистов 3 28.05.2010 19:17
Перевод чисел из двоичной в шестнадцатиричную систему p@inkiller C++ Builder 16 15.01.2010 20:06
Перевод чисел из шестнадцатиричной в восьмиричную систему imported_Машенька Вопросы начинающих программистов 17 24.03.2009 21:17
Перевод чисел. ПОИОГИТЕ! meteliti Pascal 1 11.12.2007 06:24
Преобразование чисел из двоичной в десятиричную систему vka Микроконтроллеры 1 08.12.2007 11:09
Перевод целого числа из десятичной в шестнадцатиричную систему счисления salaga Prolog 4 24.12.2006 21:03
Перевод чисел из десятичной в шестнадцатиричную систему Vergil Вопросы начинающих программистов 4 23.11.2006 18:49
Перевод чисел в слова laigri Perl 0 27.10.2005 22:31
Перевод координат мыши в систему dmblit Программирование графики 2 10.06.2004 00:52
Перевод из шестнадцатитичной в десятичную систему счисления -=M@kVa=- Вопросы начинающих программистов 2 03.04.2004 22:09
Перевод в двоичную систему или чтение побитового файла imported_Repulsion C++ Builder 3 12.07.2003 02:58



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов