Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти ошибку в программе, не транслируется 
:(
    Опции темы
bncom
Дата 16.2.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Вот программа:

Код

;НАЧАЛО -> X3-X2 -> X1=-X1 -> X2*X4 -> X3*2^-3 -> X1+X4+CF -> КОНЕЦ
;в числах:
;НАЧАЛО -> 16611-(-11074) -> 2=(-2) -> -11074*(-5537) -> 16611*2^-3 -> 2+(-5537)+CF -> КОНЕЦ
;================================================== 
;Входные переменные 
;--------------------------------------------------
;X1=2=2H 
;X2=-11074=65536-11074=54462=D4BEH 
;X3=16611=40E3H 
;X4=-5537=65536-5537=59999=EA5FH 
;--------------------------------------------------
;Выходные переменные 
;--------------------------------------------------
;Y1=X3-X2 
;X1=(–X1) 
;Y2=X2*X4 
;Y3=X3*2^(-3) = X3/(2^3) 
;Y4=X1+X4+CF 
;================================================== 
TITLE      Практическвя работа 
CSEG       SEGMENT  PARA PUBLIC 'CODE' 
           ASSUME   CS:CSEG,DS:CSEG,ES:CSEG 
           ORG 100H 
;================================================== 
EASY_PROG  PROC     NEAR 
           JMP      SHORT BEGIN 
;-------------------------------------------------- 
;                Область данных программы 
;-------------------------------------------------- 
X1         DW       0002H 
X2         DW       0D4BEH 
X3         DW       40E3H 
X4         DW       0EA5FH 
Y1         DW       0000H 
Y2_L       DW       0000H 
Y2_H       DW       0000H 
Y3         DW       0000H 
Y4         DW       0000H 
;-------------------------------------------------- 
;                   Задание №1 
;-------------------------------------------------- 
BEGIN:     MOV      AX,X2    ; AX <-- X2 
           MOV      BX,X3    ; BX <-- X3 
           SUB      AX,BX    ; AX <-- Y1=X3-X2 
           MOV      Y1,AX    ; сохраняем в памяти 
;-------------------------------------------------- 
;                   Задание №2 
;-------------------------------------------------- 
           NEG      X1       ; инверируем X1 пряио в памяти 
;-------------------------------------------------- 
;                   Задание №3 
;-------------------------------------------------- 
           MOV      AX,X2    ; AX <-- X2 
           MOV      BX,X4    ; BX <-- X4 
           IMUL     BX       ; DX:AX <-- Y2=X2*X4 
           MOV      Y2_L,AX  ; сохраняем в памяти 
;                              младший байт 
           MOV      Y2_H,DX  ; сохраняем в памяти 
;                              старший байт 
;-------------------------------------------------- 
;                   Задание №4 
;-------------------------------------------------- 
           MOV      AX,X3    ; AX <-- X3 
           MOV      CL,3 
           SAR      AX,CL    ; 3 сдвига AX вправо 
;                              эквивалентно          
;                              AX <-- Y3=X3/(2^3) 
           MOV      Y3,AX    ; сохраняем в памяти 
;-------------------------------------------------- 
;                   Задание №5 
;-------------------------------------------------- 
           MOV      AX,X1    ; AX <-- X1 
           MOV      BX,X4    ; BX <-- X4 
           ADC      AX,BX    ; AX <-- Y4=X1+X4+CF 
           MOV      Y4,AX    ; сохраняем в памяти 
;================================================== 
EASY_PROG  ENDP 
CSEG       ENDS 
           END      EASY_PROG

Почему-т оона не транслируется в Turbo Assembler v4.1
Пишет, что найдена одна ошибка.

В чем может быть проблема?

Это сообщение отредактировал(а) bncom - 16.2.2007, 18:28
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
piritus
Дата 16.2.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 3.1.2007
Где: Сибирь

Репутация: нет
Всего: 3



у меня все ровно...
а какую ошибку у тебя выдает и с какими парамертами компилишь?
--------------------
PM MAIL ICQ   Вверх
JAPH
Дата 16.2.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



А какая ошибка? Приведите текст. А то TASM v3.2 её спокойно компилирует, линкер лишь жалуется на отсутствие стэка.
Замечание: процедура должна кончаться оператором RET.



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
bncom
Дата 16.2.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Вот что пишется: user posted image
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
piritus
Дата 16.2.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 3.1.2007
Где: Сибирь

Репутация: нет
Всего: 3



laba.asm в h:\tasm\bin\
в cmd пиши: 
cd \tasm\bin\
tasm.exe laba.asm
tlink.exe laba.obj /t

/t - создать файл типа COM

--------------------
PM MAIL ICQ   Вверх
bncom
Дата 17.2.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Все получилось, файл laba.com создался.
Но вот что мне с ним делать? Я его открываю обыкновенным способом - окошко сразу пропадает.
Через командную строку - тоже никакого результата.

Может файл с таким типом надо как-то по-другому открывать?

Вот полученные exe-файлы мы окрывали через Turbo Debagger... А тут что делать?
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Ant
Дата 17.2.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 3.9.2006

Репутация: нет
Всего: нет



bncom, ну так и должно быть, ведь твоя программа ничего не выводит на экран, и ничего не просит ввести. Чего же ты от нее хочешь?
PM MAIL   Вверх
bncom
Дата 17.2.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Ну а как результат-то ее действий посмотреть?
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
piritus
Дата 17.2.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 3.1.2007
Где: Сибирь

Репутация: нет
Всего: 3



попробуй так:
laba.asm в h:\tasm\bin\
в cmd пиши: 
cd \tasm\bin\
tasm.exe laba.asm
tlink.exe laba.obj

(без параметра /t) должен быть .exe
если будет ругаться на отсутствие сегмента стека, то не обращай внимание
--------------------
PM MAIL ICQ   Вверх
bncom
Дата 18.2.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Спасибо, все получилось.

Тему можите закрывать.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Konstantinopol
Дата 21.2.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.2.2007

Репутация: -1
Всего: нет



1.Дан массив размерности n.Найти первый отрицательный элемент.
Вопрос:Сделать для двух отрицательных элементов?
#include <iostream>
using namespace std;
int main() {
    const int n = 10;
    int ar[n] = {4, 0, 2, 4, 3, 3, -5, 3, 7, 5};
    int r;
    asm {
       pusha
       push es
       push ds
       pop  es
       lea  edi, ar
       lea  esi, [edi + 4]
       xor  eax, eax
       mov  ecx, n
@4:    scasd
       jg   @5
       loop @4
       mov  r, -1
       jmp  @6
@5:    sub  edi, esi
       shr  edi, 2
       mov  r, edi
@6:    pop  es
       popa
    }
    (r < 0) ? cout<<"No negative elements" : cout<<ar[r];
    return 0;

 
2. В строке заменить все символы '1' символом '0', а символы '0' символом '1'
Вопрос: Шестым символом появляется '1' - помогите исправить?
 #include <iostream>
using namespace std;
int main() {
    char s[] = "234105431591045\0";
    char buf[30];
    asm {
       pusha
       push es
       push ds
       pop  es
       lea  esi, s
       lea  edi, buf
@1:    lodsb
       cmp  al, '0'
       jne  @2
       mov  al, '1'
       stosb
       jmp  @3
@2:    cmp  al, '1'
       jne  @3
       mov  al, '0'
@3:    stosb
       test al, al
       jne  @1
       pop  es
       popa
    }
    cout<<buf;
    return 0;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0729 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.