Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Заблокирован
1

Программа для Windows

12.03.2012, 18:53. Показов 1165. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем! В учебнике по ассемблеру имеется код проги:
Assembler
1
2
3
4
5
6
7
8
9
.data
Caption db 'Моя первая программа.',0
Text db 'Всем привет!',0
 
.code
start:
invoke MessageBox,0,Text,Caption,MB_OK
invoke ExitProcess,0
.end start
и инструкция для создания экзешника на масме, но у меня масма нету. Вопрос: как скомпоновать данный код на ТАСМе?
заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2012, 18:53
Ответы с готовыми решениями:

32-разрядная программа для windows
Помогите пожалуйста. Использую masm32. Выполняю Project -> Assemble & Link в qeditor. Вот код: ...

Программа для определения данных текущих процессов ОС Windows
Тема звучит так "Реализация программ определения данных текущих процессов Windows" Помогите кто...

Скрипт или программа для автоматизации настроек в Windows XP и Windows 7
Доброго времени суток, коллеги! Имеются ПК на ОС Windows 7 (иногда XP)? что необходимо: С...

Программа / драйвер для сжатия оперативной памяти в Windows XP (Windows NT 5.X)
Требуется софтовое сжатие (именно сжатие, а не дефрагментация, упорядочивание, опрос программ о...

18
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
12.03.2012, 19:23 2
прога:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    .386
    .model flat, stdcall
    includelib c:\tasm\lib\import32.lib
    
    EXTERN   MessageBoxA:NEAR
    EXTERN   ExitProcess:NEAR   
    
.data
       Caption db 'Моя первая программа.',0
       Text db 'Всем привет!',0
.code
start:
    push 0
    push offset Caption
    push offset Text
    push 0
    call MessageBoxA
    
    push 0
    call ExitProcess
end start
батник:
Assembler
1
2
3
4
c:\tasm\bin\TASM32 /ml prog.ASM
c:\tasm\bin\TLINK32 -aa prog.OBJ
pause
prog.exe
1
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
12.03.2012, 19:34 3
Цитата Сообщение от Искандар
данный код на ТАСМе?
Вы любите наступать на грабли?
Возьмите FASM, доку(рус.) и IDE(рус.)
0
Заблокирован
12.03.2012, 19:41  [ТС] 4
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Возьмите FASM, доку(рус.) и IDE(рус.)
на первых порах пойдет и тасм)

Добавлено через 49 секунд
а что значит NEAR
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
12.03.2012, 20:00 5
Цитата Сообщение от "Ассемблер для Windows" Пирогов.В.Ю. Посмотреть сообщение
Может возникнуть вопрос о типе NEAR. Дело в том, что в операционной системе MS DOS тип NEAR означал, что вызов процедуры (или безусловный переход) будет происходить в пределах одного сегмента. Тип FAR означал, что процедура (или переход) будет вызываться из другого сегмента. В операционной системе Windows реализована так называемая плоская модель, когда всю память можно рассматривать как один большой сегмент. И здесь логично использовать тип NEAR.
PS: найди её, там много интересного...
1
Заблокирован
12.03.2012, 20:44  [ТС] 6
Большое спасибо!

Добавлено через 39 минут
это снова я! Не подскажите как сделать не экзешник, а ком прогу?
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
12.03.2012, 20:46 7
из этой проги сделать .com?
0
Заблокирован
12.03.2012, 20:49  [ТС] 8
нет, в общем виде батник как должен выглядеть?
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
12.03.2012, 20:51 9
Assembler
1
2
c:\tasm\bin\tasm prog.asm
c:\tasm\bin\tlink /t  prog.obj
1
Заблокирован
12.03.2012, 21:39  [ТС] 10
и еще раз спасибо!

Добавлено через 47 минут
Вопрос по циклам: синтаксически программа верная, но компилятор ругается: Near jump or call to differenet CS
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CSEG segment
org 100h
Begin:
 mov cx, 3
 
Label_1: 
 mov ah, 9
 mov dx, offset message
 int 21h
 loop Label_1 ;здесь тормозит
 
 mov ah, 10h
 int 16h
 int 20h
 
message db 'hello world!$'
CSEG ends
end Begin
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
12.03.2012, 21:45 11
м/у 2 и 3 вставь:
Assembler
1
   assume cs:CSEG,ds:CSEG
0
Заблокирован
12.03.2012, 21:49  [ТС] 12
А разве в в ком проге сегментные регистры не устанавливаются сами на начало сегмента??
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
12.03.2012, 21:53 13
ну в твоём варианте, походу - нет.
если записать в таком виде:
Assembler
1
2
3
4
5
6
7
8
9
        .model     tiny
        .code
        org        100h
start:  mov        ah,9
        mov        dx,offset message 
        int        21h
        ret 
message db         "Hello World!",0Dh,0Ah,'$'
        end        start
то надобность в assume отпадает..
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
13.03.2012, 14:29 14
Assembler
1
2
3
CSEG segment
assume CS:CSEG
org 100h
0
Заблокирован
13.03.2012, 14:31  [ТС] 15
я работаю на тасме, и там без assume не проходит, а на масме все и без него идет, странно однако.
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
13.03.2012, 15:02 16
zzzyyyxxx, Как раз для Tasm и написал:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Turbo Assembler  Version 3.2        13/03/12 14:57:19       Page 1
t1.asm
 
      1 0000                 .model tiny
      2 0000                 .code
      3                  org 100h
      4 0100                 Begin:
      5 0100  B9 0003             mov cx, 3
      6
      7 0103                 Label_1:
      8 0103  B4 09           mov ah, 9
      9 0105  BA 0112r            mov dx, offset message
     10 0108  CD 21           int 21h
     11 010A  E2 F7           loop Label_1 ;здесь тормозит
     12
     13 010C  B4 10           mov ah, 10h
     14 010E  CD 16           int 16h
     15 0110  CD 20           int 20h
     16
     17 0112  68 65 6C 6C 6F 20 77+  message db 'hello world!$'
     18       6F 72 6C 64 21 24
     19                  end Begin
0
Заблокирован
13.03.2012, 15:12  [ТС] 17
а разьве для .com-программ модель памяти нужна?
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
13.03.2012, 15:13 18
Цитата Сообщение от Искандар Посмотреть сообщение
на масме все и без него идет, странно однако.
есть такое объяснение:
Цитата Сообщение от Калашников Олег Посмотреть сообщение
TASM выдает ошибку: Near jump or call to different CS.
Я предложил вставить строку assume cs:CSEG. Что же происходит?
Дело в том, что эта строка указывает Ассемблеру на привязку сегментного регистра CS к нашему сегменту (CSEG). MASM ассемблирует прекрасно и без этой строки. Если оператор assume отсутствует, то MASM как бы по умолчанию вставляет ее автоматически.

Другое дело TASM. Он, встретив в программе строки вида:
Assembler
1
2
3
   loop Label_1
   jmp Label_2
   call Procedure
не может "понять" к какому сегменту следует обратиться (CS, DS, ES) и выдает сообщение об ошибке.

Как уже говорилось, мы пишем com-файлы в которых всего один сегмент (мы обзываем его CSEG). Если вы создадите еще один (например, DSEG), то компоновщик (link.exe), при попытке создать com-файл, выдаст ошибку.

Чтобы полностью закрыть данную тему, привожу полный вид разбираемой нами строки:

Assembler
1
   assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
Этим мы указываем Ассемблеру на то, что сегментные регистры CS, DS, ES, SS будут указывать на наш единственный сегмент.
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
13.03.2012, 16:15 19
Она нужна для директивы .code
Assembler
1
2
3
4
      1                  ;.model tiny
      2                  .code
**Error** t1.asm(2) Model must be specified first
      3                  org 100h
0
13.03.2012, 16:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2012, 16:15
Помогаю со студенческими работами здесь

Программа для решения квадратных уравнений, переписать для Windows Forms
1) class Program { static void Main(string args) { float a =...

Программа для Windows XP на Windows 10
Имею програму изучения английского. она работает на windowsXP, но тепер хочю запустить на...

Программа для Windows
Нужно написать программу, которая записывает в отдельный блокнот все символы, набиравшиеся с...

Программа ПРОВОДНИК для Windows 7
Здравствуйте! У меня руки чешутся, заражЁн революционными преобразованиями — а знаний нет!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru