Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
TASM

Компиляция 32-битной программы MS-DOS

04.02.2019, 19:06. Показов 5836. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Подскажите, как побороть эти ошибки в тасме?
Написал прожку в фасме - всё компилится и работает без проблем..
Теперь нужно перенести на TASM, и он выбивает такие ошибки:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.model  small               ; *Warning*  HDD.ASM(4)    Assuming segment is 32-bit
.model  small               ; *Warning*  HDD.ASM(4)    Assuming segment is 32-bit
.stack  100h                ; *Warning*  HDD.ASM(5)    Assuming segment is 32-bit
cmp   word[si],0              ; *Warning*  HDD.ASM(118)  Argument needs type    override
mov   dword[packet+8],eax  ; **Error**  HDD.ASM(132)  Operand types do not match
mov   eax,dword[part2+12]  ; **Error**  HDD.ASM(152)  Operand types do not match
mov   eax,dword[part2+12]  ; **Error**  HDD.ASM(167)  Operand types do not match
mov   word[packet+4],buff  ; **Error**  HDD.ASM(215)  Illegal memory reference
mov   word[packet+6],ax    ; **Error**  HDD.ASM(216)  Operand types do not match
;--------------
; собрать пытаюсь таким батником с ком.строки:
tasm\tasm  %1.asm
tasm\tlink %1.obj /x /3
pause
del        %1.obj
%1.exe
В коде есть функции расширенного сервиса INT-13h, для которых нужно собирать адресный-пакет. Я используют для этого 32-битные регистры EAX (читаю LBA-поля из MBR), хотя код полностью 16-битный - видимо с этим проблемы. Хотя повторюсь, FASM компилирует без проблем. Весь код большой, поэтому выкладывать его сюда смысла нет. Директивы применяю укороченные. Буду премного благодарен за подсказку!
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2019, 19:06
Ответы с готовыми решениями:

Компиляция х64 программы под 32-битной системой
Собственно, как это сделать? Я не нашёл такой опции. Использую VS 2012 Express. От tezaurismosis: Тема перемещена из раздела C++/CLI

Компиляция программы в C# под MS DOS
Опытные пользователи и боги кодинга (ну или просто знающие люди) Подскажите, пожалуйста, есть ли возможность компиляции программы в C# под...

Внедрение из 32-битной программы 64-битной dll в 64-битный процесс, возможно ли?
Добрый вечер. Для внедрение dll в сторонний процесс использую метод из книги Рихтера. Суть этого метода - создать удаленный поток в...

11
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
04.02.2019, 19:18
R71MT
Assembler
1
2
3
4
5
6
7
8
9
    .model  small
    .386            
    .stack  100h
    .data
;...
    .code       ; сегмент кода
    .startup        ; точка входа
;...
    end
Добавлено через 4 минуты
Вместо word, dword надо писать word ptr, dword ptr
3
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
04.02.2019, 19:39  [ТС]
liv, добавил ptr'ы вроде меньше стало ошибок,
но всё-равно остались такие:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Assembling file:   tasmHDD.asm
*Warning* tasmHDD.asm(4) Assuming segment is 32-bit
*Warning* tasmHDD.asm(4) Assuming segment is 32-bit
*Warning* tasmHDD.asm(5) Assuming segment is 32-bit
*Warning* tasmHDD.asm(118) Argument needs type override
**Error** tasmHDD.asm(215) Illegal memory reference
Error messages:    1
Warning messages:  4
Passes:            1
Remaining memory:  469k
 
 
D:\temp\Temp\WHATIS\TASM>tasm\tlink tasmHDD.obj /x /3
Turbo Link  Version 3.01 Copyright (c) 1987, 1990 Borland International
Unable to open file tasmhdd.obj
Добавлено через 4 минуты
а что-за варнинги в строках 4, 4, 5 ???
2
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
04.02.2019, 19:44
Лучший ответ Сообщение было отмечено R71MT как решение

Решение

R71MT, Illegal memory reference - так понимаю, это:
Assembler
1
mov   word[packet+4],buff
Память в память нельзя писать напрямую...
Начало кода (по 5 строку) покажи.
И что в 119?

Добавлено через 1 минуту
А, понял, имелось в виду:
Assembler
1
mov   word[packet+4], offset buff
Добавлено через 2 минуты
не 119, а 118
2
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
04.02.2019, 19:48  [ТС]
liv, спасибо! точно проблема была с указателем buff
отправил его через bx и проблема решилась:
Assembler
1
2
3
4
        mov   ax,ds
        lea   bx,buff
        mov   word ptr[packet+4],bx
        mov   word ptr[packet+6],ax
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
04.02.2019, 19:49
R71MT, перемести .386 за .code
Assembler
1
2
3
4
5
6
7
8
9
    .model  small
    .stack  100h
    .data
;...
    .code       ; сегмент кода
    .386            
    .startup        ; точка входа
;...
    end
2
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4491 / 1669
Регистрация: 01.02.2015
Сообщений: 13,899
Записей в блоге: 12
04.02.2019, 19:53
Вполне легальная конструкция mov word ptr[r+8], offset CrLf
Assembler
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
.model small
.386
.stack 200h
 
.data
    CrLf        db  0Dh, 0Ah, '$'
    msgResult   db  'Result array:', 0Dh, 0Ah, '$'
    msgPressAnyKey  db  0Dh, 0Ah, 'Press any key to exit...', '$'
    r       db  100 dup(?)
.code
 
main    proc
    ;инициализация сегментного регистра ds адресом сегмента данных
    mov ax,     @data
    mov ds, ax
 
    mov word ptr[r+8],  offset CrLf
    mov word ptr[r+8],  ds
 
    ;завершение программы
    mov ax, 4C00h
    int 21h
main    endp
 
end main
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
04.02.2019, 19:55  [ТС]
Цитата Сообщение от liv Посмотреть сообщение
перемести .386 за .code
уважаемый, да вы профи в этом оказывается! вот и варнинги пропали... снимаю шляпу
Code
1
2
3
4
5
6
7
8
9
Assembling file:   tasmHDD.asm
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  469k
 
 
D:\TASM>tasm\tlink tasmHDD.obj /x /3
Turbo Link  Version 3.01 Copyright (c) 1987, 1990 Borland International
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
04.02.2019, 19:59
R71MT, ну и славненько
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
05.02.2019, 15:28
Цитата Сообщение от R71MT Посмотреть сообщение
перемести .386 за .code
Tasm на .N86, по разному реагирует на эту инструкцию.
Если команда .386+ после MODEL, то генерируются 32-е сегменты и код, если после CODE, то будет 16-ти битный код, с доступом, к командам .N86.
2
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
05.02.2019, 19:33  [ТС]
Constantin Cat, сенкью - оч познавательно, намотаем на ус..
1
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12
06.02.2019, 23:22
Очень забавно.
Потому что всегда писал и пишу:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.MODEL Small
.386
.STACK 100h
 
LOCALS
 
.DATA
 
.CODE
 
Start:
 
        ; ...
 
END     Start
И всегда 16-битный код генерился.

Добавлено через 51 секунду
Для .COM соответственно:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
.MODEL Tiny
.386
 
LOCALS
 
.CODE
 
.STARTUP
 
        ;
 
END
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2019, 23:22
Помогаю со студенческими работами здесь

Компиляция и сборка из 64-битной системы для 32-битной системы
Скажите, как скомпилировать и собрать приложение из 64 битной системы, что бы оно работало в 32 битной системе? Возможно ли это и если да,...

Создание 64-битной программы на 32-битной системе: возможно ли?
Здравствуйте. Я хотела бы разрабатывать 64-битные приложение в Delphi XE, но у меня в распоряжении есть только 32-битная система. Возможно...

Запуск 32-битной программы на 64-битной системе
Подскажите создал простую программу Console.WriteLine("Олололо"); Console.ReadKey(); И почему в процессах пишет name.exe*32? Как...

Декомпиляция 32 битной dll и компиляция в 64 битную
Доброго времени суток. Может кто сталкивался в задаче перевода 32 битной dll в 64 битную??? Есть идея декомпилировать dll в C после...

Компиляция helloword.cpp на 32-битной федоре для запуска на 64-битном линуксе
здравствуйте! как у программиста у меня есть федора 32бита, компиляторы gcc, g++, среды codelite, eclipse, qt, codeblocks. и у меня есть...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru