0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
1

Как запустить программу Ассемблер на виртуальной машине NTVDM на WinXP?

02.10.2017, 19:26. Показов 2570. Ответов 19
Метки нет (Все метки)

У меня WinXP, говорят, что для нее можно работать с ассемблерными кодами и без DOS-BOX. Помогите пожалуйста настроить
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2017, 19:26
Ответы с готовыми решениями:

Как запустить образ на виртуальной машине?
Работаю в VMware workstation с srv2000. Для настройки DNS мне нужен образ диска. Этот образ весит 3...

Как добавить Android-проект в Eclipse с Android SDK, чтобы после его можно было запустить на виртуальной машине?
Вот у меня с интернета скачан готовый андрой-проект, но я не знаю как его добавить в остальные...

Как запустить программу с dll на другой машине?
Сделал class library, пытаюсь понять как развернуть программу на других машинах. 1. Возможно ли...

[WinXP] Процессор NTVDM обнаружил недопустимую инструкцию
Здравствуйте! Мне достался ноутбук от родственников, где всё "очень запущено": много ненужных...

19
Native x86
Эксперт Hardware
5172 / 3019 / 874
Регистрация: 13.02.2013
Сообщений: 9,635
02.10.2017, 19:35 2
Ничего не нужно настраивать. Любой скомпилированный для DOS исполняемый файл автоматически запускается под NTVDM.

Добавлено через 15 секунд
P.S. WinXP должна быть 32-битной, в 64-битной нет NTVDM.
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
02.10.2017, 20:28  [ТС] 3
У меня 32-битная. Ну вот есть код Ассемблера. Я в предыдущих постах писал его. Как его к примеру открыть в моей ОС? Можете подсказать алгоритм? Что и где его открыть? У меня с этим проблемы.

Добавлено через 9 минут
Как настроить Windows, чтоб компилировала, хотя б файл листинг мне надо?
0
Эксперт Hardware
Эксперт Hardware
5402 / 1943 / 357
Регистрация: 29.07.2014
Сообщений: 2,858
Записей в блоге: 4
02.10.2017, 21:23 4
Цитата Сообщение от sandy15 Посмотреть сообщение
хотя б файл листинг мне надо
открой ком.строку (Win+R --> cmd) и введи: DEBUG 'имя проги'', дальше вводи команду 'U' и получишь листинг:
Код
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Temp>debug proga.com
-u
13EE:0100 EB04          JMP     0106
13EE:0102 0000          ADD     [BX+SI],AL
13EE:0104 0000          ADD     [BX+SI],AL
13EE:0106 B801B1        MOV     AX,B101
13EE:0109 66            DB      66
13EE:010A 31FF          XOR     DI,DI
13EE:010C CD1A          INT     1A
13EE:010E 08E4          OR      AH,AH
13EE:0110 7401          JZ      0113
13EE:0112 C3            RET
13EE:0113 B803B1        MOV     AX,B103
13EE:0116 66            DB      66
13EE:0117 B90005        MOV     CX,0500
13EE:011A 0C00          OR      AL,00
13EE:011C 31F6          XOR     SI,SI
13EE:011E CD1A          INT     1A
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
03.10.2017, 00:42  [ТС] 5
Чего-то листинг такой коротенький совсем.
Должно быть что-то типа этого:

.386

0000 Data Segment
0000 73 74 72 69 6E 67 datas db'string'
0006 7B Datab db 123


....

Name Size Length Align Combine Class
CODE 32bir 005A PARA NONE

Что не так?
0
Модератор
Эксперт по электронике
7940 / 4040 / 1553
Регистрация: 01.02.2015
Сообщений: 12,489
Записей в блоге: 3
03.10.2017, 01:03 6
R71MT привёл листинг собственной программы.

Почитайте закреплённую тему Как скомпилировать программу?
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
03.10.2017, 13:37  [ТС] 7
Да? Я даже не заметил, что разные.
У меня почти то же самое вышло.
Миниатюры
Как запустить программу Ассемблер на виртуальной машине NTVDM на WinXP?  
0
3401 / 1820 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
03.10.2017, 13:47 8
Исполняемые файлы должны иметь расширение .СОМ или .ЕХЕ, но не .ASM
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
03.10.2017, 13:50  [ТС] 9
Удивляет, что в листинге примера написано вот так:
.386

