Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2008, 19:05   #1
Almost_Famous
Пользователь
 
Регистрация: 28.02.2008
Сообщений: 13
По умолчанию Assembler

Есть алгоритм по которума нужно произвести операции. Т.к. препод ничего не объяснил пришлось разбираться по методичке в итоге получилась прога, но она не работает.Объясните пожалуйста, где ошибка!

;Сегменты не более 64 Кб.
.Model small

;сегмент стека
Sseg SEGMENT 'stack'
db 256 dup(?)
Sseg ends

;сегмент данных
Dseg SEGMENT 'data'
x1 db 7 ;-9
x2 dw C5F7 ; 50679
x3 dw 240A ;-56310
x4 dw 15FF ; 5631

rez1 dw ?
rez2 dw ?
rez3 dw ?
rez4 dw ?
rez5 dw ?

Dseg ends

;Сегмент кода
Cseg SEGMENT 'code'
Assume CS:Cseg, DS:Dseg, SS:Sseg
;Основная программа
Main PROC FAR
;Подготовка к возврату в операционную систему
PUSH DS
Mov AX,0
PUSH AX
;Настроим DS на наш сегмент данных
Mov AX,Dseg
Mov DS,AX

;Выполнение операций

mov AL,x3 ;Запись x3 в регситр AL
or x1 ;сложение по модуля 2 x1+x3
mov rez1,AX ;Сохранение результата в переменной rez1

mov AL,x3 ;Запись x3 в регистр AL
sbc
sub AL,x4 ;Вычитание x1-x4-CF
mov rez2,AX ;Сохранение результата в переменной rez2

mov AL,x4 ;Запись x4 в регситр AL
div x3 ;Умножение x4 на x3
mov rez3,AX ;Сохранение результата в переменной rez3

mov AL,x2 ;Запись x2 в регситр AL
neg x2 ;Измение знака x2
mov rez4,AX ;сохранение результата в переменной rez4

mov AL,x1 ;Запись x1 в регситр AL
imul x1 ;Умножение X1*X1
mov rez5,AX ;сохранение результата в переменной rez5

;Передача управления первому оператору в PSP
RET
Main ENDP
Cseg ends
end Main

Последний раз редактировалось Almost_Famous; 29.02.2008 в 19:08.
Almost_Famous вне форума Ответить с цитированием
Старый 29.02.2008, 19:08   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

ну так сюда её, будем разбираться
B_N вне форума Ответить с цитированием
Старый 29.02.2008, 20:32   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Ошибки синтаксические:

В основном путаете разрядность регистров и операндов. Про sub/sbb почитайте.

вот код - исправленные места помечены !!!
по крайней мере теперь компилируется, хотя
смысл всех этих действий не понятен

Код:
.Model small

Sseg SEGMENT 'stack'
db 256 dup(?)
Sseg ends

Dseg SEGMENT 'data'
x1 db 7 ;-9
x2 dw 0C5F7h ; 50679  !!!
x3 dw 0240Ah ;-56310  !!!
x4 dw 015FFh ; 5631   !!!

rez1 dw ?
rez2 dw ?
rez3 dw ? 
rez4 dw ? 
rez5 dw ? 

Dseg ends

Cseg SEGMENT 'code'
Assume CS:Cseg, DS:Dseg, SS:Sseg
;Основная программа
Main PROC FAR
;Подготовка к возврату в операционную систему
PUSH DS
Mov AX,0
PUSH AX
;Настроим DS на наш сегмент данных
Mov AX,Dseg
Mov DS,AX

;Выполнение операций

mov AX,x3   ;Запись x3 в регситр AL   ; !!! x3 dw 
mov bl,x1                             ; !!!
or  al, bl  ;сложение по модуля 2 x1+x3
mov rez1,AX ;Сохранение результата в переменной rez1

mov AX,x3 ;Запись x3 в регистр AL     ; !!!
sub AX,x4 ;Вычитание x1-x4-CF         ; !!!
sbb AX,x4 ; если с заемом, но был ли он ? !!!
MOV BX, 0 ; 
sbb AX, BX; ? А имеет ли смысл        ; !!!  
mov rez2,AX ;Сохранение результата в переменной rez2

mov AX,x4 ;Запись x4 в регситр AL !!!
div x3 ;Умножение x4 на x3
mov rez3,AX ;Сохранение результата в переменной rez3

mov AX,x2 ;Запись x2 в регситр AL 
neg x2 ;Измение знака x2
mov rez4,AX ;сохранение результата в переменной rez4

mov AL,x1 ;Запись x1 в регситр AL
imul x1 ;Умножение X1*X1
mov rez5,AX ;сохранение результата в переменной rez5

;Передача управления первому оператору в PSP
RET
Main ENDP
Cseg ends
end Main
alexBlack вне форума Ответить с цитированием
Старый 29.02.2008, 21:41   #4
Almost_Famous
Пользователь
 
Регистрация: 28.02.2008
Сообщений: 13
По умолчанию

Огромное спасибо!!!просто я изучаю ассемблер всего 3 дня...а в универе мало чего дают по этому предмету.Только я вот не могу понять, когда мы используем AX, а когда AL, подскажите пожалуйста, посмотрел книги, но там обще, а не конкретно. и еще маленький вопрсик:когда делаю команду tlink filename.asm /t выдается ошибка fatal:cannot generate COM file: stack segment present. Что надо сделать, чтобы этой ошибки не было?Заранее большое-большое спасибо!
Almost_Famous вне форума Ответить с цитированием
Старый 29.02.2008, 21:54   #5
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Ты использовал параметр /t, но программа содержит сегмент стека, что не допускается для файлов .COM
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler oleh Помощь студентам 2 24.04.2008 19:45