Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нормальный синтаксис:
offset metka всегда будет адрес, a dword ptr[metka] всегда будет переменная.
Кому-то просто было лень много букв писать.

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 14:01 22-04-2013
1234567890qwe



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
offset metka всегда будет адрес, a dword ptr[metka] всегда будет переменная.  

я может и ошибаюсь, но это уже при определении в коде(.CODE) а в сег. данных(.DATA) так ведь не объявишь?...

Всего записей: 51 | Зарегистр. 12-07-2012 | Отправлено: 14:31 22-04-2013 | Исправлено: 1234567890qwe, 14:40 22-04-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Там тоже всё просто:
.data
metka2 dd 11223344h
metka1 dd offset metka2
 

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 15:16 22-04-2013
1234567890qwe



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Там тоже всё просто:

metka1[metka2] -> metka2[11223344h] -> 11223344h
я правильно понял?

Всего записей: 51 | Зарегистр. 12-07-2012 | Отправлено: 15:36 22-04-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В переменной metka1 находится адрес метки2, а в переменной metka2- число 11223344h
Я неудачные названия выбрал- всё что в .data, это переменные.

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 15:56 22-04-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
.data
metka2 dd 11223344h
metka1 dd offset metka2
 
эквивалент
 
.data
metka1 label dword
metka2 dd 11223344h

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 16:31 22-04-2013
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вы таки думаете, что ему полегчало?

Всего записей: 11540 | Зарегистр. 03-08-2008 | Отправлено: 18:06 22-04-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
по-моему, чел учится плавать в бассейне без воды...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 18:10 22-04-2013
mynologin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens

Цитата:
offset metka всегда будет адрес, a dword ptr[metka] всегда будет переменная

К сожалению, синтаксис masm достаточно контринтуитивен, чтобы этой информации было недостаточно для экстраполяции на аналогичные случаи.
 
Например, по аналогии можно подумать, что чтение данных с адреса, заданного числом, возможно таким образом: mov eax,dword ptr[403000h]. На самом же деле masm'у глубоко по-барабану на скобки и ptr'ы, и он и глазом не моргнув соберёт mov eax,403000h.
А как же правильно читать данные по адресу 403000h? А правильно, оказывается, так: mov eax,ds:403000h.
Мало того, даже общеупотребимое естественное правило подстановки здесь не сработает. Если принять, что offset metka, как Вы говорите, всегда равносильно адресу, то естественным заключением было бы (по аналогии с предыдущим примером), что прочитать данные с этого адреса можно таким образом: mov eax,ds:offset metka (можно даже offset metka в скобки запихать). Авотхрен. ds: будет молча проигнорировано и собрано в mov eax,offset metka .

Всего записей: 65 | Зарегистр. 07-05-2011 | Отправлено: 22:10 22-04-2013
1234567890qwe



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вы таки думаете, что ему полегчало?

Ок, вроде все встало на свои места(у всех видимо просто свои методы объявлений, определений и.т.п. это путаницу вносит, для меня), наверное нужно больше примеров изучать! спасибо всем, за ваши диалоги...))

Всего записей: 51 | Зарегистр. 12-07-2012 | Отправлено: 23:21 22-04-2013
Maria93

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите написать процедуру, выводящую на экран сумму 4-х двузначных чисел в десятичной системе счисления. Проблема в том, что сумма может быть и трёхзначной(больше 256).    
 
 После собственно сложения у меня есть массив нам из трёх элементов, в котором хранятся цифры, которыми записывается сумма. В нам[0] хранятся сотни, в нам[1] - десятки, в нам[2] - единицы. А как дальше делать? Я написала так, но это не работает:
 

Код:
 
MOV AH, 0
MOV AL, NUM[0]; вносим в AL цифру сотен
MOV BL, 100;
MUL BL; умножаем на 100
MOV DX, AX; записываем в DX ответ
MOV AL, NUM[1]
MOV BL, 10
MUL BL; то же самое с десятками
ADD DX, AX; складываем сотни с десятками
MOV AL, NUM[2]
MOV AH, 0
ADD DX, AX; складываем всё
 
 


