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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
prg segment para public 'code'
assume cs:prg,ss:prg,es:prg,ds:prg
org 100h
start:  
    
    mov ah, 9
    mov dx, offset Str_a
    int 21h
    
    call Get_chislo
    mov a, dl
    
    mov ah, 9
    mov dx, offset Str_b
    int 21h
    
    call Get_chislo
    mov b, dl
    mov bl, a
    mov cl, b
           add bl, cl; а+b
           
mov cl, a
mov al, 2
mul cl; 2a
 
mov al, bl
 
div cl; (a+b)/2a
 
 
MOV AX,4C00H  
INT 21H  
CODES ENDS  
END PROGRAM
Посмотрите пожалуста код проги: тут надо сделать ввод чисел, потом вычислить выражение Y=(a+b)/2a, и вывести в десятеричном виде, если я с регистрами не напутала то ввод и подсчет выражения должны быть правильны,а вот вывод не знаю.

Всего записей: 4 | Зарегистр. 27-04-2010 | Отправлено: 19:33 28-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery12
открой этот топик как версию для печати (ссылка "Версия для печати" вверху) и поищи по уже написанному (типа mov ah, 9h или int 21h), этот вопрос (вывод чисел на консоль) здесь обсуждался раза два как минимум...
 
---
стоп!
а это кто тебе писал?

Код:
    mov ah, 9
    mov dx, offset Str_a
    int 21h

это и есть вывод на экран...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:17 28-04-2010
aspis

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

Цитата:
div cl; (a+b)/2a  

В al частное, в ah остаток будут в HEX виде, который необходимо перевести в строковый вид наверное.
Для примера перевод строки в число и обратно
вроде должно работать

Всего записей: 87 | Зарегистр. 27-08-2007 | Отправлено: 20:48 28-04-2010
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM
Что то я плохо понял. Вот как бы ты такой код написалбы на асме?

Код:
 
for(i=0;i<N;i++)
{
   printf(prod[i].name\t prod[i].cost\t prod[i].quantity);
   printf("\n");
}
 

P.S. пишу на асме 8086

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 12:14 29-04-2010 | Исправлено: blaro, 12:14 29-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
ну это не совсем и на Сях, а так...
ты умеешь строку выводить?
 

Код:
crlf db 0ah, 0dh, '$'
Str_a db 'prod[i].name', 09h, 'prod[i].cost', 09h, 'prod[i].quantity', '$'
 
    mov ah, 9
    mov dx, offset Str_a
    int 21h  
    mov ah, 9
    mov dx, offset crlf
    int 21h

извини, формировать саму строку (может придётся три раза фигачить вывод для каждого prod.) и циклить -- ты уж сам...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 13:39 29-04-2010 | Исправлено: akaGM, 13:44 29-04-2010
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM
Так умею. Вот теперь все понятно. Спасибо!

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 13:43 29-04-2010
akaGM

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

Код:
mov dx, offset Str_a
-- стрёмная конструкция
принято вот так делать:
Код:
lea dx, Str_a

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 13:47 29-04-2010 | Исправлено: akaGM, 13:48 29-04-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:04 29-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
для flat-модели памяти разницы нет, а для
Цитата:
P.S. пишу на асме 8086

есть, из-за сегментации...
пролог программы для этого случая в теории всегда выглядит как-то так:
Код:
 
mov ax, ds
push ax ; или mov es, ax
pop es
...

и тогда все lea грузят смещения всех переменных относительно es, кот. равен ds
иначе пришлось бы _всегда_ писать
lea dx, ds:var_name
что не все асеемблеры допускают, а
mov dx, offset var_name
вообще-то опять не во всех ассемблерах однозначно говорит, где расположена var_name
и отчего "её смещать"...
 
вроде так, если я всё это дело не забыл на фиг...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 14:27 29-04-2010 | Исправлено: akaGM, 17:14 29-04-2010
Abs62



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

Цитата:
иначе пришлось бы _всегда_ писать  
lea dx, ds:var_name  
что не все асеемблеры допускают,

А какие-то допускают? Вроде как смещение в любом случае считается по сегменту, в котором переменная прописана. Какой смысл указывать сегментный регистр?

Цитата:
mov dx, offset var_name  
вообще-то опять не во всех ассемблерах однозначно говорит, где расположена var_name  
и отчего "её смещать"...  

Почему оно неоднозначно?

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 18:17 29-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
точно помню, что низзя и только для com и flat ззя
не буду вспоминать, что придираешься?
пусть делает как хочет...
 
---
вроде вспомнил: так ни в коем случае нельзя делать для локальных переменных
 
и вообще lea быстрее!

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 18:37 29-04-2010 | Исправлено: akaGM, 18:57 29-04-2010
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
lea функциональнее, с её помощью можно даже вычисления проводить. Типа lea eax,[ebx*4+edx]  

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:40 29-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
тебя всё на 32+ бита тянет, а чел, небось, на турбо16 сидит...
 
вот пример геморра с offset в старых версиях масма

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:36 29-04-2010
Abs62



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

Цитата:
тебя всё на 32+ бита тянет, а чел, небось, на турбо16 сидит...  

Так оно и в 16 разрядах работает аналогично - побочный эффект допустимости индексной арифметики.


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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 20:49 29-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
работает, работает, сейчас будешь объяснять чтО такое ebx
хорошо ещё, что не вслух...
кстати, а ты как этот регистр называешь?
 
  mov eax, offset array[ebx*4+edx]
  mov eax, offset [ebx*4+edx]
 
тоже ничего...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 21:46 29-04-2010
KuPbI4

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

Всего записей: 212 | Зарегистр. 13-10-2008 | Отправлено: 21:49 29-04-2010 | Исправлено: KuPbI4, 22:58 30-04-2010
Abs62



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

Цитата:
кстати, а ты как этот регистр называешь?

Какой? ebx? ebx.

Цитата:
  mov eax, offset array[ebx*4+edx]  
  mov eax, offset [ebx*4+edx]  
 
тоже ничего...  

Вот именно, что ничего.

Цитата:
                  mov eax,offset[ebx*4+edx]
2.asm(6) : error A2098: invalid operand for OFFSET
 00000000  8D 04 9A          lea eax,[ebx*4+edx]
 



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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:32 29-04-2010
akaGM

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

Код:
      .386
      .model flat, stdcall
.data
array dd 100 dup(?)
.code
start:
  xor eax, eax
  mov eax, offset array[ebx*4+edx]
  mov eax, offset [ebx*4+edx]
  ret
end start

Код:
 
F:>tasm /iD:\INC abs.asm
Turbo Assembler  Version 4.1  Copyright (c) 1988, 1996 Borland International
 
Assembling file:   abs.asm
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  418k


Цитата:
кстати, а ты как этот регистр называешь?
 
Какой? ebx? ebx.

а произносишь?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 13:12 30-04-2010 | Исправлено: akaGM, 13:20 30-04-2010
Abs62



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

Цитата:
Turbo Assembler  Version 4.1  Copyright (c) 1988, 1996 Borland International  

Я так и думал.
Там, где masm честно говорит "нельзя", tasm просто игнорирует "offset". С естественно плачевным результатом.

Цитата:
10 00000008  8B 04 9A   mov eax, offset [ebx*4+edx]
11 0000000B  8B 04 9A   mov eax, [ebx*4+edx]

Как говорится, найдите десять различий.

Цитата:
а произносишь?

Как пишется.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 14:06 30-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
вот именно отсюда, в частности, моё:

Цитата:
что не все асеемблеры допускают

кстати, мои слова о необходимости писать сегментный префикс совсем из другой оперы
это я спутал с дефолтной привязкой косвенной адресации к "своим" регистрам
bp, bx, si, di к ss, ds, es
типа ds:[di + 4]
 

Цитата:
Как пишется.

в какой транскрипции?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 15:00 30-04-2010
Открыть новую тему     Написать ответ в эту тему

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