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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xzGORzx
Приведи свой исходный код. Невозможно вслепую понять, где у тебя ошибка.
 
И еще непонятно условие задачи. В каком виде изначально у тебя два числа, которые надо сложить - в бинарном виде, или в виде текстовых строк ?  
Ну то есть у тебя там что-то вроде:
 
Digit1 dd 02A853B0h
Digit2 dd 1
 
или
 
Digit1 db '02A853B0'
Digit1 db '1'
 
Если в виде текста (второй вариант), то их надо сначало сконвертировать в бинарный вид, сложить, а затем сконвертировать обратно.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 18:27 02-03-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xzGORzx
у тебя наведённая ошибка в программе и я на 100% уверен, что дело не в неправильном сложении чисел...

Всего записей: 24115 | Зарегистр. 06-12-2002 | Отправлено: 18:53 02-03-2011
xzGORzx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот исходник. Я каждую часть программы отдельно тестирую. Остальное работает бес проблем.

Код:
 
format PE GUI 4.0 at 7000000h    
 
include 'C:\fasm\include\win32ax.inc'
 
.data
 
vo dd 02A853B0h
bo dd 00000001h
 
.code
start:
mov edx, vo
add edx, bo
 
 .end start  
 

 
И еще вопрос, каким образом потом можно присвоить переменной vo значение edx ? (После сложения)
 
                         

Всего записей: 11 | Зарегистр. 09-12-2010 | Отправлено: 19:27 02-03-2011 | Исправлено: xzGORzx, 19:31 02-03-2011
Benchmark



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

Цитата:
format PE GUI 4.0 at 7000000h

Вот это (выделенное) - вообще зачем ?  
 
Вот рабочий код:
 
;----------------------------------------------
format PE CONSOLE 4.0
entry start
include 'win32ax.inc'
 
section '.code' code readable executable
 
  start:
         mov  eax, [vo]
         add  eax, [bo]
 
         invoke   ExitProcess, 0
 
section '.data' data readable writable
 
  vo     dd   02A853B0h
  bo     dd   00000001h
 
section '.idata' import data readable writable
 
  library kernel32, 'kernel32.dll'
  import  kernel32,\
              ExitProcess, 'ExitProcess'  
;----------------------------------------------
 

Цитата:
каким образом потом можно присвоить переменной vo значение edx ?

 
         mov   [vo], edx

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 19:42 02-03-2011 | Исправлено: Benchmark, 19:44 02-03-2011
xzGORzx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо громадное!
format PE GUI 4.0 at 7000000h Это я в каком-то хелпе прочитал, в другой программе на это не ругается.

Всего записей: 11 | Зарегистр. 09-12-2010 | Отправлено: 19:58 02-03-2011
Benchmark



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

Цитата:
format PE GUI 4.0 at 7000000h Это я в каком-то хелпе прочитал, в другой программе на это не ругается.

Эта директива позволяет явно задать базовый адрес вместо стандартного 401000h для win32 exe'шников. Чаще имеет смысл для библиотек DLL. В данном случае совершенно ни к чему.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 20:07 02-03-2011
xzGORzx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
При попытке скомпилировать FASM'ом код в х64, его вырывает в этом месте:

Код:
 
push eax
pop [NTX]  
 

Жалуется и на первую инструкцию и на вторую. "illegal instruction"
На х32 этот код работает нормально. Подскажите пожалуйста, в чем проблема?

Всего записей: 11 | Зарегистр. 09-12-2010 | Отправлено: 20:48 04-03-2011
Benchmark



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

Цитата:
На х32 этот код работает нормально. Подскажите пожалуйста, в чем проблема?

 
Проблема, как нетрудно догадаться, в размере инструкций. Ты пытаешься в 64-бит приложении поместить в стэк значение 32-битного регистра. Этого сделать нельзя. Чтобы все заработало, код должен выглядеть так:
 
push rax
pop [NTX]
 
причем NTX в сегменте данных должен быть объявлен, как 64-битный. Например, так:
 
NTX  dq  0

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 22:00 04-03-2011
xzGORzx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Такая проблема:
Нужно зациклить программу, без особой загрузки процессора, тк цикл будет выполняться по несколько 10-ков минут. И goto и jnz сильно грузят систему.
Цикл должен выполнялся до поступления данных в переменную.
Помогите пожалуйста, если возможно решить данную проблему.

