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

Организация условных переходов

13.04.2011, 15:28. Показов 4261. Ответов 15
Метки нет (Все метки)

Написать программу ввода исходных данных с контролем допустимого диапазона,вычисления условного арифметического выражения и вывода полученного результата.А вот собственно и задание:
{B/-1 если A<B
X={ -295 если A=B
{(а-235)/B если A>B
Пытался расставлять флаги,чет без толку,у кого есть идеи, отписываемся !
Mortal Kombat:Legacy 2011
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2011, 15:28
Ответы с готовыми решениями:

Организация условных переходов
Задача: Написать программу ввода исходных данных с контролем допустимого диапазона,вычисления...

Организация условных переходов (fasm)
Помогите, пожалуйста, решить данное задание. Задание: Вычислить заданное условное целочисленное...

Программирование условных переходов.
Вот задача:

команды безусловных и условных переходов.
(Решите плиз) Дан массив из 10 байт.Сформировать другой массив по адресу ES:0050h,в который...

15
Ушел с форума
Автор FAQ
15020 / 7216 / 896
Регистрация: 11.11.2010
Сообщений: 12,957
14.04.2011, 04:19 2
hadji, найди в сети учебник "Искусство программирования на Ассемблере. Лекции и упражнения" Голубь Н.Г. и почитай его, раз уж по нему занимаешься, но я бы порекомендовал -- Скляров И. "Изучаем Assembler за 7 дней"
1
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.04.2011, 06:59 3
Цитата Сообщение от Mikl___ Посмотреть сообщение
"Изучаем Assembler за 7 дней"
. В названии пропущено: "чтоб писать коекак". За 7 дней ассемблер не возможно изучить хорошо, так что если книга расчитана всего на неделю, то её цель - дать читателям азы языка.
1
Ушел с форума
Автор FAQ
15020 / 7216 / 896
Регистрация: 11.11.2010
Сообщений: 12,957
14.04.2011, 08:37 4
taras atavin, учитывая то, что hadji ассемблер не нужен как таковой, а требуется только решение конкретной задачи, то книги Склярова хватит "по самые уши", а может быть и интерес к ассемблеру появится, а книга Голубь Н.Г. хотя и выдержала три переиздания, на учебник даже на "троечку" не тянет
1
12 / 8 / 0
Регистрация: 03.02.2011
Сообщений: 30
14.04.2011, 08:42 5
А мне книжулька нравится, там именно дано всё в таком формате, что понятно даже самому начинающему. На это упор и делается, чтоб не засорять мозг начинающего всякими непонятными знаками и терминами это там делается методично и постепенно в течении 7 дней. и там как раз описаны директивы, такие как If...else...
1
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.04.2011, 08:43 6
panfil, переход с условной трансляцией путаешь?
0
12 / 8 / 0
Регистрация: 03.02.2011
Сообщений: 30
14.04.2011, 08:48 7
в книжке так написано. "Директива условного ассемблирования"
1
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.04.2011, 08:52 8
Ассемблирование - не вид трансляции? Или аналогичных дирректив в приницпе не может быть в языках высокого уровня? Вот переходы диррективами делаться не могут.
1
12 / 8 / 0
Регистрация: 03.02.2011
Сообщений: 30
14.04.2011, 08:57 9
не хочу спорить - я ленивый до ужаса)))
1
Ушел с форума
Автор FAQ
15020 / 7216 / 896
Регистрация: 11.11.2010
Сообщений: 12,957
14.04.2011, 09:10 10
panfil, а зря! условная компиляция -- это когда у вас в одной версии программы, допустим три аналогичных фрагмента с выводом надписей на русском, китайском и английском языках. В зависимости от переменной lang=rus (eng, chin) будет сформирован EXE с надписями на том языке который вам требуется, а лишние надписи в EXE не попадут -- это условная трансляция
Директивы условной трансляции:
IF выражение Если выражение не равно нулю, ассемблер
обрабатывает операторы в условном блоке.
IFE выражение Если выражение равно нулю, ассемблер обрабатывает
операторы в условном блоке.
IF1 (нет выражения) Если осуществляется первый проход ассемблирования
то обрабатываются операторы в условном блоке.
IF2 (нет выражения) Если осуществляется второй проход операторы
ассемблирования, то обрабатываются в условном
блоке.
IFDEF идентификатор Если идентификатор определен в программе или
объявлен как EXTRN, то ассемблер обрабатывает
операторы в условном блоке.
IFNDEF идентификатор Если идентификатор не определен в программе или
не объявлен как EXTRN, то ассемблер обрабатывает
операторы в условном блоке.
IFB <аргумент> Если аргументом является пробел, ассемблер
обрабатывает операторы в условном блоке. Аргумент
должен быть в угловых скобках.
IFNB <аргумент> Если аргументом является не пробел, то ассемблер
обрабатывает операторы в условном блоке. Аргумент
должен быть в угловых скобках.
IFIDN <арг-1>,<арг-2> Если строка первого аргумента идентична строке
второго аргумента, то ассемблер обрабатывает
операторы в условном блоке. Аргументы должны быть
в угловых скобках.
IFDIF<арг-1>,<арг-2> Если строка первого аргумента отличается от
строки второго аргумента, то ассемблер
обрабатывает операторы в условном блоке.
Аргументы должны быть в угловых скобках.
А есть псевдовысокоуровневые инструкции .if, .case, while, until и т.д. которые при трансляции превратятся в cmp, test, jne -- это совсем другое
2
12 / 8 / 0
Регистрация: 03.02.2011
Сообщений: 30
14.04.2011, 09:14 11
я где-то очень глубоко в душе верил что я прав)))
1
Ушел с форума
Автор FAQ
15020 / 7216 / 896
Регистрация: 11.11.2010
Сообщений: 12,957
14.04.2011, 09:34 12
В MASM и FASM имеются макросы, изображающие конструкции алгоритмических языков высокого уровня, что делает прогу проще и сокращает процесс разработки: .IF, .ELSE, .ELSEIF, .ENDIF, .REPEAT, .UNTIL, .WHILE, .ENDW, .BREAK,.CONTINUE.
Например ветвление:
.IF условие
предложения блока IF
[.ELSEIF] условие
предложения блока ELSEIF
[.ELSE]
предложения блока ELSE
.ENDIF
Пример
Assembler
1
2
3
4
5
6
7
.if al==9
mov ах,1
.elseif ax==0
mov ax,2
.else
mov ax,3
.endif
А ассемблер уже когда транслирует, преобразует это во всякие нормальные для него jmp и cmp.
Assembler
1
2
3
4
5
6
7
8
9
10
    cmp al,9;.if al==9
    jne a1
    mov ах,1
    jmp a2