Всего записей: 8 | Зарегистр. 18-08-2012 | Отправлено: 01:34 02-05-2013
Zarkon06



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maria93
Примерно так (если пишем под DOS):

Код:
 
...
mov ah, 2  ; функция вывода символа
mov dl, NUM[0]
add dl, 30h ; первый символ
int 21h  
mov dl, NUM[1]
add dl, 30h ; второй символ
int 21h
mov dl, NUM[2]
add dl, 30h ; третий символ
int 21h
mov ax, 4c00h  
int 21h
 

Всего записей: 11 | Зарегистр. 06-12-2006 | Отправлено: 02:44 02-05-2013 | Исправлено: Zarkon06, 02:46 02-05-2013
Maria93

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zarkon06, большое спасибо. А если бы я всё-таки хотела получить настоящее число, чтобы с ним работать дальше?

Всего записей: 8 | Зарегистр. 18-08-2012 | Отправлено: 19:49 03-05-2013
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
оно и есть настоящее

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:51 03-05-2013
mozillafox777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как переслать содержимое регистра AX в восьмой элемент третьей строки   двумерного массива??

Всего записей: 3 | Зарегистр. 10-05-2011 | Отправлено: 22:44 10-06-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
.686
.model flat, stdcall
option casemap:none
 
.data?
_arr word 12 dup (12 dup (?)) ;array 12x12 words
 
.code
start:
    mov ax, 666h
    mov ecx, 8
    mov edx, 3
    lea edx, [edx*2 + edx]
    lea edx, [edx*4 + ecx] ;3*12 + 8
     
    mov _arr[edx*2], ax    ;_arr + (3*12 + 8)*2
    ret
END start

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 23:45 10-06-2013
MihaNix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задание было такое:
Пусть в сегменте кодов определена строковая переменная с помощью команды DB 'Personal Computer'. Напишите программу преобразующую строчные буквы данного слова в заглавные и наоборот, и записывающую результат в сегменте данных по смещению 0;  
Все написали подобно этому:
mov ax,70
mov [0],ax
mov ax,65
mov [1],ax
mov ax,72
mov [2],ax
mov ax,73
mov [3],ax
mov ax,6f
mov [4],ax
mov ax,6e
mov [5],ax
mov ax,61
mov [6],ax
mov ax,6c
mov [7],ax
mov cx,8
mov bx,0
mov ax,[bx]
sub ax,20
mov [bx],ax
inc bx
loop 36
nop
 
Вопрос возник - почему не работает такое:
 
mov ax,7065
mov [0],ax
mov ax,7273
mov [1],ax
mov ax,6f6e
mov [2],ax
mov ax,616c
mov [3],ax
mov cx,4
mov bx,0
mov ax,[bx]
sub ax,2020
mov [bx],ax
inc bx
loop 1e
nop
 
В чем ошибка?
Хотел схалявить - столько инструкций в дебагере не вводить и в итоге нерабочую программу получил.

Всего записей: 124 | Зарегистр. 18-06-2010 | Отправлено: 17:23 21-06-2013
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MihaNix

Цитата:
В чем ошибка?

А посмотреть в отладчике, что и куда пишется с таким алгоритмом, не судьба?
Сразу стало бы ясно, что если пишешь сразу по два байта, а не по одному, то и адрес надо увеличивать не на единицу, а на двойку.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 18:38 21-06-2013
kkuuhhaa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Растолкуйте пожалуйста с адресацией (профессор, я учил). Надо поменять порядок байт в большом количестве.
int kol; // количество чисел для swap
char *mem;
__asm
{mov cx,kol
loop:
    mov eax,mem
    bswap eax  
    mov mem,eax
loop loop
}  
Как здесь перейти к следующему числу? (VS10)

Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 22:59 15-12-2013 | Исправлено: kkuuhhaa, 23:03 15-12-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для этого есть intrinsic ф-я, ассемблер тут лишний:
 
for(j = 0; j < kol; ++j)
    arr[j] = _byteswap_ulong(arr[j]);

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 23:38 15-12-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru