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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2013, 15:55   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Оптимизировать код

здравствуйте, помогите оптимизировать код, желательно использовать командыЮ которые у меня, и никаких других больше

Код:
code segment para public 'code'
Assume CS:code, DS:code, SS:code, ES:code
org 100h
mov dx,code
mov ds,dx
mov ss,dx
mov es,dx                         ; заготовка для нормального входа в программу
jmp m46    
np1 db 'PRObeL-BbIXOD...$' 
m47:
mov ah,2
mov dl,0ah                        ; переход на новую строчку
int 21h
m46:
mov si,1                              ; в si регистр помещаем 1, в последствии будем наращивать на 1
mov cx,1000/3                    ; В счетный цикл помещаем значение 1000/3 (333)
m1z:                                    ; метка цикла
mov ax,0 ;   
mov al,3
mul si                                  ; умножаем si на 3 (результат в ах)
PUSH ax                             ; помещаем ах в стек
cmp ax,10                           ; сравниваем регистр ах с 10, если больше или равно то переход на метку М1 
jge m1                                 ; сам переход на метку
mov ah,2
mov dl,al
add dl,30h
int 21h                                 ; вывод числа меньшего чем 10 
jmp m101                            ; прыжок на метку м101 для вывода разделителя
M1:
cmp ax,100                          ; сравниваем регистр ах с 100, если больше, то выводим число
jge m3                                  ; переход на метку м3 по больше или равно для вывода трехзначного                             ;числа, если меньше, то выводим двухзначное число
mov dx,0                              ; обнуляем регистр дх для записи в него остатка 
m45:mov di,10                     ; записываем в di 10, для деления двухзначного числа (получится целая   ; и дробная часть, для вывода этого числа)
div di                                     ; деление на 10
push dx                                  ; запись остатка в стек
mov ah,2
mov dl,al
add dl,30h
int 21h                                    ; вывод целого числа
pop dx                                    ; запись из стека
add dl,30h 
int 21h                                    ; вывод остатка
jmp m101                               ; прыжок на метку для вывода разделителя
m3: pop ax                              ; берем ах из стека
mov dx,0                                 ; обнуляем регистр для записи остатка
mov di,100                              ; помещаем в di 100 для деления трехзначного числа и последующего     ;его вывода
div di                                      ; деление трехзначного числа
push dx                                  ; запись остатка в стек
mov ah,2
mov dl,al
add dl,30h
int 21h                                ; вывод целой части
pop dx                                ; берем остаток из стека
mov ax,dx                           ; помещаем остаток в ах для деление (так как делимое должно быть в ах)
mov dx,0                            ; обнуляем дх
jmp m45                             ; прыжок на метку м45 для вывода оставщейся части числа
m101: 
mov ah,2
mov dl,','
int 21h                                ; вывод разделителя
inc si                                   ; наращиваем si, было 1, стало 2,...,333
loop m1z                            ; пока сх не =333 продолжаем вывод числа
mov ah,2
mov dl,0ah
int 21h                                ; переход на новую строчку
mov ah,09h
lea dx,np1                          ; вывод сообщения
int 21h
mov ah,1
int 21h                                ; ввод символа
cmp al,' '                             ; если символ равен пробелу, то выход
je m105                              ; если равно пробелу то на метку м105
jmp m47                             ; если нажата любая не специальная клавиша кроме пробела, то запуск ;программы сначала (прыжок на метку м47)
m105:
mov ah,4ch
int 21h
code ends
end                                    ; заготовка для нормального выхода из программы

вот это оставить без изменений:

Код:
code segment para public 'code'
Assume CS:code, DS:code, SS:code, ES:code
org 100h
mov dx,code
mov ds,dx
mov ss,dx
mov es,dx   


mov ah,4ch
int 21h
code ends
end
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 02.02.2013, 11:51   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Все команды знакомы?
Код:
.model tiny
.code
org 100h
start:

mov ax,1
mov di,offset buffer
mov si,di
add si,4
mov cx,1000

@3:
mov [di],ax
add di,2
inc ax
loop @3

mov bx,10
mov cx,1000/3

@4:
mov ax,[si]
add si,6
push cx

xor cx,cx

@1:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz @1

mov ah,2

@2:
pop dx
or dl,30h
int 21h
loop @2

mov dl,20h
int 21h
pop cx
loop @4

xor ax,ax
int 16h

ret

buffer dw ?
end start
vadimych вне форума Ответить с цитированием
Старый 02.02.2013, 14:26   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ваша даже obj-файл не создает, и соответственно ехе
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 02.02.2013, 15:06   #4
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
ваша даже obj-файл не создает, и соответственно ехе
А Ваша с org 100h создаёт .exe? org 100h - верный признак того, что код надо собирать как .com файл.
Хреново, но видно на картинке, что всё создаётся.
Изображения
Тип файла: jpg tasm.jpg (46.3 Кб, 114 просмотров)

Последний раз редактировалось vadimych; 02.02.2013 в 15:11.
vadimych вне форума Ответить с цитированием
Старый 03.02.2013, 00:28   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

мне нужен ехе файл, а где org 100h это не я писал, нам в колледже давали это как заготовку для входа в программу, дальше сама программа, а дальше выход из программы, вот так:
Код:
code segment para public 'code'
Assume CS:code, DS:code, SS:code, ES:code
org 100h
mov dx,code
mov ds,dx
mov ss,dx
mov es,dx   
; заготовка для входа
; сама программа
Код:
mov ah,4ch
int 21h
code ends
end
; заготовка для выхода
собираю ехе-файл таким образом, в cmd.exe прописываю команды:
1) tasm <имя_программы>.asm
2) tlink <имя_программы>.obj
После этого появляется ехе-файл
from dark to light)

Последний раз редактировалось Алексей_2012; 03.02.2013 в 00:31.
Алексей_2012 вне форума Ответить с цитированием
Старый 03.02.2013, 06:33   #6
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Алексей_2012, отдайте свою заготовку назад в колледж. Истины в ней не больше, чем в вине.
Код:
.model small
.stack 20h
.data
buffer dw 1000 dup (?)

.code
start:

mov ax,@data
mov ds,ax

mov di,offset buffer
mov si,di
add si,4
mov cx,1000

mov ax,1

@3:
mov [di],ax
add di,2
inc ax
loop @3

mov bx,10
mov cx,1000/3

@4:
mov ax,[si]
add si,6
push cx

xor cx,cx

@1:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz @1

mov ah,2

@2:
pop dx
or dl,30h
int 21h
loop @2

mov dl,20h
int 21h
pop cx
loop @4

xor ax,ax
int 16h

mov ax,4c00h
int 21h
end start
vadimych вне форума Ответить с цитированием
Старый 04.02.2013, 03:17   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

спасибо за поправку, все отлично, но есть одно большое НО! алгоритм работы придется мне объяснять и составлять блок-схему, по мной написанной программе все отлично, алгоритм тоже объяснил и блок-схему начертил, но в вашей программе долго сидел, разбирался, и ничего не понял, например что такое offset? Может ли кто-нибудь оптимизировать мой код? или например вывести строкой через
Код:
mov ah,09h
...
int 21h
я как раз сам пытаюсь это реализовать
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 04.02.2013, 03:45   #8
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

offset buffer - возвращает адрес переменной buffer, это MASM-овская штука (и TASM-овская тоже наверно).
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 04.02.2013, 06:57   #9
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Алексей_2012, вот, оптимизировал свой код. Ни offset`a непонятного, ни буфера выделенного.
Код:
.model small
.stack 20h

.code
start:

push 0b900h
pop ds

xor ax,ax
xor di,di
mov bx,10
mov cx,1000/3

@4:
add ax,3
push cx
push ax

xor cx,cx

@1:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz @1

mov ah,2

@2:
pop ax
or al,30h
mov [di],al
inc di
loop @2

mov byte ptr [di],' '
inc di
pop ax
pop cx
loop @4

mov byte ptr [di],'$'

mov ah,9
xor dx,dx
int 21h

xor ax,ax
int 16h

mov ax,4c00h
int 21h
end start

Последний раз редактировалось vadimych; 04.02.2013 в 07:50.
vadimych вне форума Ответить с цитированием
Старый 04.02.2013, 15:51   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
push 0b900h; что вносим в стек?
mov byte ptr [di],' '; что делает эта строчка?
test ax,ax; и это не понятно)

xor di,di; вот это обнуление?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизировать код destic Microsoft Office Excel 14 26.01.2013 01:12
Оптимизировать код strannick Microsoft Office Excel 9 14.11.2012 00:59
Оптимизировать код) Pein95 Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2011 18:42
Оптимизировать код. Манжосов Денис :) Общие вопросы Delphi 1 20.10.2008 19:06
Оптимизировать код NeiL Помощь студентам 2 21.02.2008 08:57