|
|
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться! Для начального изучения Ассемблера набрал исходный код. Ошибок нет. Использую TASM. Получаю работающий файл *.exe. Но почему при ассемблировании выдаются три предупреждения? Хочется добиться ассемблирования без этих предупреждений. ;TASM из пакета tasm5 ;Питер Абель Стр.95 ;Assembler. DOS. EXE. ;Сложение двух чисел и вывод строки текста ;Стандартное объявление сегментов ;********************************************** PAGE 60,132 TITLE ASM (EXE) ;********************************************** STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ;********************************************** DATASEG SEGMENT PARA 'Data' Message DB 'Hello world!',13,10,'$' FLDD DW 3 FLDE DW 4 FLDF DW ? DATASEG ENDS ;********************************************* CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG MOV DS,AX MOV AX,1 ADD AX,2 MOV BX,AX MOV AX,FLDD ADD AX,FLDE MOV FLDF,AX MOV DX,OFFSET Message MOV AH,9H INT 21H MOV AL,0 MOV AH,4CH INT 21H MOV AX,4C00H INT 21H MAIN ENDP CODESEG ENDS END MAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 01:39 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTag, текстовые предупреждения это круто. Но сейчас в моде телепатическая передача проблем напрямую в мозх. Как например вот на этом форуме, Вы пытаетесь передать телепатически сообщения предупреждений. Я их вииииижжжжуууууу!!!! Опссс... Вы ищите клубничку на порно сайте...кхм. это не то... о!!! ввиииииижжжжжуууууу!!!!! голые бабы какие то :( Прошу сосредоточится! приём затруднён - на линии помехи...попытайтесь ещё раз... ик (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 02:47 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTagОшибок нет.Если ты про соответствие набранного текста оригиналу - может быть. Если же про смысл - то вот тут ты неправ, ошибок есть у тебя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 08:36 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTag, Как уже написали надо увидеть текст предупреждений, иначе сложно сказать почему они могут выскакивать. Из того, что не очень понятно - это то, что в начале программы выставляется соответствие регистров нужным сегментам, а потом (в первых же строчках выполняемого кода) снова в регистр DS записывается номер сегмента DATASEG. Зачем? P.S. Скорее всего сообщения появляются на таких инструкциях как MOV AX,FLDD. Компилятор просит явно указать размерность данных, типа MOV AX, word ptr FLDD или как-то так, уже не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 10:04 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Програмёрв начале программы выставляется соответствие регистров нужным сегментам, а потом (в первых же строчках выполняемого кода) снова в регистр DS записывается номер сегмента DATASEG. Зачем? Сказать, что в DS адрес сегмента - мало, надо ещё сделать так, чтобы он там и правда оказался. ПрограмёрСкорее всего сообщения появляются на таких инструкциях как MOV AX,FLDD. Компилятор просит явно указать размерность данных, типа MOV AX, word ptr FLDD или как-то так, уже не помню. Я думаю, всё проще. По умолчанию емнип .8086 - так что эти инструкции просто ниачём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 10:53 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
AkinaПрограмёрв начале программы выставляется соответствие регистров нужным сегментам, а потом (в первых же строчках выполняемого кода) снова в регистр DS записывается номер сегмента DATASEG. Зачем? Сказать, что в DS адрес сегмента - мало, надо ещё сделать так, чтобы он там и правда оказался. ПрограмёрСкорее всего сообщения появляются на таких инструкциях как MOV AX,FLDD. Компилятор просит явно указать размерность данных, типа MOV AX, word ptr FLDD или как-то так, уже не помню. Я думаю, всё проще. По умолчанию емнип .8086 - так что эти инструкции просто ниачём. Не совсем понял вторую часть ответа. А что в этих инструкциях, чего не может 8086? :) По поводу первой части, получается, что если у меня в программе 2 data сегмента и я прописываю ASSUME ds:[один из них], то это не гарантирует того, что в момент выполнения кода ds будет указывать именно на тот сегмент, который прописан в ASSUME? На что тогда данная директива влияет? То есть, что будет, если из приведённого кода её просто убрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 11:13 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрНе совсем понял вторую часть ответа. А что в этих инструкциях, чего не может 8086? Пардон, тут я был не совсем внимателен, мне показалось, что там инструкции сопроцессора. Тем не менее скорее всего именно эти инструкции порождают ворнинги. Но не потому, что компилятор не может выбрать размер операнда (это он как раз может) - он просто не понимает, что от него хотят - поместить в регистр адрес переменной или её содержимое. ПрограмёрПо поводу первой части, получается, что если у меня в программе 2 data сегмента и я прописываю ASSUME ds:[один из них], то это не гарантирует того, что в момент выполнения кода ds будет указывать именно на тот сегмент, который прописан в ASSUME? На что тогда данная директива влияет? То есть, что будет, если из приведённого кода её просто убрать? ИМЕННО! Директива ничего не меняет - она просто указывает, в каком сегменте что ДОЛЖНО находиться. Например, имеется код: Код: asm 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 12:03 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо специалистам за внимание! Конечно, не у всех может быть такое древнее ПО как TASM. Поэтому, прошу прощения! Привожу строки предупреждений (строки с номерами 8, 12, 19): *Warning* FILE.asm <8> Reserved word used as symbol: STACK *Warning* FILE.asm <12> Reserved word used as symbol: DATASEG *Warning* FILE.asm <19> Reserved word used as symbol: CODESEG ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 13:11 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTag, По номерам строк поправка: <10>, <14>, <21>. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 13:17 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTag, Ну так резервированные слова :) сегменты переназовите и проблема исчезнет ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 13:18 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Програмёр, Большое спасибо! Не буду более слепо доверять книгам! Вот исходный код с грамотным использованием резервированных слов. Предупреждений нет! Всё нормально. ;TASM из пакета tasm5 ;Питер Абель Стр.95 ;Assembler. DOS. EXE. ;============================================== PAGE 60, 132 TITLE ASM (EXE) ;---------------------------------------------- stk SEGMENT PARA STACK 'stk' DW 32 DUP(0) stk ENDS ;---------------------------------------------- data SEGMENT PARA 'data' msg DB 'Hello Forum!',13,10,'$' FLDD DW 3 FLDE DW 4 FLDF DW ? data ENDS ;---------------------------------------------- ASSUME SS:stk, DS:data, CS:code ;---------------------------------------------- code SEGMENT PARA 'code' main PROC FAR MOV AX, data MOV DS, AX MOV AX, 1 ADD AX, 2 MOV BX, AX MOV AX, FLDD ADD AX, FLDE MOV FLDF, AX MOV DX, OFFSET msg MOV AH, 9H INT 21H MOV AL, 0 MOV AH, 4CH INT 21H MOV AX,4C00H INT 21H main ENDP code ENDS END main ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 22:36 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTag MOV AX, 1 ADD AX, 2 MOV BX, AX Зачем? MOV BX,3 не короче? VlTag MOV AX, FLDD ADD AX, FLDE MOV FLDF, AX Аналогично... P.S.В чем сакральный смысл каких-то вычислений для вывода "Hello world"? Ты ведь даже результат вычислений не выводишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 15:02 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Ещё любопытнее вот этот фрагмент... VlTag Код: powershell 1. 2. 3. 4. 5. Последние две команды - тупой балласт без шансов выполниться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 17:14 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
1. Для DarkMaster. Спасибо за внимание! Это - своеобразные шаги по изучению Ассемблера. Из книги П.Абеля за основу взят вариант работающего кода для вычисления суммы чисел, записанных в переменные FLDD и FLDE (сумма вычисляется через аккумулятор AX). Потом из другого примера взяты фрагменты для вывод строки текста. Главная цель - в одном коде решить сразу несколько задач для обучения: - добиться правильного ассемблирования и компановки исходного кода; - посмотреть в отладчике состояние регистров; - убедиться в работе программы с помощью вывода на экран строки текста. 2. Для Akina. Также спасибо за внимание! Это просто для тренировки: попытка записать в региcтр AX числа 4C00H через его младший байт и старший байт. Может быть и неправильно, но ассемблирование проходит без замечаний. Конечно, в чистовых программах так не следует писать код! 3. Всем профессионалам. Нужны простые программы в качестве примеров! Для быстрого обучения! Например, нужна простая программа по выводу на экран числа из регистра (пусть числа от 0 до 7). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 13:29 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTagНапример, нужна простая программа по выводу на экран числа из регистра (пусть числа от 0 до 7). Для вывода числа от 0 до 7 достаточно будет преобразовать его в символ, добавив 30h... А дальше - хелп по функциям DOS/BIOS в руки и вперед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 15:33 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
DarkMasterDOS/BIOS это некрофилия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:45 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTagЭто просто для тренировки: попытка записать в региcтр AX числа 4C00H через его младший байт и старший байт. Может быть и неправильно, но ассемблирование проходит без замечаний.У меня нет претензий к коду. Есть претензия к одновременности обоих блоков. Просто появляется балласт. Ненужный. Если бы один из вариантов был скажем закомментирован (возможно, с пояснением, что оно однохренственно некомментированному варианту) - претензий бы не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:14 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо за любые замечания! Это очень полезно для начинающего программиста. Прошу покритиковать вот эту программу для вывода числа на экран. Наверное, громоздкая. Потом сделаю ввод слагаемых с клавиатуры. А вообще, мне нужно хорошо разобраться с этой древней технологией создания программ для DOS и затем перейти на создание программ для Windows. ;TASM из пакета tasm5 ;Вывод на экран числа из регистра ;Assembler. DOS. EXE. ;====================================== PAGE 60, 132 TITLE ASM (EXE) ;-------------------------------------- stk SEGMENT PARA STACK 'stk' DB 256 DUP (?) stk ENDS ;-------------------------------------- data SEGMENT PARA 'data' msg1 DB ' It is a Result. ', 10, 13, '$' data ENDS ;-------------------------------------- ASSUME SS:stk, DS:data, CS:code ;-------------------------------------- code SEGMENT PARA 'code' start: MOV AX, data MOV DS, AX MOV BX, 03h MOV CX, 04h MOV DX, BX ADD DX, CX ;Result MOV AX, DX push -1 mov cx,10 l: mov dx,0 div cx push dx cmp ax,0 jne l mov ah,2h l2: pop dx cmp dx,-1 je ex add dl,'0' int 21h jmp l2 ex: MOV AH, 09h MOV DX, OFFSET msg1 INT 21h mov ax,4c00h int 21h code ENDS end start ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:02 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
VlTag, O_o... Подождите, а показанный код работает?! Или я чего-то не понимаю, или Вы там стек ломаете (push -1)... Разве нет? Ну а так, конструкцию сравнения с нулём (cmp reg, 0) стоит заменить на test, а mov reg, 0 на xor reg, reg (вместо reg разумеется подставить используемый регистр) но не критично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 03:05 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
кстати, вот, что у меня получилось: Код: plaintext 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. тут в общем как мы обычно привыкли такие задачи решать - рекурсией. )) Меньше условных переходов - и потому немного легче проследить что делается и где. Кстати, синтаксис немного другой, так как писал на nasm под linux дак ещё и в 64-битном (регистры типа eax, если заметили). Но думаю разобраться будет не сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 03:28 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Програмёр, а ещё, если в write_num после add dl, 0x30 вставить Код: plaintext 1. 2. 3. 4. тогда можно число выдавать в системе счисления с основой больше 10 )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 13:14 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Програмёрконструкцию сравнения с нулём (cmp reg, 0) стоит заменить на testЛучше на OR reg,reg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 13:27 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
AkinaПрограмёрконструкцию сравнения с нулём (cmp reg, 0) стоит заменить на testЛучше на OR reg,reg А почему лучше на OR? Она же, насколько я помню, операнды модифицирует, а сама при этом быстрее не отрабатывается? Есть ещё какая-то особенность, которую стоило бы знать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 13:54 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрА почему лучше на OR?Значение ИЛИ Значение всегда равно Значение. И равно нулю тогда и только, когда Значение равно нулю. P.S. Регистровые операции короче операций с непосредственными операндами. И могут оказаться быстрее. cmp reg, 0 - непосредственный операнд or reg, reg - регистровая операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2013, 18:36 |
|
||
|
Причина трёх предупреждений?
|
|||
|---|---|---|---|
|
#18+
Всем! Мне был вопрос, работает ли приведённый код ;TASM из пакета tasm5 ;Вывод на экран числа из регистра ;Assembler. DOS. EXE. . . . . . . . . . Этот код при ассемблировании в трансляторе TASM даёт нормальный файл *.exe. Его надо запускать из командной строки. Выводится число 7 из регистра DX. Если там будет получено другое число, оно также нормально будет выведено на консоль. Прошу прощения, но этот код я где-то нашёл (там выводилось число 125). Я вместо 125 получаю в DX число 7. Вообще всем большое спасибо! Я разберу замечания и рекомендации. Неплохо, если в итоге будет создан компактный работающий код для вывода числа на консоль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2014, 01:13 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38513630&tid=1341515]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 516ms |

| 0 / 0 |
