Вот код проги подскажите что нужно поменять. Зарание спасибо!! !
TITLE EX_PROG
PAGE, 02h
STAK SEGMENT
DB 64 DUP('STACK')
DSEG SEGMENT
MASS DB 14 DUP(0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:STACK
OUR_PROG PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV CX,14
LEA BX,MASS
L1:
MOV [BX],02h
INC BX
LOOP L1
MOV CX,14
LEA BX,MASS
XOR AX,AX
MOV CX,14
LEA BX,MASS
LEA BX,MASS
MOV AX,0
ADD AX,[0]
MOV BX,1
ADD AX,[1]
MOV BX,2
ADD AX,[2]
MOV BX,3
mov bx[8],ax
XOR DX,DX
MOV AL,MASS[0]
IMUL MASS[1]
MOV MASS[3],DH
MOV MASS[4],AL
RET;
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
Другие языки программирования и технологии
Как из EXE ФАЙЛА СДЕЛАТЬ COM?
> Там только заголовочная часть изменится.
Не только. Программу нужно переписать так, чтобы исполняемый код, данные и стек находились в одном сегменте.
Сначала позволю себе разбор того, что имеется:
TITLE EX_PROG
PAGE, 02h; Если не знаете, для чего это нужно, лучше удалите
STAK SEGMENT
DB 64 DUP('STACK')
STAK ends; Нет директивы окончания сегмента стека
DSEG SEGMENT
MASS DB 14 DUP(0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:STACK; У вас же сегмент стека называется STAK
OUR_PROG PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV CX,14
LEA BX,MASS
L1:
MOV [BX],02h
INC BX
LOOP L1
MOV CX,14
LEA BX,MASS
XOR AX,AX
MOV CX,14; Зачем повторять то, что уже было сделано?
LEA BX,MASS; Для закрепления содержимого регистров? :))
comment * Далее идёт изумительный бред, который лучше закомментировать, чтобы не смешить компилятор.
LEA BX,MASS; Зачем третья загрузка смещения начала массива?
MOV AX,0
ADD AX,[0]; Зачем вы полезли в PSP? Компилятор заменит это на непосредственную адресацию add ax,0
MOV BX,1; Бессмысленное действие
ADD AX,[1]
MOV BX,2
ADD AX,[2]
MOV BX,3
mov bx[8],ax; В итоге, если бы это был исполняемый com-файл, то вы записали бы в 12-й и 13-й байты PSP число 3 (0+0+1+2).
; А там как раз находится часть адреса подпрограммы завершения работы программы.
; Наверное вирус пытались написать :D
*
; В дальнейших действиях тоже мало смысла, если неизвестно, что должна делать программа
XOR DX,DX
MOV AL,MASS[0]
IMUL MASS[1]
MOV MASS[3],DH; 4-й элемент будет обнулён
MOV MASS[4],AL; В 5-м элементе массива будет произведение 1-го на 2-й, т. е. 4
RET;
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
А теперь, как примерно должна выглядеть эта программа, чтобы её можно было откомпилировать как *.com приложение:
TITLE EX_PROG
PAGE, 50h
CSEG SEGMENT
org 100h
ASSUME CS:CSEG,DS:CSEG,SS:CSEG; Всё находится в одном сегменте
OUR_PROG PROC FAR
lea sp,Stack_ptr; Если вы хотите свой стек
PUSH DS
XOR AX,AX
PUSH AX
MOV CX,14
LEA BX,MASS
L1:
MOV byte ptr [BX],02h
INC BX
LOOP L1
; Наверное должно быть так, хотя неизвестно, что было задумано:
LEA BX,MASS
XOR AX,AX
ADD AL,[bx]
MOV BX,1
ADD AL,MASS[bx]
MOV BX,2
ADD AL,MASS[bx]
MOV BX,3
mov word ptr MASS[bx][8],ax
XOR DX,DX
MOV AL,MASS[0]
IMUL MASS[1]
MOV MASS[3],DH
MOV MASS[4],AL
RET
OUR_PROG ENDP
MASS DB 14 DUP(0)
STAK DW 64 DUP (?)
Stack_ptr equ $
CSEG ENDS
END OUR_PROG
P.S. Очередной наглядный пример того, что получается, если взять чужую рабочую программу и пытаться изменить её под своё задание, не имея представления что делаешь.
Не только. Программу нужно переписать так, чтобы исполняемый код, данные и стек находились в одном сегменте.
Сначала позволю себе разбор того, что имеется:
TITLE EX_PROG
PAGE, 02h; Если не знаете, для чего это нужно, лучше удалите
STAK SEGMENT
DB 64 DUP('STACK')
STAK ends; Нет директивы окончания сегмента стека
DSEG SEGMENT
MASS DB 14 DUP(0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:STACK; У вас же сегмент стека называется STAK
OUR_PROG PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV CX,14
LEA BX,MASS
L1:
MOV [BX],02h
INC BX
LOOP L1
MOV CX,14
LEA BX,MASS
XOR AX,AX
MOV CX,14; Зачем повторять то, что уже было сделано?
LEA BX,MASS; Для закрепления содержимого регистров? :))
comment * Далее идёт изумительный бред, который лучше закомментировать, чтобы не смешить компилятор.
LEA BX,MASS; Зачем третья загрузка смещения начала массива?
MOV AX,0
ADD AX,[0]; Зачем вы полезли в PSP? Компилятор заменит это на непосредственную адресацию add ax,0
MOV BX,1; Бессмысленное действие
ADD AX,[1]
MOV BX,2
ADD AX,[2]
MOV BX,3
mov bx[8],ax; В итоге, если бы это был исполняемый com-файл, то вы записали бы в 12-й и 13-й байты PSP число 3 (0+0+1+2).
; А там как раз находится часть адреса подпрограммы завершения работы программы.
; Наверное вирус пытались написать :D
*
; В дальнейших действиях тоже мало смысла, если неизвестно, что должна делать программа
XOR DX,DX
MOV AL,MASS[0]
IMUL MASS[1]
MOV MASS[3],DH; 4-й элемент будет обнулён
MOV MASS[4],AL; В 5-м элементе массива будет произведение 1-го на 2-й, т. е. 4
RET;
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
А теперь, как примерно должна выглядеть эта программа, чтобы её можно было откомпилировать как *.com приложение:
TITLE EX_PROG
PAGE, 50h
CSEG SEGMENT
org 100h
ASSUME CS:CSEG,DS:CSEG,SS:CSEG; Всё находится в одном сегменте
OUR_PROG PROC FAR
lea sp,Stack_ptr; Если вы хотите свой стек
PUSH DS
XOR AX,AX
PUSH AX
MOV CX,14
LEA BX,MASS
L1:
MOV byte ptr [BX],02h
INC BX
LOOP L1
; Наверное должно быть так, хотя неизвестно, что было задумано:
LEA BX,MASS
XOR AX,AX
ADD AL,[bx]
MOV BX,1
ADD AL,MASS[bx]
MOV BX,2
ADD AL,MASS[bx]
MOV BX,3
mov word ptr MASS[bx][8],ax
XOR DX,DX
MOV AL,MASS[0]
IMUL MASS[1]
MOV MASS[3],DH
MOV MASS[4],AL
RET
OUR_PROG ENDP
MASS DB 14 DUP(0)
STAK DW 64 DUP (?)
Stack_ptr equ $
CSEG ENDS
END OUR_PROG
P.S. Очередной наглядный пример того, что получается, если взять чужую рабочую программу и пытаться изменить её под своё задание, не имея представления что делаешь.
забей в поиск "формат файла com"
Там только заголовочная часть изменится.
Там только заголовочная часть изменится.
Похожие вопросы
- Вопрос по поводу exe файлов
- Как посмотреть исходный код .exe файла?
- как создать exe файл
- Как создать *.exe файл? (описание внутри)
- у меня на жостких дисках появляются странные скрытые .exe файлы,как мне найти кто их создает,можит есть ли такая програм
- У меня exe файл, там текст, но он защищен от копирования как мне можно скопировать этот текст?
- Можно ли сделать exe файл на java?
- Что собой представляет движок игры? Это же не exe файл. И еще интересно как прикрепляют модели к движку.
- Чем можно открыть EXE файл? Не знаю в какой программе создан.
- Чем можно прочитать exe-файлы ? Посмотреть "внутренности", ну что-то типа блокнота