0000 Data Segment
0000 73 74 72 69 6E 67 datas db'string'
0006 7B Datab db 123


....

Name Size Length Align Combine Class
CODE 32bir 005A PARA NONE


А в консоли какой-то странный короткий листинг..

Добавлено через 1 минуту
То есть мне переименовать расширение на .com? Вот уж намучаюсь с этим Ассемблером..
0
3401 / 1820 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
03.10.2017, 13:58 10
Если Вы смотрите листинг созданный компилятором, то там будет, что-то похожее на Ваш пример:
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
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
Turbo Assembler  Version 4.1        03/10/17 13:53:14       Page 1
170814.ASM
 
 
 
      1 0000                 model   tiny
      2 0000                 .code
      3                  org     100h
      4 0100                 start:
      5 0100  33 C0          xor     ax,ax
      6 0102  B9 0005            mov     cx,5
      7 0105  BB 0390r           lea     bx,dwArray
      8 0108                 @@01:
      9 0108  03 07          add     ax,[bx]
     10 010A  83 C3 02           add     bx,2
     11 010D  E2 F9          loop    @@01
     12 010F  C3             ret
     13                  org     390h
     14 0390  003E 09F4 000C 0511 +  dwArray dw      62, 2548, 12, 1297, 2584
     15       0A18
     16                  end     start
Turbo Assembler  Version 4.1        03/10/17 13:53:14       Page 2
Symbol Table
 
 
 
 
Symbol Name     Type   Value               Cref (defined at #)
 
??DATE          Text   "03/10/17"
??FILENAME      Text   "170814  "
??TIME          Text   "13:53:14"
??VERSION       Number 040A
@32BIT          Text   0               #1
@@01            Near   DGROUP:0108         #8  11
@CODE           Text   DGROUP              #1
@CODESIZE       Text   0               #1
@CPU            Text   0101H
@CURSEG         Text   _TEXT               #2
@DATA           Text   DGROUP              #1
@DATASIZE       Text   0               #1
@FILENAME       Text   170814
@INTERFACE      Text   000H            #1
@MODEL          Text   1               #1
@STACK          Text   DGROUP              #1
@WORDSIZE       Text   2               #2
DWARRAY         Word   DGROUP:0390         7  #14
START           Near   DGROUP:0100         #4  16
 
Groups & Segments   Bit Size Align  Combine Class      Cref (defined at #)
 
DGROUP          Group                  #1  1
  _DATA         16  0000 Word   Public  DATA       #1
  _TEXT         16  039A Word   Public  CODE       #1  #2
В отладчиках не будет никаких меток, если Вы не подключили отладочную информацию. Даже и отладчик и пакета компилятора их не увидет.

Добавлено через 1 минуту
Цитата Сообщение от sandy15 Посмотреть сообщение
То есть мне переименовать расширение на .com
приведите код целиком.
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
03.10.2017, 15:00  [ТС] 11
Да, мне нужно, чтоб листинг был такой как в вашем примере. Подскажите пожалуйста, как его сделать в Виндовс ХР? Мне именно такой формат и надо. Можете подетальней объяснить, а то я совсем нуб в Ассемблере.
0
3401 / 1820 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
03.10.2017, 15:02 12
компилятор какой?
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
03.10.2017, 16:16  [ТС] 13
У меня Emu8086, но он какой-то не такой как надо.
0
3401 / 1820 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
03.10.2017, 16:24 14
Цитата Сообщение от sandy15 Посмотреть сообщение
Мне именно такой формат и надо. Можете подетальней объяснить,
Вопрос о названии компилятора такая сложность?


Файл листинга генерируется компилятором для того, чтобы:
-видеть во что превратил компилятор Ваши старания:
Assembler
1
2
3
4
5
6
7
8
9
                .model tiny
 0000               .code
                org 100h
 0100  0E           begin:  push    cs
 0101  17               pop ss
 0102  8D 26 0100 R         lea sp,begin
 0106  B8 2000              mov ax,2000h
 0109  C3               ret
                end begin
-если есть ошибки - быстро их найти:
Assembler
1
2
3
4
5
6
7
8
9
10
                .model tiny
 0000               .code
                org 100h
 0100  0E           begin:  push    cs
 0101  17               pop ss
                    lea sp,sbegin
170331.asm(6) : error A2006: undefined symbol : sbegin
 0102  B8 2000              mov ax,2000h
 0105  C3               ret
                end begin
не смотря на то, что компилятор указывает номер строки с ошибкой, в данном примере код маленький и ошибку можно найти быстро: 6-ть раз нажав стрелку "вниз", но если строк больше сотни, стрелка уже не поможет.

-видеть таблицу символов(имен, как служебных, так пользовательских):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
??DATE          Text   "03/10/17"
??FILENAME      Text   "170814  "
??TIME          Text   "13:53:14"
??VERSION       Number 040A
@32BIT          Text   0               #1
@@01            Near   DGROUP:0108         #8  11
@CODE           Text   DGROUP              #1
@CODESIZE       Text   0               #1
@CPU            Text   0101H
@CURSEG         Text   _TEXT               #2
@DATA           Text   DGROUP              #1
@DATASIZE       Text   0               #1
@FILENAME       Text   170814
@INTERFACE      Text   000H            #1
@MODEL          Text   1               #1
@STACK          Text   DGROUP              #1
@WORDSIZE       Text   2               #2
DWARRAY         Word   DGROUP:0390         7  #14
START           Near   DGROUP:0100         #4  16
Две последние строчки это имена пользователя, цифры в конце строки показывают, где используется данное имя, знак # указывает, в какой строке имя определяется (так называемые перекрестные ссылки)-именно это позволяет найти не используемые переменные.
-также генерируется МАР-информация, с указанием имен сегментов и их расположением:
Assembler
1
2
3
DGROUP          Group                  #1  1
  _DATA         16  0000 Word   Public  DATA       #1
  _TEXT         16  039A Word   Public  CODE       #1  #2
Вся эта нужная и не нужная информация включается дополнительными ключами, по умолчанию опция генерации листинга выключена. И у каждого компилятора СВОИ КЛЮЧИ.

Добавлено через 5 минут
Эму - это не ко мне.
Скачайте TASM и запустите в командной строке, можно:
- tasm name /l
или
- tаsm name,,,

последний вариант прикольнее.
0
Модератор
Эксперт по электронике
7940 / 4040 / 1553
Регистрация: 01.02.2015
Сообщений: 12,489
Записей в блоге: 3
03.10.2017, 16:42 15
У sandy15 - emu8086. Как понимаю, это компилятор и виртуальная машина DOS в одном флаконе, плюс достаточно удобная IDE с отладчиком.

А как в этом emu8086 получить листинг - сложный вопрос. Программа недорогая, но платная, и за пределами обучения не востребованная.

Может быть, и правда, tasm'ом получить это листинг.
0
3401 / 1820 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
03.10.2017, 17:04 16
sandy15,
Вот нашел:
При сохранении компилируемого файла, компилятор также сохраняет 2 других файла, которые используются эмулятором для отображения фактического исходного кода при его исполнении и выборе соответствующей строки.
asm - этот файл содержит оригинальный исходный код, который был использован для создания исполнимого файла.
debug - этот файл содержит информацию, которая позволяет эмулятору выбирать строки оригинального исходного кода во время выполнения машинного кода.
symbol - Таблица символов. Она содержит информацию, которая позволяет отображать окно "Variables" (Переменные). Это текстовый файл, так что вы можете посмотреть его из текстового редактора.
binf - этот файл содержит информацию, которая используется эмулятором для загрузки BIN-файла в указанное местоположение, и установки значений регистров предшествующих выполнению (создается только в том случае, если исполнимый файл - это BIN-файл).
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
03.10.2017, 22:54  [ТС] 17
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
как в этом emu8086 получить листинг - сложный вопрос
Я спросил еще на англоязычном форуме, мне ответили, что листинг формируется автоматически с запуском программы.
Но вот проблема, программа не может запуститься из-за этих ошибок
(3) illegal instruction: datas db'string' or wrong parameters.
(19) wrong parameters: INC dword ptr [bp]
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
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
;.386
Data Segment
     datas db'string'
     Datab db 123
     dataW dw 0001011100001101b
     datad dd 0abf523deH
     n = 10
Data ends
 
;assume cs:code, ds:data
Code Segment
 
Jum:
      Ret
 
      Inc byte ptr [bx + 1]
      inc datad [bx]
      inc dword ptr [bp +2]
      inc dword ptr [bp]
 
      Mul al 
      Mul ax
      Mul bh
      Mul bx
 
      Xor al, al
      Xor ax, ax
      mov bx, n
      n = 15
        mov bx, n
 
      Lea ax, [ax+1]
 
      Jnbe Jend
  
      Adc dword ptr dataS[ax+2], ax
      Adc dword ptr dataW[ax+2], ax
Adc byte ptr daTad[bx+5], bh
adc dataw[ecx], 023a5H
adc daTaS[ax+3], n
 
Mov ah, 200
Mov ax, 0abf523deH
;>=
Jnbe Jum
 
Jend:
Code ends
 
end
0
Модератор
Эксперт по электронике
7940 / 4040 / 1553
Регистрация: 01.02.2015
Сообщений: 12,489
Записей в блоге: 3
04.10.2017, 00:21 18
Цитата Сообщение от sandy15 Посмотреть сообщение
(3) illegal instruction: datas db'string' or wrong parameters.
Уже давно пора поставить пробел после db
Цитата Сообщение от sandy15 Посмотреть сообщение
(19) wrong parameters: INC dword ptr [bp]
Опять повторю: ваш emu8086 исключительно 16-разрядный компилятор. Замените dword на word.
0
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
04.10.2017, 12:21  [ТС] 19
А теперь это пишет
(32) wrong parameters: LEA ax, [ax+1]
(32) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: [ax+1]
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
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
;.386
Data Segment
     datas db 'string'
     Datab db 123
     dataW dw 0001011100001101b
     datad dd 0abf523deH
     n = 10
Data ends
 
;assume cs:code, ds:data
Code Segment
 
Jum:
      Ret
 
      Inc byte ptr [bx + 1]
      inc datad [bx]
      inc word ptr [bp +2]
      inc word ptr [bp]
 
      Mul al 
      Mul ax
      Mul bh
      Mul bx
 
      Xor al, al
      Xor ax, ax
      mov bx, n
      n = 15
        mov bx, n
 
      Lea ax, [ax+1]
 
      Jnbe Jend
  
      Adc word ptr dataS[ax+2], ax
      Adc word ptr dataW[ax+2], ax
Adc byte ptr daTad[bx+5], bh
adc dataw[ecx], 023a5H
adc daTaS[ax+3], n
 
Mov ah, 200
Mov ax, 0abf523deH
;>=
Jnbe Jum
 
Jend:
Code ends
 
end
Добавлено через 44 секунды
Можете пожалуйста подкорректировать, чтоб этих ошибок не возникало?
0
Модератор
Эксперт по электронике
7940 / 4040 / 1553
Регистрация: 01.02.2015
Сообщений: 12,489
Записей в блоге: 3
04.10.2017, 19:59 20
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
;.386
Data Segment
     datas db 'string'
     Datab db 123
     dataW dw 0001011100001101b
     n = 10
Data ends
 
Code Segment
assume cs:code, ds:data
 
Jum:
      Ret
 
      Inc byte ptr [bx + 1]
      inc word ptr [bp +2]
      inc word ptr [bp]
 
      Mul al
      Mul ax
      Mul bh
      Mul bx
 
      Xor al, al
      Xor ax, ax
      mov bx, n
      n = 15
        mov bx, n
 
      Lea ax, [bx+1h]
 
      Jnbe Jend
 
      Adc word ptr dataS[si+2], ax
      Adc word ptr dataW[di+2], ax
adc dataw[di], 023a5H
adc daTaS[si+3], n
 
Mov ah, 200
Mov ax, 023deH
;>=
Jnbe Jum
 
Jend:
Code ends
 
end Jum
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2017, 19:59
Помогаю со студенческими работами здесь

Как пропинговать адрес на виртуальной машине?
Всем привет. Разбираюсь с DNS в линуксе. именно с BIND. Настроил свою зону для прямого и обратного...

Как настроить Compiz на виртуальной машине?
И так, поставил ubunty 12.04 на Oracle VM VirtualBox. Обновил, поставил пакеты от Oracle для...

Как настроить сеть в виртуальной машине?
Здравствуйте) у меня стоит Windows 7 и виртуальная машина Майкрософт виртуал PC в котором...

Как распознать запуск программы на виртуальной машине?
Как при запуске программы распознать запущена она на на компьютере или на виртуальной машине?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru