Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
4 / 4 / 0
Регистрация: 19.12.2012
Сообщений: 41
1

Перевод из 10 системы счисления в 2

21.05.2013, 09:44. Показов 4612. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Нашел программу на форуме, но в некоторых местах не понимаю что она делает. Можете помочь написать комментарии? Заранее спасибо))

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
.MODEL small
.STACK 64
.DATA 
org 150h
x_ascii db 20h dup(?)
t1 db 0dh,0ah,"Vvedite chislo i nagmite Enter"
db 0dh, 0ah, "$"
t3 db 0dh, 0ah, "V dvoichnoi sisteme chislo vyglyadet tak"
db 0dh,0ah,"$"
buf db 16 dup(?),"$"
.CODE
vt proc
mov ax,@data
mov ds, ax
mov  es, ax
d: lea dx, t1
mov ah,09h
int 21h
lea di, x_ascii
call ink
call des_2
push ax
lea dx,t3
mov ah,9h
int 21h
pop ax
call bin_dis
push     ax
mov ah,1h
int 21h
cmp al,"Y"
loope    d
cmp al,"y"
loop d
mov ah,4ch
int 21h
vt endp
ink proc
 
xor  cx,cx
l1: 
mov  ah,1
int 21h
stosb
inc cx
cmp al,0dh
jnz l1
dec cx
ret
ink endp
dis proc
 
r1: mov dl,[di]
mov ah,2
int 21h
inc di
loop r1
ret
dis endp
des_2 proc
 
mov si,10
lea di,x_ascii
sub ax,ax
v1: mul si
mov bp,ax
mov al,[di]
sub al,48
inc di
mov  ah,ch
add ax,bp
loop v1
ret
des_2 endp
bin_dis proc
 
lea di,buf
mov cx,16
mov  bx,ax
mov  dx,ax
conv:   
mov  al,ch
shl dx,1
adc  al,'0'
stosb   
loop conv
mov ah,9h
lea dx,buf
int 21h
mov  ax,bx
ret
bin_dis endp
 
end vt
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2013, 09:44
Ответы с готовыми решениями:

Перевод из 2-ой системы счисления в 8-ую систему счисления
Здравствуйте !Мб у кого нибудь есть код или процедура перевода из 2-ой системы счисления в 8-ую...

Системы счисления. Перевод из одной системы счисления в другую.
Задание: Написать программу на языке С++ или Turbo Pascal для переведа числа, представленного в...

Перевод из одной системы счисления в другое системы счисления
Здравствуйте, Господа!8-) Бывает такая необходимость, когда нужно перевести какое-то число в...

Перевод целых неотрицательных чисел из системы счисления M в систему счисления N, где 2 <= M, N <= 16
Перевод целых неотрицательных чисел из системы счисления M в систему счисления N, где 2 &lt;= M, N &lt;=...

4
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
21.05.2013, 10:55 2
Цитата Сообщение от OLEG VT Посмотреть сообщение
но в некоторых местах не понимаю
А в каких конкретно?
А вообще, на мою — она с комментариями, и оформлена аккуратнее Да, забыл сказать, в отличие от этой она exe, в отличие от той, которую нашел ты.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
STAK    SEGMENT STACK
        DB  256 DUP (?)
STAK    ENDS
 
DATA    SEGMENT
    BUF     DB      5, 00, 6 DUP ('$')      
    OUTBUF  DB      13, 10, 16 DUP ('0'), '$'
DATA    ENDS
 
CODE SEGMENT
    ASSUME  CS:CODE, DS:DATA, SS:STAK
; -----------------------------------------------------------------------
 
; процедура ввода строки в буфер
READ    PROC    
    MOV AH, 0AH  
    LEA DX, BUF 
    INT 21H
    RET
READ    ENDP
 
; -----------------------------------------------------------------------
 
; процедура вывода на экран
PRINT   PROC
    MOV AH, 09H 
    LEA DX, OUTBUF  
    INT 21H
    RET
PRINT   ENDP
 
; -----------------------------------------------------------------------
 
; перевод строки в число
STR_TO_NUM      PROC        
    MOV DI, 0
    LEA BX, BUF + 1 ; в BX адрес следующего элемента буфера
    MOV CX, [BX]    ; в СХ количество введенных символов
    XOR CH, CH
    MOV SI, 1       ; в SI множитель
 M1:    PUSH    SI  ; сохраняем SI в стек
    MOV SI, CX  ; номер символа в SI
    MOV AX, [BX+SI] ; сохраняем текущий символ в AX  
    XOR AH, AH 
    POP SI      ; извлекаем SI из стека
    SUB AX, 30H ; получаем из символа цифру 
    MUL SI      ; умножаем цифру на множитель SI
    ADD DI, AX  ; прибавляем к результату
    MOV AX, SI  ; помещаем множитель в AX
    MOV DX, 10D 
    MUL DX      ; увеличиваем его в 10 раз
    MOV SI, AX  ; помещаем обратно в SI
    LOOP    M1      ; переходим к следующему символу
STR_TO_NUM      ENDP
 
; -----------------------------------------------------------------------
 
; перевод из десятичной формы в двоичную
DEC_TO_BIN  PROC    
    MOV BX, DI              ; помещаем число в BX
    LEA SI, OUTBUF + 2      ; везультат пишем в выходной буфер
    MOV CX, 10h             
 DB2:   SHL BX, 1           ; сдвигаем на один бит влево
    JC DB1                  ; анализируем CF
    MOV BYTE PTR [SI], '0'      ; если флага нет, то пишем '0'
    JMP DB3
 DB1:   MOV BYTE PTR [SI], '1'  ; а если есть, то '1'
 DB3:   INC SI          ; переходим к следующей позиции в выходном буфере
    LOOP DB2
    RET
DEC_TO_BIN  ENDP
 
; -----------------------------------------------------------------------
 
START:
    XOR AX, AX
    MOV BX, DATA    ; инициализация
    MOV DS, BX  
 
    CALL    READ    ; вызов процедуры ввода
    CALL    STR_TO_NUM  ; конвертация строки в число
 
; -----------------------------------------------------------------------
 
    CALL    DEC_TO_BIN  ; конвертация десятичного числа в двоичное
    CALL    PRINT   ; вывод результата на экран
    CALL CLEAN_OUTBUF ; очистка выходного буфера
    
; -----------------------------------------------------------------------
 
MOV AH, 4CH
    INT 21H
CODE    ENDS
END START
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
21.05.2013, 11:21 3
TheFox, некомильфо
Assembler
1
2
3
4
    JC DB1                  ; анализируем CF
    MOV BYTE PTR [SI], '0'      ; если флага нет, то пишем '0'
    JMP DB3
 DB1:   MOV BYTE PTR [SI], '1'  ; а если есть, то '1'
одной строкой и без переходов
Assembler
1
ADC BYTE PTR [SI],'0';анализируем CF -- если CF=0, тогда пишем '0', а если CF=1, то '1'
предварительное условие: выходной буфер должен быть проинициализирован нулями, а в случае
Assembler
1
OUTBUF  DB      13, 10, 16 DUP ('0'), '$'
используем ADC BYTE PTR [SI],0
1
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
21.05.2013, 11:22 4
Цитата Сообщение от Mikl___ Посмотреть сообщение
одной строкой и без переходов
Честно говоря, я совсем забыл, что существует такая команда. Спасибо за подсказку.
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
21.05.2013, 11:24 5
TheFox,
а ТС, кстати, ее использует в 84-строке
0
21.05.2013, 11:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2013, 11:24
Помогаю со студенческими работами здесь

Перевод действительных неотрицательных чисел из системы счисления M в систему счисления N, где 2<=M,N<=16
Добрый вечер. Помогите с заданием, пожалуйста. Перевод действительных неотрицательных чисел из...

Рекурсия: перевод целого числа из десятичной системы счисления в 9 систему счисления
Написать рекурсивную функцию перевода целого числа из десятичной системы счисления в 9-чную...

Перевод числа из 8-ичной системы счисления в 16-ричную систему счисления и обратно.
Написать программу на С++. Перевод из 8 системы счисления в 16 систему счисления и обратно из 16...

Перевод натурального числа из десятичной системы счисления в систему счисления по основанию
Здравствуйте. Я хотела бы попросить у вас помощи. Я понимаю, что это не очень красиво, но вдруг...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru