Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2013, 14:14   #1
metqqq
 
Регистрация: 25.06.2013
Сообщений: 6
Восклицание 4 трудных задачи на вычисление и нахождение ... (Assembler)

необходимо решить 4 задачи,эти задачи будут на предстоящем экзамене в четверг, очень нужна ваша помощь
скрин заданий
metqqq вне форума Ответить с цитированием
Старый 26.06.2013, 06:09   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Вариант 13. (Надеюсь, что правильно)
m и n задаются непосредственно в коде
Компилятор: masm
Строка компиляции: ml /c /coff /Cp msgbox.asm
Строка сборки: link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib msgbox.obj
Код:
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

.data
template db "%d", 0
MsgCaption      db "Iczelion's tutorial no.2",0

.data?
i dd ?
j dd ?
m dd ?
n dd ?
r dd ?
c1 dd ?
c2 dd ?
c3 dd ?

buffer db 512 dup(?)

.code
start:

; вариант 13
mov c3, 0
mov c2, 0

mov m, 3
mov n, 4

mov i, 1   ; i = 1

u2:
mov ecx, m   ; eax = m
cmp ecx, i    ; i <= m ?      ; eax  - i
jz u3 ; выход из внешнего цикла если число ноль(ZF=1) или отрицательное(SF=1)
       ; jump если  eax - 1 <= 0  zf = 1 or sf = 1

mov j, 1   ; инициализация счетчика внутреннего цикла

u1:
mov ebx, n
sub ebx, i   ; ebx = n - i
cmp ebx, j  ;  j <=  n - i   ?
jz u4 ; выход из внутреннего цикла

mov eax, j
mul m    ; m * j
mov c1, eax   ; c1 =  m * j
mov eax, 2
mul i   ; i * 2
add c1, eax  ;   c1 = c1 +  i * 2

inc j  ; j++

mov eax, c1
add c2, eax   ; c2 = c2 + c1

jmp u1

u4:
inc i    ; i++

mov eax, c2
add c3, eax   ; c3 = c3 + c2

jmp u2

u3:

invoke wsprintf, ADDR buffer, ADDR template, c3
invoke MessageBox, NULL, ADDR buffer, ADDR MsgCaption, MB_OK


end start
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 26.06.2013, 06:18   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Вариант 12 ( мог ошибиться, но надеюсь, что правильно)

Код:
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

.data
template db "%d", 0
MsgCaption      db "Iczelion's tutorial no.2",0

.data?
k dd ?
l dd ?
m dd ?
n dd ?
c1 dd ?
c2 dd ?
c3 dd ?
buffer db 512 dup(?)

.code
start:

; вариант 12
mov c3, 0
mov c2, 0

mov m, 7
mov n, 9

mov k, 5   ; k = 5

u2:
mov ecx, m   ; ecx = m
cmp ecx, k    ; k <= m ?      ; ecx  - k
jz u3 ; выход из внешнего цикла

mov l, 1   ; инициализация счетчика внутреннего цикла

u1:
mov ebx, n
sub ebx, k   ; ebx = n - k
cmp ebx, l  ;  l <=  n - k   ?
jz u4 ; выход из внутреннего цикла

mov eax, k
mov c1, eax   ; c1 =  k
mov eax, l
add c1, eax  ;   c1 = c1 +  l

inc l  ; l++

mov eax, c1
add c2, eax   ; c2 = c2 + c1

jmp u1

u4:

mov eax, c2
mul k      ; c2 * k
mov c2, eax    ; c2 = eax

inc k    ; k++

mov eax, c2
add c3, eax   ; c3 = c3 + c2

jmp u2

u3:

invoke wsprintf, ADDR buffer, ADDR template, c3
invoke MessageBox, NULL, ADDR buffer, ADDR MsgCaption, MB_OK


end start
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 26.06.2013, 10:15   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Контакты ниже.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 26.06.2013, 11:38   #5
metqqq
 
Регистрация: 25.06.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Вариант 12,13
спасибо большое )
metqqq вне форума Ответить с цитированием
Старый 26.06.2013, 12:02   #6
metqqq
 
Регистрация: 25.06.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Вариант 12 ( мог ошибиться, но надеюсь, что правильно)

Код:
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

.data
template db "%d", 0
MsgCaption      db "Iczelion's tutorial no.2",0

.data?
k dd ?
l dd ?
m dd ?
n dd ?
c1 dd ?
c2 dd ?
c3 dd ?
buffer db 512 dup(?)

.code
start:

; вариант 12
mov c3, 0
mov c2, 0

mov m, 7
mov n, 9

mov k, 5   ; k = 5

u2:
mov ecx, m   ; ecx = m
cmp ecx, k    ; k <= m ?      ; ecx  - k
jz u3 ; выход из внешнего цикла

mov l, 1   ; инициализация счетчика внутреннего цикла

u1:
mov ebx, n
sub ebx, k   ; ebx = n - k
cmp ebx, l  ;  l <=  n - k   ?
jz u4 ; выход из внутреннего цикла

mov eax, k
mov c1, eax   ; c1 =  k
mov eax, l
add c1, eax  ;   c1 = c1 +  l

inc l  ; l++

mov eax, c1
add c2, eax   ; c2 = c2 + c1

jmp u1

u4:

mov eax, c2
mul k      ; c2 * k
mov c2, eax    ; c2 = eax

inc k    ; k++

mov eax, c2
add c3, eax   ; c3 = c3 + c2

jmp u2

u3:

invoke wsprintf, ADDR buffer, ADDR template, c3
invoke MessageBox, NULL, ADDR buffer, ADDR MsgCaption, MB_OK


end start
прочитал что MASM, TASM и emu8086 (в котором мы работаем) имеют совместимость, но при копировании кода появляется куча ошибок, и я не знаю как переписать этот код под emu8086 (без всяких окон, кнопок и прочих прелестей программирования), поможешь ?
p.s 13 вариант тоже нужно переделать
metqqq вне форума Ответить с цитированием
Старый 26.06.2013, 14:42   #7
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

emu8086
вариант 13
результат в регистре BH

Код:
name "var13"

org 100h

mov bl, 0
mov bh, 0

mov dl, 3
mov dh, 4

mov cl, 1   ; i = 1

u2:
mov ah, dh   ; ah = m
add ah, 1
cmp ah, cl    ; i <= m ?
jz u3 
mov ch, 1

u1:
mov ah, dh
sub ah, cl   ; ah = n - i
add ah, 1
cmp ah, ch  ;  j <=  n - i   ?
jz u4 

mov al, ch
mul dl    ; m * j
add bh, al   ; c1 =  m * j  
mov al, 2
mul cl   ; i * 2  
add bh, al  ;   c1 = c1 +  i * 2

inc ch  ; j++

jmp u1

u4:
inc cl    ; i++

jmp u2

u3:
; 

ret
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 26.06.2013, 15:08   #8
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

12 не понимаю, так как происходит переполнение 8 битного регистра, а как сбросить из 8 битного в 16 битный я не понимаю

12 примерно следующим образом

Код:
name "var12"

org 100h

mov bl, 0
mov bh, 0

mov dl, 5
mov dh, 6

mov cl, 5   ; k = 5

u2:
mov ah, dl   ; ah = m
add ah, 1
cmp ah, cl    ; k <= m ?
jz u3 
mov ch, 1

u1:
mov ah, dh
sub ah, cl   ; ah = n - k
add ah, 1
cmp ah, ch  ; l  <=  n - k   ?
jz u4 

add bl, cl 
add bl, ch

inc ch  ; l++

jmp u1

u4: 

mov al, bl
mul cl

add bh, al  


inc cl    ; i++ 

jmp u2

u3:
 

ret
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 26.06.2013, 16:11   #9
metqqq
 
Регистрация: 25.06.2013
Сообщений: 6
Хорошо

Цитата:
Сообщение от challengerr Посмотреть сообщение
12 не понимаю, так как происходит переполнение 8 битного регистра, а как сбросить из 8 битного в 16 битный я не понимаю

12 примерно следующим образом

Код:
name "var12"

org 100h

mov bl, 0
mov bh, 0

mov dl, 5
mov dh, 6

mov cl, 5   ; k = 5

u2:
mov ah, dl   ; ah = m
add ah, 1
cmp ah, cl    ; k <= m ?
jz u3 
mov ch, 1

u1:
mov ah, dh
sub ah, cl   ; ah = n - k
add ah, 1
cmp ah, ch  ; l  <=  n - k   ?
jz u4 

add bl, cl 
add bl, ch

inc ch  ; l++

jmp u1

u4: 

mov al, bl
mul cl

add bh, al  


inc cl    ; i++ 

jmp u2

u3:
 

ret
а тут в какой ячейке ответ ? (не шарю совсем =( )
P.S. хотел написать тебе ЛС но не нашел такой функции на этом форуме, можешь связаться со мной по любому из этих контактов ?:
ICQ 414754600
VK vk.com/metqqq
metqqq вне форума Ответить с цитированием
Старый 26.06.2013, 17:19   #10
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Цитата:
Сообщение от metqqq Посмотреть сообщение
а тут в какой ячейке ответ ?
В регистре bh.

Про задачу с совершенными числами (вариант 11) есть здесь: http://forum.xakep.ru/m_2412871/tm.htm

Про задачу с поиском простых чисел (вариант 10) есть здесь: http://habrahabr.ru/post/165397/

Возможно будет полезной страница здесь: http://citforum.ru/programming/asm.shtml

Список ресурсов для изучения ассемблера:
http://habrahabr.ru/post/131971/
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисление формулы (assembler) Cas01 Помощь студентам 0 29.02.2012 19:25
Нахождение максимального элемента (assembler) roxy7 Помощь студентам 0 07.12.2011 20:09
Вычисление формулы (assembler) lordofdeath Помощь студентам 0 01.12.2011 12:25
Кто решит несколько задач, не трудных artem66rus Паскаль, Turbo Pascal, PascalABC.NET 0 05.04.2011 21:34
Нахождение положительных элементов в массиве [Assembler] Godod Помощь студентам 0 07.11.2010 19:58