a1: test ax,ax;.elseif ax==0
    jne a3
    mov ax,2
    jmp a2
a3: mov ax,3;.else
a2: ...;.endif
Никогда не торопитесь сдаваться! Твердо стойте на своем!
1
0 / 0 / 0
Регистрация: 18.12.2009
Сообщений: 7
14.04.2011, 14:26  [ТС] 13
И все же,давайте разберемся с моим заданием.Есть такие,кто решает такие задания чисто из интереса?

Добавлено через 2 минуты
Mikl___, прошу помощи,упущенное лето-маленькая смерть !

Добавлено через 3 минуты
Так же есть вопрос в этой теме
0
12 / 8 / 0
Регистрация: 03.02.2011
Сообщений: 30
14.04.2011, 18:27 14
Решил на старых добрых условных переходах решить задачу, они как то более мне роднее)
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
.model tiny
.code
org 100h
start:
 
mov dx,offset mes1
call output
call inputInt
push ax
 
mov dx,offset mes2
call output
call inputInt
mov bx,ax
 
pop ax
cmp ax,bx
jge ravno_bolee
mov ax,bx
mov bx,-1
idiv bx
jmp exit
 
ravno_bolee:
cmp ax,bx
je ravno
sub ax,235
jmp exit
 
ravno:
xor ax,ax
mov ax,-295
 
exit:
push ax
mov dx,offset res
call output
pop ax
 
call outint
ret
 
 
 
InputInt proc 
 
        mov ah,0ah
        xor di,di
        mov dx,offset buff ; аддрес буфера
        int 21h ; принимаем строку
        mov dl,0ah
        mov ah,02
        int 21h ; выводим перевода строки
        
; обрабатываем содержимое буфера
        mov si,offset buff+2 ; берем аддрес начала строки
        cmp byte ptr [si],"-" ; если первый символ минус
        jnz ii1
        mov di,1  ; устанавливаем флаг
        inc si    ; и пропускаем его
ii1:
        xor ax,ax
        mov bx,10  ; основание сc
ii2:
        mov cl,[si] ; берем символ из буфера
        cmp cl,0dh  ; проверяем не последний ли он
        jz endin
        
; если символ не последний, то проверяем его на правильность
        cmp cl,'0'  ; если введен неверный символ <0
    jl er
    cmp cl,'9'  ; если введен неверный символ >9
    ja er
 
        sub cl,'0' ; делаем из символа число 
        mul bx     ; умножаем на 10
        add ax,cx  ; прибавляем к остальным
        inc si     ; указатель на следующий символ
        jmp ii2     ; повторяем
 
er:   ; если была ошибка, то выводим сообщение об этом и выходим
        mov dx, offset error
        mov ah,09
        int 21h
        int 20h
 
; все символы из буфера обработаны число находится в ax
endin:
        cmp di,1 ; если установлен флаг, то
        jnz ii3
        neg ax   ; делаем число отрицательным
ii3:
        ret
 
 
 
InputInt endp
Output proc
mov ah,9
int 21h
ret
Output endp
 
OutInt proc
        
; если число знаковое, то необходимо расскоментировать следующие строки
; Проверяем число на знак.
       test    ax, ax
       jns     oi1
 
; Если оно отрицательное, выведем минус и оставим его модуль.
       mov  cx, ax
       mov     ah, 02h
       mov     dl, '-'
       int     21h
       mov  ax, cx
       neg     ax
; Количество цифр будем держать в CX.
oi1:  
        xor     cx, cx
        mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
        xor             dx,dx
        div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
        push    dx
        inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
        test    ax, ax
        jnz     oi2
; Теперь приступим к выводу.
        mov     ah, 02h
oi3:
        pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
        add     dl, '0'
        int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
        loop    oi3
        
        ret
 
OutInt endp 
error db "nevernoe chislo$"
mes1 db "vvedite A$"
mes2 db "vveditr B$"
buff    db 6,7 Dup(?)
res db "rezultat:$"
 
 
end start
1
Ушел с форума
Автор FAQ
15020 / 7216 / 896
Регистрация: 11.11.2010
Сообщений: 12,957
15.04.2011, 14:38 15
panfil, вместо трех команд mov ax,bx/mov bx,-1/idiv bx достаточно было одной neg bx
0
2826 / 1635 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
15.04.2011, 17:34 16
В случае, когда больше, ещё деления на B не хватает.
Assembler
1
2
3
4
5
6
cmp ax,bx
jge ravno_bolee
...
ravno_bolee:
cmp ax,bx
je ravno
Как насчёт
Assembler
1
2
3
cmp ax,bx
jg bolee
je ravno
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2011, 17:34

Программа с применением условных и безусловных переходов
разработать программу с применением условных и безусловных переходов

Hex - коды условных и безусловных переходов
Добрый день! Кто знает как при исследовании dump `а ну или вообще при просмотре программы в hex `е...

Организация условных переходов
Используя приведенные ниже выражения, написать програм- му на ассемблере для вычисления...

Организация условных переходов. Ввод и вывод информации
Когда записать a=2 и b=3 (a&lt;b) выводит 21844. Почему? Как это исправить и что сделать, чтобы...


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

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

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