Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: Stritch
Дата сообщения: 03.10.2007 09:48
Люди добрые помогите пожалуйста!!!! В универе задали задачу а в Асемблере я полный ноль
Требуеться сложить два числа в двоичном коде,результат вернуть в 10-ричную систему: числа X=-31 Y=59 Буду премного благодерен за листинг программы
Автор: Stritch
Дата сообщения: 04.10.2007 17:20
неужели ни кто не поможет .....2 дня осталось.......
Автор: Umbrall
Дата сообщения: 05.10.2007 23:59
Люди помогите пожалуйста!!!! Задали задачу нужно заставить на экране бегать ромб по идеи влево вправо. И на ассемблере я просто не знаю, не процедур, не функций, и правил, подскажите, где можно найти такой мануал что описание процедуры или функции и описание что именно делает входные данные и исходные
Автор: zzz528
Дата сообщения: 06.10.2007 01:02
Umbrall
Если под windows то это довольно легко можно сделать через GDI.
[more]
мне монравилсаь эта задача захотел сам такое сделать
вот что получилось:

прога собираеться масмом:
ml -c -coff -Cp romb.asm
link -release -subsystem:windows -entry:start romb.obj
листниги inc файлов не включены
замените своими



Код:
;romb.asm
.486
.model flat
include kernel.inc
include user.inc
include gdi.inc
.code
public _start
_start:
    push    ebp
    mov    ebp,esp
    xor    ebx,ebx
    push    ebx
    call    GetModuleHandle
    mov    hinst,eax
    mov    rombik.hInstance,eax
    push    IDI_WINLOGO
    push    ebx
    call    LoadIcon
    mov    rombik.hIcon,eax
    push    IDC_ARROW
    push    ebx
    call    LoadCursor
    mov    rombik.hCursor,eax
    push    offset rombik
    call    RegisterClassEx
    
    
    push    ebx
    push    hinst
    push    ebx
    push    ebx
    push    CW_USEDEFAULT
    push    CW_USEDEFAULT
    push    CW_USEDEFAULT
    push    CW_USEDEFAULT
    push    WS_CAPTION+WS_VISIBLE+WS_SYSMENU
    push    offset name_romb
    push    offset name_romb
    push    ebx
    call    CreateWindowEx
    
cycl_msg:
    push    ebx
    push    ebx
    push    ebx
    push    offset romb_msg
    call    GetMessage
    or    eax,eax
    jz    end_cycl_msg

    push    offset romb_msg
    call    TranslateMessage

    push    offset romb_msg
    call    DispatchMessage
    jmp    cycl_msg
end_cycl_msg:
    mov    esp,ebp
    pop    ebp
    ret


romb_main:
;-----    
    push    ebp
    mov    ebp,esp
    mov    eax,[ebp+12]
    cmp    eax,WM_CREATE
    je    wmcreate
    cmp    eax,WM_DESTROY
    je    wmdestroy
    cmp    eax,WM_PAINT
    je    wmpaint
    mov    esp,ebp
    pop    ebp
    jmp    DefWindowProc
wmcreate:
assume edi:PTR RECT
    mov    directn,ebx
    mov    edi,offset client_rect
    push    edi
    push    [ebp+8]
    call    GetClientRect
    mov    esi,offset romb_vertices
    mov    ecx,[edi].right
    shr    ecx,1
    mov    eax,ecx
    mov    [esi+8],eax
    mov    [esi+24],eax
    sub    eax,50
    mov    [esi],eax
    add    ecx,50
    mov    [esi+16],ecx
    mov    ecx,[edi].bottom
    shr    ecx,1
    mov    eax,ecx
    mov    [esi+4],ecx
    mov    [esi+20],ecx
    sub    eax,70
    mov    [esi+12],eax
    add    ecx,70
    mov    [esi+28],ecx
    push    timer_proc
    push    10
    push    1
    push    [ebp+8]
    call    SetTimer
    jmp exit_false
wmdestroy:
    push    1
    push    [ebp+8]
    call    KillTimer
    push    ebx
    call    PostQuitMessage
    jmp exit_wndproc
wmpaint:
    sub    esp,size PAINTSTRUCT
    mov    esi,esp
assume    esi:PTR PAINTSTRUCT
    push    esi
    push    [ebp+8]
    call    BeginPaint
    push    4
    push    offset romb_vertices
    push    eax
    call    Polygon
    push    esi
    push    [ebp+8]
    call    EndPaint
    jmp    exit_false
exit_false:
    xor    eax,eax
exit_wndproc:
    mov esp,ebp
    pop ebp
    ret    16

timer_proc:
    lea    esi,romb_vertices
    mov    eax,10
    cmp    directn,1
    jz    move_right
    sub    dword ptr [esi],eax    
    sub    dword ptr [esi+8],eax
    sub    dword ptr [esi+16],eax    
    sub    dword ptr [esi+24],eax
    cmp    dword ptr [esi],0
    jns    @f
    mov    directn,1
@@:
    jmp    paint

move_right:
    add    dword ptr [esi],eax    
    add    dword ptr [esi+8],eax
    add    dword ptr [esi+16],eax    
    add    dword ptr [esi+24],eax
    mov    ecx,dword ptr client_rect+8
    cmp    ecx,dword ptr [esi+16]
    ja    @f
    mov    directn,0
@@:
paint:
    mov    eax,[esp+4]
    push    1
    push    offset client_rect
    push    eax
    call    InvalidateRect
    ret    16
    
.data
rombik WNDCLASSEX<size rombik,CS_HREDRAW+CS_VREDRAW,\
             offset romb_main,0,0,0,0, \
             0,COLOR_MENU+1,0,offset name_romb,0>


name_romb db 'Romb',0


.data?
romb_vertices    dd 8 dup(?)
client_rect    RECT<?>
directn    dd ?
hinst    dd ?
hwnd    dd ?
romb_msg    MSG<?>
end
Автор: Umbrall
Дата сообщения: 06.10.2007 15:19
zzz528
спасибо, и отличная вещь HELPPC2
а можно привести пример под дос?
Автор: vai fai
Дата сообщения: 06.10.2007 20:09
Народ, помогите написать программу на ТАСМе. Дана матрица MxN. Подсчитать сумму четных строк, нечетных столбцов, найти максимальные и минимальные элементы?
Автор: zzz528
Дата сообщения: 07.10.2007 18:48
Umbrall
Под ДОС это сложнее намного[more]
теоритически рисование под дос выполняеться изменением цвета пикселя
(вот как его изменить в конкретном месте экрана незнаю)
В`BLUEBOOK of ASSEMBLY ROUTINES for the IBM PC & XT' by Christopher L. Morgan (C) 1984
есть GRAPHICS.ASM - пример рисовалки под дос, если вникнуть как там задаются точки то можно выполнить твою задачу
[/more]

Автор: Antyrat
Дата сообщения: 17.10.2007 19:19
Молю о помощи........ В ассемблере дуб дубом, а вот такое нужно зделать:

Через акамулятор ввести в память последовательность чисел 125,126,127,128,129,130. При помощи стека 3 числа через один записать в реестры B,C,D
Автор: Lyrik
Дата сообщения: 17.10.2007 19:32
Antyrat
Задание уточни. что такое
Цитата:
записать в реестры B,C,D
? Может имеется ввиду регистры BX, CX, DX или их младшие или старшие части?
Автор: Antyrat
Дата сообщения: 17.10.2007 19:40
ну я ж сказал что полный 0 в Ассемблере. Скорее всего в BX, CX, DX, главное если не трудно напишите, регистры думаю я поминяю если что. Или от них многое зависит?
Автор: Lyrik
Дата сообщения: 17.10.2007 19:56

Код: mov ah,0
mov si,0300h
mov al,125
mov [si],al ; записали в 0300 125
push ax ; записали в стек
pop bx ; записали в bx
inc si
inc al
mov [si],al ; записали в 0301 126
inc si
inc al
mov [si],al ; записали в 0300 127
...
Автор: denfrol
Дата сообщения: 22.10.2007 21:47
народ, если кто сможет подсобить - подсобите!
задача:дан в файле массив N десятичных чисел до 5-ти разрядов до 10000.Найти max четное число и вывести его. ваще не представляю, массив в какой системе счисления будет рассматриваться? и как его в файл занести? просто цифры через пробел забить? вообщем, сами понимаете, какой я тупой! помогите, если сможете!
Автор: ymg2000
Дата сообщения: 01.11.2007 08:11
Подскажите новичку,
в инструкции rep movs при активации флага D декремент адреса происходит только в источнике, или в приемнике тоже?
Автор: Abs62
Дата сообщения: 01.11.2007 09:16
ymg2000
В приёмнике тоже.
Автор: rain87
Дата сообщения: 01.11.2007 15:26
мало того, без активации флага Д инкремент происходит тоже и si и di
Автор: lexamac2006
Дата сообщения: 02.11.2007 19:16
Подскажите как установить сторожа на COM программу на ассемблере ?!
Автор: ymg2000
Дата сообщения: 03.11.2007 07:50
Гуру, подскажите.
Часто в дизассемблере приходится видеть следующий код:
mov edi, edi (обычно на т-ке входа в процедуру в dll-ах).
Не совсем понятно, зачем он (переписать себя на себя)?
Автор: Abs62
Дата сообщения: 03.11.2007 12:14
ymg2000
Для обеспечения Hot patching. Позволяет модифицировать функции непосредственно в оперативной памяти.
Автор: ymg2000
Дата сообщения: 03.11.2007 12:51
Abs62
Спасибо.
В общем, понял, что это для чего-то нужно, скорее всего при написании OS и системных библиотек... [more]Эта вроде бы бесполезная инструкция делает возможной новую особенность современного ядра: патч-на-лету (Hot Patching). Hot Patching предназначен для соответствия требованиям, предъявляемым к современным серверам (и рабочим станциям, раз уж на то пошло), позволяя устанавливать некоторые обновления на живое ядро и перенаправлять вызовы функций на замену (или например на фильтр и т.п.)"[/more] и пока принимаю на веру.
Автор: Abs62
Дата сообщения: 03.11.2007 13:14
ymg2000

Цитата:
это для чего-то нужно

Это просто пустышка, зарезервированное место - два байта, на место которых можно влепить short jmp. А mov вместо nop используется для ускорения работы - один mov выполняется быстрее, чем два nop.
Автор: ymg2000
Дата сообщения: 03.11.2007 16:06
Abs62
Еще раз спасибо. Вот теперь понятно даже моему утомленному уму. В общем - элегантно, но если пользоваться неаккуратно, можно такое спагетти наплести!
Автор: virpool
Дата сообщения: 03.11.2007 23:19
Люди) Нужна помощь плз)
Мне была дана задача в универе написать программу на асме имитирующую умножение двух однобайтных чисел в столбик, а результат занести в ах. Вопрос вот в чем, сдесь нужно использовать сумматор, в котором хранится результат сложения на каждом шаге и он должен быть объвлен как dw, т.к. результат может превышать 1 байт и должен, как я раньше написал, быть занесен в конце в ах. Так вот как можно число, объявленое как db, прибавлять к этому сумматору по ходу программы. Старался изложить подробно, чтобы была понятна суть)
Ниже привожу код что написал, где не могу с этим прибавлением разобраться
[more]
.model small
.stack 100h
.data
m1 db 'Введите две последних цифры своего студенческого: $'
x db 0
y db 0
sum dw 0

.code

Main proc NEAR

mov ax, @data
mov ds, ax

mov ah, 9
lea dx, m1
int 21h
mov ah, 1
int 21h
sub al, '0'
mov cl, 10
mul cl
add x, al
mov ah, 1
int 21h
sub al, '0'

mov al, x
mov y, al
add y, 100

p:
sal y, 1
jc @p1
n:
sal sum, 1
cmp y, 0
jnz p
jmp exit

@p1:
add sum, x ; Вот тут я не могу разобраться как это реализовать
jmp n

exit:
mov ax, sum
mov ah, 8
int 21h
mov ah, 4ch
int 21h

Main endp
end Main
[/more]
Автор: ManHunter
Дата сообщения: 04.11.2007 00:56

Цитата:
как можно число, объявленое как db, прибавлять к этому сумматору по ходу программы


x db ?
sum dw ?

....

xor cx,cx
mov cl,x
add sum,cx
Автор: virpool
Дата сообщения: 04.11.2007 01:56
ManHunter
спасибо) но я уже понял что стормозил)
тут еще можно было и cbw использовать
Автор: Umbrall
Дата сообщения: 09.11.2007 08:02
помогите вот такая задача:
дается рисунок любой, цветной, его сделать в черно-белый
Автор: Qraizer
Дата сообщения: 09.11.2007 21:35
Вроде так: яркость = 0.3*красный + 0.11*синий + 0.59*зелёный
Автор: PLAG
Дата сообщения: 11.11.2007 14:59
Вопрос не совсем по программированию на Assembler, но я не знаю куда больше написать. Помогите пожалуйста решить задачу: даны 2 числа: 8710=10101112 и 5710=1110012 Разделить эти 2 числа на сумматоре обратных кодов с восстановлением частичного остатка и получением частвного в обратном коде.

Пробовал так:

Код:
1-ое число (обратный код): 00 1010111 (знаковая часть + число)
2-ое число (обратный код): 00 111001 (знаковая часть + число)

+00 1010111 000000
00 111001
----------------------
01 1001001 000000
Автор: faZZ
Дата сообщения: 20.11.2007 08:28
нужна помощь с нахождением простых чисел на ассемблере. конкретно, задано число не более 10^9, определить простое оно или нет. может кто встречал реализацию?
Автор: akaGM
Дата сообщения: 20.11.2007 17:44
faZZ
найди/пойми сначала сам алг, например решето эратосфена, а потом и до реализации недалеко...
Автор: Kotus
Дата сообщения: 20.11.2007 20:43
Ребята помогите пожалуйста. Выздоровил препад и ничего не объясняя дал курсовую. Кто может напишите ее пожалуйста. Вот задание.

Ввести с клавиатуры формулу где:
<формула>::=<цифра>(<формула><знак><формула>)
<знак>::=+ | -
<цифра>::= 0|1|2|3|4|5|6|7|8|9

Создать файл ААА.ТХТ и записать в него эту формулу. Вычислить ее значение и дописать его в файл.
Выдать содержимое файла на экран.
Например: 22+(38-3)+12=69

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.