Всего записей: 11 | Зарегистр. 09-12-2010 | Отправлено: 15:59 19-03-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xzGORzx
Чтобы не грузилась система, надо не крутить циклы, что в любом случае будет отнимать процессорное время, а передавать это время другим выполняемым процессам. Такие задачи решаются не на уровне команд процессора, а вызовом соответствующих функций операционной системы.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 16:09 19-03-2011
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xzGORzx
Если программа под Windows, то функции Sleep или SleepEx - именно то, что нужно.
 
Либо можно сделать чуть иначе - при поступлении данных в переменную генерировать собственный event или выставлять mutex, а "будить" цикл через WaitForSingleObject.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 16:54 19-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
У меня мало знаний по ассемблеру...
Нужно сделать одну задачу, можете подумать ерунда... но я голову уже вторую неделю ломаю, что и как...
Условие задачи такое...
Есть два числа (2 и 3) уже присвоенные в программе...
нужно сложить их и вывести результат на экран...
с задержкой разумеется, дабы увидеть ответ.
 
В понедельник уже сдать задачу нужно...

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 14:37 20-03-2011
akaGM

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

Цитата:
Нужно сделать одну задачу, можете подумать ерунда... но я голову уже вторую неделю ломаю, что и как...

и где результаты этой двухнедельной головоломной деятельности?

Всего записей: 24115 | Зарегистр. 06-12-2002 | Отправлено: 14:40 20-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так как я не много понимаю, тема Ассемблер началась недавно...
Есть это...
Model small
Stack 256
data segment
num1   dw   2
num2   dw   3
rek   dw   0
data ends
code segment
assume cs:code, ds:data
start:
       mov ax, data
       mov ds, ax
       mov ax, num1
       add ax, num2
       mov rek, ax
   pop cx
   pop dx
   pop bx
pop ax
Mov ax,@data
Mov ds,ax
Mov dx, offset rek
Mov ah, 09h
Int 21h
Mov ah, 1h
Int 21h
mov ah, 04ch
int 21h
code ends
  end start

Теоретически она должна слаживать два числа и выводить результат на экран...
Помогите пожалуйста разобраться...

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 14:43 20-03-2011 | Исправлено: praidik, 19:57 20-03-2011
VGrad



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

Цитата:
Теоретически она должна слаживать два числа и выводить результат на экран...  

Она и "слаживает" , но перед тем как отображать неплохо бы цифры конвертнуть в ASCII !

Всего записей: 59 | Зарегистр. 25-04-2006 | Отправлено: 20:15 20-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можете ли помочь с решением проблемы?
 
Model small
stack 256
dataseg
numb1 db 3
numb2 db 2
codeseg
start:
mov ax, @data
mov ds,ax
mov ax, numb1
add ax, numb2
aaa
xchg al,ah
add ah, '00'
int 29h
mov al,ah
int 29h
Mov ah, 1h
Int 21h
mov ah, 04ch
int 21h
end start
 Она должна сложить два числа и выести результат на экран...
При попытке компиляции выскакивают 3 ошибки:
**Error** qwe.asm(10) Operand types do not match
**Error** qwe.asm(11) Operand types do not match
**Error** qwe.asm(14) Constant too large

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 16:47 21-03-2011
Benchmark



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

Цитата:
mov ax, numb1  

Размерность регистра ax - 16 бит, numb1 - 1 байт, т.е. 8-битное число. Прокатит такое:
movzx ax, numb1
 

Цитата:
add ax, numb2

То же самое.
 

Цитата:
add ah, '00'  

А теперь наоборот - к 8-битному регистру ты пытаешься добавить двухбайтовое (16-битное) число 0x3030

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 18:07 21-03-2011 | Исправлено: Benchmark, 18:07 21-03-2011
praidik



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

Цитата:
movzx ax, numb1

Попробовал...
Вылетает "I llegal instruction for curretly selected processor(s)"
Что не так?(

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 16:50 22-03-2011
Benchmark



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

Цитата:
Вылетает "I llegal instruction for curretly selected processor(s)"  

Инструкция movzx поддерживается, начиная с 386 процессора. Вот и выставь ему вначале:
.386
 
А еще лучше сразу  .586, чтоб подобных ситуаций не возникало.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 17:00 22-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Benchmark
Благодарю.
Последний вопрос...
В каком виде записать
add ax, numb2??
Сори за глупые вопросы...

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 17:25 22-03-2011
Открыть новую тему     Написать ответ в эту тему

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