0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 38
1

Написать программу сложения двух 32-разрядных двоичных чисел

20.02.2018, 18:25. Показов 3391. Ответов 1
Метки tasm (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, подскажите почему не могу посмотреть конечный результат(окно закрывается) и почему в конце работы программы выдает "terminated exit code 0". Используется tasm 1.4 for win 7. Все ли правильно и можно ли как-то оптимизировать код?

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
.MODEL  SMALL           ;модель оперативной пам¤ти
.STACK  100h            ;адрес стека
.DATA               ;сегмент данных программы
msg1    db 0dh,0ah, 'Enter A: $'
msg2    db 0dh,0ah, 'Enter B: $'
msg4    db 0dh,0ah, 'Result: $'
 
ten dd 02h
 
_a  dd ?
_b  dd ?
suma    dd ?
 
    .CODE               ;начало сегмента кода
    .386
 
start:
    mov ax,@data
    mov ds,ax           ; загрузка сегментного регистра DS
    mov ah,09h
    mov DX,offset msg1      ;ј адрес выводимого сообщения должен быть в DX
    int 21h         ; вывод сообщения
    mov cx,32           ;разрядность
    call    cgetbin
    mov [_a], eax
    mov ah,09h
    mov DX,offset msg2      ;ј адрес выводимого сообщения должен быть в DX
    int 21h         ; вывод сообщения
    call    cgetbin
;   mov [_b], eax
    add eax, [_a]
    mov [suma], eax
    push    eax
    mov ah,09h
    mov DX,offset msg4      ;ј адрес выводимого сообщения должен быть в DX
    int 21h         ; вывод сообщения
    pop eax
    call    _cputbin
;   pop [suma]
    mov ax,4c00h        ;пересылка 4c00h в регистр ax
    int 21h         ;вызов прерывания с номером 21
    ret
; двоичный вывод EAX на консоль
_cputbin:
;   push    eax
    mov ebx, eax
    mov cx,32
@B: xor al, al
    rcl ebx,1
    adc al, '0'
    int 29h
    loop    @B
    mov al, 'B'
    int 29h
    ret
; ввод с консоли двоичного числа с отработкой удаления символа
; на входе: CX - кол-во цифр
; на выходе: EAX - введенное число или -1, если нажат <ESC>, а также CY=1
cgetbin: pushad
    xor edx, edx
    mov ebp, edx
    mov ebx, ecx
@l:
    call    getch
    or  al,al
    jz  @l
    cmp al, 1Bh         ; <ESC>?
    jz  cancel
    cmp al, 0Dh         ; <Enter>?
    jz  done
    cmp al, 08h         ; <BkSp>?
    jnz @4
    call    rubout
    jmp @l
@4:     cmp al, 30h
    jb  @l
    cmp al, 31h
    ja  @l
    movzx   eax,al          ; убираем из eax лишнее
    shl edx, 1
    bt  ax,0
    adc edx,0
    int 29h
    loop    @l
; выход
done:       mov eax, edx        ;
    or  ebp, ebp
    jz  @5
    neg eax
@5:     clc
    jmp ex
; отмена, взводим Carry(CY), EAX = -1
cancel:;     xor eax, eax
;   dec eax         ; EAX = -1
    stc
ex:     mov ss:[esp+1Ch], eax
    popad
    ret             ;
; ввод символа
getch:      xor     ax, ax
    int 16h
    ret
; нова¤ строка
crlf:       push    ax
    mov ax, 0A0Dh
    int 29h
    xchg    al,ah
    int 29h
    pop ax
    ret
; отработка <BkSp>
rubout:     cmp ebx, ecx    ; первый символ?
    ja  @r          ; нет
    test    ebp,ebp         ; минус вводили?
    jz  @e          ; нет
    dec ebp         ; убираем флаг
    jmp @bs         ; стираем "-" с экрана
@r:     mov eax, edx
    xor edx, edx
    idiv    dword ptr ten       ; делим наше вводимое число на 10.
    mov edx,eax
    inc ecx
@bs:        call    bksp
@e:     ret
; курсор назад на 1 позицию
bksp:       mov ax, 2008h
    int 29h
    xchg    ah,al
    int 29h
    xchg    ah,al
    int 29h
    ret
 
    end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2018, 18:25
Ответы с готовыми решениями:

Вычитание двух 32-разрядных двоичных чисел
Добрый день! Понимаю, что задача простейшая, но все же вызывает затруднения. Мне надо написать...

Как написать программу сложения двух целых 16- разрядных чисел?На ассемблере
Как написать программу сложения двух целых 16- разрядных чисел?На ассемблере. Только начал изучать...

Устройство сложения 4-х разрядных двоичных чисел
Здравствуйте, проблема следующая Необходимо разработать устройство, позволяющее производить...

PIC16F84A Вычитание двух 2-х разрядных двоичных чисел
Помогите с кодом для PiC16f84a со следующими функциями: Вычитание двух 2-х разрядных двоичных...

1
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
20.02.2018, 20:45 2
Цитата Сообщение от ZiBoB4iK Посмотреть сообщение
окно закрывается
добавь ожидание нажатия клавиши перед выходом из программы..
Assembler
1
2
mov ah,1
int 21h
Цитата Сообщение от ZiBoB4iK Посмотреть сообщение
почему в конце работы программы выдает "terminated exit code 0"
значит, все нормально. программа завершила своя работу с кодом возврата ноль. данный код ты указал в регистре al
Цитата Сообщение от ZiBoB4iK Посмотреть сообщение
mov ax,4c00h ;пересылка 4c00h в регистр ax
int 21h ;вызов прерывания с номером 21
1
20.02.2018, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2018, 20:45
Помогаю со студенческими работами здесь

Схема умножение двух 8-ми разрядных двоичных чисел
Здравствуйте, уважаемые форумчане! Есть задача: Построить схему умножения двух 8-ми разрядных...

PIC16f84A Сложение двух 2-х разрядных двоичных чисел
Помогите с кодом для PiC16f84a со следующими функциями: сложение двух 2-х разрядных двоичных...

Реализовать процедуры сложения и умножения двух сто разрядных чисел
Выручайте, совершенно ничего не понимаю в программировании,а в университете поставили данную...

Написать программу умножения двух двоичных вещественных чисел
Доброго времени суток, уважаемые участники форума. Поюзал поиск и не нашёл чего-то похожего (каюсь,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru