Помощь - Поиск - Пользователи - Календарь
Полная версия: Общие вопросы
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Account
Программа просто выводит строку. но выводит кракозябры вместо строки. Строка на русском. (Я так понял проблема с кодировкой) Как это исправить.
volvo
Какой ассемблер, в какой кодировке исходник? Под какой ОСью запускаешь? Информации нужно больше...
Account
Masm611,WinXp.
Но проблему решил, подправил кодировку исходника и все встало на свои пути.
Спасибо за наводку)
Account
Привожу код проги, где при выводе используеться задержка за счет цикла в котором применяеться расширенный регистр ECX, пример взят с книги, компилю Masm611 на что ругаеться отметил в коде

.386
text segment use16
assume cs:text
begin: mov ax,data
mov ds,ax
mov cx,10
cycle: push cx
mov ah,09h
mov dx,offset string
int 21h
mov ECX,60000
delay: db 67h ;<---Ругаеться на db
; Дословный текст из книги "Для того чтобы заставить процессор в команде перехода (каковой является команда цикла
; loop) использовать регистр ЕСХ целиком, следует перед этой командой включить так
; называемый префикс размера адреса 67h. "
loop delay
pop cx
loop cycle
mov ax,4c00h
int 21h
text ends
data segment use16
string db 'Hello$'
data ends
stk segment stack
db 256 dup (0)
stk ends
end begin


Такой пример дан в книге, поэтому не могу понять в чем дело, может подскажет кто?
volvo
Цитата
<---Ругаеться на db
Компилирую так:

Цитата(Console)
F:\masm32\bin>ml -c t2.asm
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997. All rights reserved.

Assembling: t2.asm

F:\masm32\bin>

ничего не ругается, как видишь...
Account
Вот как я компилю и что пишет у меня
Цитата

c:\masm611\bin\ml p.asm
Microsoft ® Macro Assembler Version 6.11
Copyringht © Microsoft Corp 1981-1993. All rights reserved
Assembling: p.asm
p.asm(12): error A2008: syntax error : db
volvo
Ну, попробуй вот так:
ml -c /Zm p.asm
(/Zm - для того, чтобы включить совместимость с MASM 5.1, а -c чтобы не линковать сразу, а только компилировать, линковать придется не link-ом, а link16)
Account
volvo , твое предложение помогло, только у меня нет link16? Он поставляеться только с masm32?

И можно поподробнее поповоду
Цитата
/Zm - для того, чтобы включить совместимость с MASM 5.1

ведь у меня более новая версия, что это за совместимость с 5.11, непойму? blink.gif


И вот установил masm32
компилю как ты там выше выдает следующее
Цитата

C:\masm32\bin>ml -c tp.asm
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997. All rights reserved.
Assembling: p.asm
MASM : fatal error A1000: cannot open file : p.asm

volvo
Цитата
ведь у меня более новая версия, что это за совместимость с 5.11, непойму?
Правда? А чего ж ты в своей более новой версии работаешь с USE16, можно полюбопытствовать? Почему вместо вызова макроса печати строки (это все-таки макро-ассемблер, все ж реализовано, надо только подключить файл и вызвать) ты делаешь по старинке:
	mov ah,09h
mov dx,offset string
int 21h

? Более новая-то она более новая, но ты ХОЧЕШЬ использовать те вещи, которые были в ходу в версии более старой, вот и обеспечивай совместимость с ней.

Цитата
выдает следующее
Не совсем понятно, как связан файл TP.ASM и файл P.ASM? Компилируешь одно, жалуется на отсутствие другого?
Account
volvo
Цитата
Не совсем понятно, как связан файл TP.ASM и файл P.ASM? Компилируешь одно, жалуется на отсутствие другого?


Это я ошибся в написании, но ошибка при ассемблировании присуствует все равно. И Скажи пожайлуста по поводу link16, где его тогда надыбать?

И почему у тебя ассемблирует, а у меня нет?
volvo
Цитата
по поводу link16, где его тогда надыбать?
Этот линкер входит в установку MASM 6.14.8444, я не понимаю, почему он не присутствует у тебя. Качал файл m32v10r.zip с сайта masm32.com? Тогда разархивируй этот файл, получишь Install.exe, который ты запускал, а вот если и его разархивировать (я попробовал сделать это 7Zip-ом, получилось), то в папке bin должен лежать link16.bin (возможно, ты просто не ту инсталляцию выбрал, поэтому 16-битный линкер не распаковался при установке)...

Цитата
И почему у тебя ассемблирует, а у меня нет?
Потому, что у меня файл открывается (не занят, сторонними приложениями, например), а у тебя - нет... Может, что-то этот файл держит, и ML просто не может его открыть?
Account
У меня кстати не m32v10r.zip, а m32v9r.zip, ща закачаю 10 и посмотрю)

............

Все скачал 10 версию, распаковал и как ты говорил там есть link16. Попробую слинковать сейчас)

............

Слинковал, все работает, огромное спасибо за помощь)

............

Ну и я попробовал в masm611 слинковать всеже простым link и знаешь он слинковал, за счет использования директивы use16 в коде)
Account
volvo, вот такой вопрос к тебе есть. В примере присутсвует вот такая прога, считывания нулевого сектора (загрузочного) и сохранения в файл считанной от туда инфы. Ассемблируеться и линкуеться нормально.
При работе ругаеться что приложени попыталось произвети прямой доступ к диску что невозможно. Может быть это из-за того что запускаеться из под винды?
volvo
Цитата
Может быть это из-за того что запускаеться из под винды?
Точнее - из-за того, что запускалось из-под Windows NT... В 9х это очень даже работало, NT-ветка запрещает такие "фокусы"
Account
Ок. Спасибо, буду знать)
Account
volvo , опять к тебе вопрос есть)
Тут вот по книге автор говорит что в чистом асме как бы вывести десятичное число не возможно, например
имется в регистре ax число 16355 и простого способа как например вывод строки, вывода чисел в асме нет, выводяться ведь символы соответствующие кодам ASCII, приводиться подпрограмма вывода в шестнадцатиричном виде, у тебя случайно не имееться кода по выводу в десятичном виде? И еще, какие есть более современные способы вывода чисел?
volvo
Цитата
какие есть более современные способы вывода чисел?


include F:\masm32\macros\macros.asm
; ...
mov eax, 16355
print str$(eax)


достаточно просто, чтобы не извращаться вот так, правда? smile.gif
Account
volvo , а ты не могбы привести полный текст программы, где просто вывод числа идет, ну а если вообще не трудно, то ввод какого ни то числа и его же вывод. А то я с программирование макросов не знаком пока, и можешь дать какую ссылку на документацию по программированию макросов и masm32? (Я конечно и сам могу поискать, но ты как профессионал может подскажешь где найти более хорошую документацию)
volvo
.486
.model flat, stdcall
option casemap :none

include F:\masm32\include\windows.inc
include F:\masm32\macros\macros.asm

include F:\masm32\include\masm32.inc
include F:\masm32\include\gdi32.inc
include F:\masm32\include\user32.inc
include F:\masm32\include\kernel32.inc

includelib F:\masm32\lib\masm32.lib
includelib F:\masm32\lib\gdi32.lib
includelib F:\masm32\lib\user32.lib
includelib F:\masm32\lib\kernel32.lib
includelib F:\masm32\lib\msvcrt.lib ; это для wait_key

.data
number dd ?
.code

start:
; получаем от пользователя строку, преобразуем ее в число,
; и заносим в number
mov number, sval(input("Enter number here: "))

; печатаем содержимое number
print str$(number)

; пауза до нажатия кнопки пользователем
call wait_key

exit

end start


Цитата
можешь дать какую ссылку на документацию по программированию макросов и masm32?
Мне достаточно документации, идущей с MASM-ом, и самих исходников макросов. Все-таки, спроси у Гугла...
Account
Пытаюсь скомпилить твою прогу выдает
Цитата
Assembling: p.asm
Microsoft ® Incremental Linker Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.

/z2
"p.obj"
"p.exe"
NUL
LINK : warning LNK4044: unrecognized option "z2"; ignored
p.obj : warning LNK4033: converting object format from OMF to COFF
LINK : fatal error LNK1181: cannot open input file "p.exe"

Это в чем проблема?

................

Открыл асмовский файл через MASM32 Editor, в нем произвел ассемблирование и линковку, и он уже ничего не выдал, что это за такое, в чем разница? там автоматом какие то дополнительные параметры что ли етот эдитор подставляет.
volvo
Цитата
там автоматом какие то дополнительные параметры что ли етот эдитор подставляет.
Ага... Вот у меня в WinAsm Studio, например, есть файлы проекта: *.WAP, так там явно указана строка параметров для компиляции и линковки:
Цитата
Assemble=/c /coff /Cp /nologo
Link=/SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0
Нечто подобное должно быль в любой IDE... Или файл проекта, или в настройках среды должны быть прописаны параметры по умолчанию...
Unconnected
Решил хоть немного выучить ассемблер.. Вот к примеру, создал я файл 1.asm с содержанием:

CSEG segment
org 100h

Begin:

mov ah,9
mov dx,offset Message
int 21h

int 20h

Message db 'Hello, world!$'
CSEG ends
end Begin



Из командной строки вызываю: ML.EXE 1.asm /AT

AT - это как я понял, затем, чтобы файл слинковался.. При компиляции выдаёт Fatal Error(могу привести полный код ошибки). Использую MASM 7.0
volvo
У тебя MASM? Значит:

.model tiny
.code
org 100h
start:
mov ah,9
mov dx, offset Message
int 21h

ret
Message db 'Hello, world!$'
end start


Компилировать и линковать - так:
>ml /c 1.asm
>link16 /tiny 1.obj, 1.com,,,,
(поскольку, судя по сообщению об ошибке, у тебя путь к MASM-у не прописан в PATH, может понадобиться указывать полные пути к ML и LINK16)
Unconnected
А какой компилятор (или компоновщик, как это в ассемблере) использует синтаксис моего кода? Просто в рассылке, по которой я учусь, все примеры именно так...

Добавлено через 9 мин.
>ml /c 1.asm
>link16 /tiny 1.obj, 1.com,,,,

делаю так, ассемблирование проходит без ошибок, создаётся файл .obj. Когда пытаюсь слинковать (2-я строка),
то:
LINK : warning LNK4044: unrecognized option "tiny" ignored
1.obj : warning LNK4033: converting object format form OMF to COFF
1.obj : fatal error LNK 1190: invalid fixup found, type 0x0001

Код в саму программу вставил правильный. Как я понял, у link.exe (link16 у меня нету в папке BIN) нет параметра /tiny.
volvo
Цитата
link16 у меня нету в папке BIN
Ищи в других папках или отдельно в интернете. Код НЕ Windows-приложения должен собираться именно 16-битным линкером, никак не 32-битным.

Цитата
А какой компилятор (или компоновщик, как это в ассемблере) использует синтаксис моего кода?
Это синтаксис TASM
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.