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

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



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хуге ничем не отличается от ларже, кроме дурной сегментной арифметики для высокоуровневых компиляторов. Она так же ограничена 1 мб, только позволяет использовать элементы массивов размером более 64 кб. Для нормального использования всей набортной памяти в дос нужен защищенный режим.
Вывод - ищите другие книжки, где нет упоминаний про смалл медиум ларже. Пора уже выбираться из каменного века в 21ый

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 13:42 06-07-2012
akaGM

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

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 13:49 06-07-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не понял? А в ларже ограничена, что ли? Вопрос в другом - где лишний полуметр взять, без защищенного режима... Если хмс/емс - там более 64 кб зараз не передашь.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 16:57 06-07-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да-да, <=1 MB, забыл...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 16:59 06-07-2012
Abs62



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

Цитата:
Хуге ничем не отличается от ларже, кроме дурной сегментной арифметики для высокоуровневых компиляторов.

Если уж затрагивать языки высокого уровня, то дело не только в сегментной арифметике.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:23 06-07-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
с точки зрения ассемблера - huge/large абсолютно без разницы, кроме описанного...
 
Добавлено:
и опять таки, модели памяти в 2012 году - есть дремучий каменный век, изучение оных иначе как для написания биосов и бутсекторов - есть тормоз обучения, и в свете наступления эпохи х64 - это преступление, за которое препода надо судить...
 
Добавлено:
ладно бы там сстемное программирование, драйверы и пр - тут я конечно двумя руками за углубленное изучение. но ведь речь идет об обыкновенном курсе университетского идиотизма, после которого новоиспеченный "программизд" будет еще пару лет переучиваться на рабочем месте... зачем такие нужны? проще индуса нанять - он хоть сразу нужное направление знает

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 19:44 06-07-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всех мочить...
 
Добавлено:
раньше я кандидатские экзамены по программированию принимал...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 12:13 07-07-2012 | Исправлено: akaGM, 12:16 07-07-2012
XAN

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ПРивет всем!
у меня вопрос... у Калашникова есть пример программы которая выполняясь перезаписывает сама себя в памяти.
 
Сама листинг есть по ссылке
http://www.kalashnikoff.ru/Assembler/issues/encl/009/PROG09.asm.htm
 
МОй вопрос таков:
 
там есть  код
Open_file proc
    cmp Handle,0FFFFh  ; Процедура открытия файла для чтения,
    jne Quit_open
    mov ax,3D00h
    int 21h
    mov Handle,ax
    ret
Quit_open:
    stc
    ret
Handle dw 0FFFFh                     <--------
Open_file endp
 
 
 Вот это непонятно откуда тут выясняется открыт ли файл ??? ведь переменную Handle мы придумали сами и присвоили ей значение Handle dw 0FFFFh
 Такое сравнение всегда будет верно,  если Handle не изменится, а в ходе программы на процедуру открытия файлы возврата больше не делается, то есть он открывается 1 раз и всё.
 смысл тогда в это проверке?
 

Всего записей: 271 | Зарегистр. 03-09-2004 | Отправлено: 15:27 12-07-2012 | Исправлено: XAN, 15:35 12-07-2012
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:37 12-07-2012
akaGM

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

Цитата:
ведь переменную Handle мы придумали сами

:)
а до сих пор для тебя кто придумывал?
 
ну непонятно тебе что такое инициализированные переменные, пиши так:
 
mov dx,offset File_name
mov Handle, 0FFFFh
call Open_file          ;Открываем файл
jc Error_file           ;Ошибка? 
 
кстати, всё равно Handle придётся где-то описАть :)
 

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 16:23 12-07-2012 | Исправлено: akaGM, 16:25 12-07-2012
XAN

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
смысл этой проверки какой ?  
в ходе работы программы попасть на функцию открытия файла можно только 1 раз.
Это значит что файл может быть открыт только в этой функции, а до этого он закрыт.
 
Если бы были возвраты на функцию открытия или попытки еще где то открыть файл в коде я бы понял зачем переменная, но файл технически в этой программе может быть открыт только 1 раз в начале кода.
 
 
 
"ну непонятно тебе что такое инициализированные переменные, пиши так: "
Дело не в этом ...
ПРидумали переменную... взяли значение с потолка... Открыли файл и модифицировали переменную если открыли успешно.
Алгоритм  
 
Открыли файл на чтение
ПРочли файл в область памяти в которую загрузились
Закрыли файл
Вывели сообщение об успехе...
 
Целесообразность этой переменной непонятна.
 
Файл открыли... файл закрыли... Зачем проверять открыт ли он? если в коде нет больше попыток его открыть.
 
 
 
То есть если взять и убрать эту переменную и её проверки работать то программа всё равно будет?
 

Всего записей: 271 | Зарегистр. 03-09-2004 | Отправлено: 16:44 12-07-2012 | Исправлено: XAN, 16:50 12-07-2012
MERCURY127



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

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 17:03 12-07-2012
akaGM

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

Цитата:
Файл открыли... файл закрыли... Зачем проверять открыт ли он?

проверяют не открыт/закрыт, а успех открытия...
есть ещё такие понятия как системный сбой, сбой файловой системы...
а проверка эта -- хороший тон, тебя ж там программированию учат, а не ещё чему-то
 

Цитата:
То есть если взять и убрать эту переменную и её проверки работать то программа всё равно будет?
может будет, может нет, вот для этого и проверки, а если убрать, то как закрывать?...
ты этот файл перед запуском программы вордом открой...
и потом зачем его несколько раз одной и той же программой открывать?

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 17:05 12-07-2012 | Исправлено: akaGM, 17:08 12-07-2012
XAN

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодарю всех кто пытается мне пояснить.
 
MERCURY127
может я чего неправильно поясняю, но ответили вы не на мой вопрос...
 
Смотрите ...
 
mov dx,offset File_name  
mov ax,3D00h
int 21h
jc Error_file
Вот это проверка открыт ли файл... уход в случае проблемы на ошибку. Так что вот и весь код тогда зачем
 
Там такой код
 
mov dx,offset File_name
call Open_file    
jc Error_file
....
Open_file proc
    cmp Handle,0FFFFh
    jne Quit_open
    mov ax,3D00h
    int 21h
    mov Handle,ax
    ret
Quit_open:
    stc
    ret
Handle dw 0FFFFh
Open_file endp
 
ПРоверка возврата значения и так проводится. Для чего тогда cmp Handle,0FFFFh ??? целесообразность??
 
 
akaGM
Успех открытия проверяется через флаг переноса и эта проверка там есть. В итоге зачем  
cmp Handle,0FFFFh  
остается непонятным...
и кстати заметил, что хендл открытого файла сразу почему то помещают в переменную mov Handle,ax  
не проверив успеха открытия...
mov ax,3D00h
 int 21h
mov Handle,ax  
 
хотя по идее корректнее  
mov ax,3D00h
int 21h
 
jc Error_file  
mov Handle,ax
<---- сначала проверка, и только потом какие то операции со значением возвращенным в ax потому что если успеха открытия нет, то операция помещения в Handle значения из ax бессмысленна.  
 

Цитата:
 
может будет, может нет, вот для этого и проверки, а если убрать, то как закрывать?...
ты этот файл перед запуском программы вордом открой...
и потом зачем его несколько раз одной и той же программой открывать?
 

1. Я про это думал, вдруг файл уже открыт чем то... НО !!! если бы мы спрашивали ОС открыт ли файл, то это было бы верно
 но там от балды идёт присвоение переменной хендла значения FFFFh
2. Допустим запустили раз эту программу и второй раз (что для DOSа нереально), но даже если запустили  
под 98 то в каждой программе будет своё адресное пространство и своя переменная Handle и даже если файл уже открыт, другая копия программы об этом не узнает. Наверно вот почему в линухе популярны файлы блокировки ??
 
 

Всего записей: 271 | Зарегистр. 03-09-2004 | Отправлено: 22:11 12-07-2012 | Исправлено: XAN, 22:38 12-07-2012
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 22:36 12-07-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хмм да вот посмотрел ща листинг ... Я так понял, что это у него расширенная функция открытия файла, видимо, она используется не только в этом примере, потому и несет дополнительный функционал, не нужный в этом примере. Короче, она предотвращает двойное открытие файла

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 22:38 12-07-2012
XAN

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а можно ли эту программу отладить не AFDpro а чем то еще ?? причем в VMWare....

Всего записей: 271 | Зарегистр. 03-09-2004 | Отправлено: 11:21 17-07-2012 | Исправлено: XAN, 11:47 17-07-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Конечно turbodebugger, codeview, debug, и король отладчиков - softice но...
Зачем вам дос? Я не понимаю?! Что, других книжек нету что ли, для изучения нормального, современного ассемблера?
 
Добавлено:
Хоть под винду, хоть под никсы
 
Добавлено:
Зачем каждый раз заново откапывать этих динозавров?!

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 12:37 17-07-2012
akaGM

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

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 13:40 17-07-2012 | Исправлено: akaGM, 13:40 17-07-2012
XAN

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, читая себя саму в память эта программа перетрёт значение Handle изначальным, так что толку от этой переменной никакого.
Чтобы этого избежать я полагаю надо метку  
finish equ $
так чтобы исключить перезапись переменной Handle
Например, в блоке данных
................
message_ok db 'Все нормально!',0Ah,0Dh,'$'
finish equ $
Handle dw 0FFFFh  
...................
 
 
Я переписал эту программу вот на такую...

Код:
 
cseg segment
assume cs:cseg,ds:cseg,es:cseg,ss:cseg
org 100h
start:
mov dx,offset file_name
mov ax,3D00h
int 21h
jc error_file
 
mov bx,ax
mov ah,3Fh
mov cx,offset finish-100h
mov dx,offset start
int 21h
 
mov dx,offset readf
mov ah,9
int 21h
 
mov ah,3Eh
int 21h
 
mov dx,offset closef  
mov ah,9
int 21h
 
mov dx,offset message_ok
mov ah,9
int 21h
jmp end_
 
error_file:
mov dx,offset error
mov ah,9
int 21h
end_:
ret
 
;ДАННЫЕ
file_name db 'l.com',0
error db 'Error open file',0Ah,0Dh,'$'
readf db 'File read',0Ah,0Dh,'$'
closef db 'File closed',0Ah,0Dh,'$'
message_ok db 'Все нормально!',0Ah,0Dh,'$'
finish equ $
cseg ends
end start
 


Всего записей: 271 | Зарегистр. 03-09-2004 | Отправлено: 14:22 17-07-2012
Открыть новую тему     Написать ответ в эту тему

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