Консультация № 189356
13.05.2016, 12:24
0.00 руб.
1 11 1
Здравствуйте. Прошу ваc помочь решить вот такое задание:




Приложение:
Очень срочно. Помогите пожалуйста
Прикрепленные файлы:
85996b353622ef2595637373fa4844874a62c1c4.png

Обсуждение

давно
Посетитель
400184
10
13.05.2016, 12:28
общий
здесь лучше видно
Прикрепленные файлы:
d53b6283d6673e556cf53ae77eddb564.doc
давно
Посетитель
7438
7205
13.05.2016, 12:36
общий
Адресаты:
Числа целые?
Во вложении один пример, в доке - три
Надо все три? Вас таких трое, немогущих разобраться в Ассемблере?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400184
10
13.05.2016, 12:52
общий
Надо все 3
давно
Посетитель
400184
10
13.05.2016, 12:53
общий
Адресаты:
Надо все 3 сделать
давно
Посетитель
7438
7205
13.05.2016, 13:06
общий
Адресаты:
Я задал еще один важный вопрос: числа целые или вещественные?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400184
10
13.05.2016, 13:11
общий
Адресаты:
целые
давно
Посетитель
7438
7205
13.05.2016, 13:16
общий
Адресаты:
Тогда уж уточните еще:
1) TASM, MASM,...
2)exe, com?
3)результат выводить на экран?
4)три примера в одной программе или по отдельности?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400184
10
13.05.2016, 13:19
общий
Адресаты:
1) TASM
2) exe
3) да
4) отдельно


Нужноооо по скорее
давно
Посетитель
7438
7205
13.05.2016, 13:23
общий
Адресаты:
По свободе сегодня сделаю
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400184
10
13.05.2016, 13:24
общий
Адресаты:
хорошо
давно
Посетитель
7438
7205
13.05.2016, 14:52
общий
это ответ
Здравствуйте, yasha190!
Держите три программки...
[code lang=asm h=200]
data segment
sRes db 'Y = $'
y dw 0 ;здесь будет результат
data ends

_stack segment stack 'stack'
dw 128 dup(?) ;стек
_stack ends

assume cs:code, ds:data, ss:_stack
code segment
start:
mov ax, data
mov ds, ax

mov ax, 4 ;ax = 4
cwd ;dx:ax = 4
mov bx, 2
idiv bx ;ax = 4/2, dx отбрасываем
mov di, 17
sub di, ax ;di = 17-4/2

mov ax, 14 ;ax = 14
mov bx, 5
imul bx ;dx:ax = 14*5
add ax, 37
adc dx, 0 ;dx:ax = 37+14*5
mov bx, 2
idiv bx ;ax = (37+14*5)/2, остаток в dx отбрасываем
mov si, bx ;si = ax = (37+14*5)/2

mov ax, 5
mov bx, 6
imul bx ;dx:ax = 5*6
add ax, si ;ax = (37+14*5)/2+5*6

cwd ;dx:ax = (37+14*5)/2+5*6
idiv di ;ax = ((37+14*5)/2+5*6)/(17-4/2), dx отбрасываем
mov di, ax ;di = ((37+14*5)/2+5*6)/(17-4/2)

mov ax, 5 ;ax = 5
mov bx, 4
imul bx ;dx:ax = 5*4, dx отбрасываем

add ax, di ;ax = ((37+14*5)/2+5*6)/(17-4/2) + 5*4

mov [Y], ax ;сохраним результат

;выведем результат из ax
push ax ;сохраним число в стеке
mov ah, 9
lea dx, sRes
int 21h ;выводим сообщение
pop ax

mov bx, 10 ;система счисления
xor cx, cx ;счетчик в стеке
test ax, ax ;проверим на знак числа
jge div_loop ;>=0 просто выводим
neg ax ;ax = -ax
push ax ;сохраним
mov dl, '-' ;выведем знак минуса
mov ah, 2
int 21h
pop ax
div_loop: ;цикл получения цифр делением на 10
xor dx,dx
div bx ;получаем младшую цифру
push dx ;запоминаем в стеке
inc cx ;считаем
test ax,ax ;повторяем пока не ноль в ах
jnz div_loop

dig_loop: ;цикл вывода цифр в обратном порядке
pop dx ;извлекаем цифру
add dl,'0' ;переводим в символ
mov ah, 2
int 21h ;выводим на экран
loop dig_loop

xor ax, ax ;ожидаем любую клавишу
int 16h

mov ax,4c00h
int 21h
code ends
end start
[/code]
[code lang=asm h=200]
data segment
sRes db 'Y = $'
y dw 0 ;здесь будет результат
data ends

_stack segment stack 'stack'
dw 128 dup(?) ;стек
_stack ends

assume cs:code, ds:data, ss:_stack
code segment
start:
mov ax, data
mov ds, ax

mov ax, 36 ;ax = 36
cwd ;dx:ax = 36
mov bx, 4
idiv bx ;ax = 36/4, dx отбрасываем
mov di, ax ;di = 36/4

mov ax, 35 ;ax = 35
cwd ;dx:ax = 35
mov bx, 8
idiv bx ;ax = 35/8, dx отбрасываем
add di, ax ;di = 36/4 + 35/8

mov ax, 15
sub ax, 7
cwd ;dx:ax = 15-7
mov bx, 2
imul bx ;dx:ax = (15-7)*2
add ax, 34
adc dx, 0 ;dx:ax = 34+(15-7)*2

idiv di ;ax = (34+(15-7)*2)/(36/4+35/8), dx отбрасываем
mov di, ax ;di = (34+(15-7)*2)/(36/4+35/8)

mov ax, 34 ;ax = 34
mov bx, 2
imul bx ;dx:ax = 34*2

xchg ax, di ;ax = (34+(15-7)*2)/(36/4+35/8), di = 34*2
sub ax, di ; ax = (34+(15-7)*2)/(36/4+35/8) - 34*2

mov [Y], ax ;сохраним результат

;выведем результат из ax
push ax ;сохраним число в стеке
mov ah, 9
lea dx, sRes
int 21h ;выводим сообщение
pop ax

mov bx, 10 ;система счисления
xor cx, cx ;счетчик в стеке
test ax, ax ;проверим на знак числа
jge div_loop ;>=0 просто выводим
neg ax ;ax = -ax
push ax ;сохраним
mov dl, '-' ;выведем знак минуса
mov ah, 2
int 21h
pop ax
div_loop: ;цикл получения цифр делением на 10
xor dx,dx
div bx ;получаем младшую цифру
push dx ;запоминаем в стеке
inc cx ;считаем
test ax,ax ;повторяем пока не ноль в ах
jnz div_loop

dig_loop: ;цикл вывода цифр в обратном порядке
pop dx ;извлекаем цифру
add dl,'0' ;переводим в символ
mov ah, 2
int 21h ;выводим на экран
loop dig_loop

xor ax, ax ;ожидаем любую клавишу
int 16h

mov ax,4c00h
int 21h
code ends
end start
[/code]
[code lang=asm h=200]
data segment
sRes db 'Y = $'
y dw 0 ;здесь будет результат
data ends

_stack segment stack 'stack'
dw 128 dup(?) ;стек
_stack ends

assume cs:code, ds:data, ss:_stack
code segment
start:
mov ax, data
mov ds, ax

mov ax, 4 ;ax = 4
cwd ;dx:ax = 4
mov bx, 3
imul bx ;ax = 4*3, dx отбрасываем
sub ax, 38 ;ax = 4*3-38
neg ax ;ax = 38-4*3
cwd ;dx:ax = 38-4*3
mov bx, 3
idiv bx ;ax = (38-4*3)/3, dx отбрасываем
mov di, ax ;di = (38-4*3)/3

mov ax, 14 ;ax = 14
sub ax, 5 ;ax = 14-5
mov bx, 3
imul bx ;dx:ax = (14-5)*3

add ax, 36
adc dx, 0 ;dx:ax = 36+(14-5)*3
idiv di ;ax = (36+(14-5)*3)/((38-4*3)/3), dx отбрасываем

mov bx, 3
imul bx ;dx:ax = ((36+(14-5)*3)/((38-4*3)/3))*3

sub ax, 3 ;ax = ((36+(14-5)*3)/((38-4*3)/3))*3-4, dx отбрасываем

mov [Y], ax ;сохраним результат

;выведем результат из ax
push ax ;сохраним число в стеке
mov ah, 9
lea dx, sRes
int 21h ;выводим сообщение
pop ax

mov bx, 10 ;система счисления
xor cx, cx ;счетчик в стеке
test ax, ax ;проверим на знак числа
jge div_loop ;>=0 просто выводим
neg ax ;ax = -ax
push ax ;сохраним
mov dl, '-' ;выведем знак минуса
mov ah, 2
int 21h
pop ax
div_loop: ;цикл получения цифр делением на 10
xor dx,dx
div bx ;получаем младшую цифру
push dx ;запоминаем в стеке
inc cx ;считаем
test ax,ax ;повторяем пока не ноль в ах
jnz div_loop

dig_loop: ;цикл вывода цифр в обратном порядке
pop dx ;извлекаем цифру
add dl,'0' ;переводим в символ
mov ah, 2
int 21h ;выводим на экран
loop dig_loop

xor ax, ax ;ожидаем любую клавишу
int 16h

mov ax,4c00h
int 21h
code ends
end start
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа