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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2010, 09:50   #1
bookkc
Форумчанин
 
Регистрация: 16.05.2009
Сообщений: 199
По умолчанию Простенькая программа отнимание

Нужно сделать, неполучается

Корчое суть самой программы, что бы отнемала число от другого, вот фрагмент главный.

Код:
mov ax,5
mov bx,1
sub ax,bx
Ну тут всё просто, в ах 5 в bx 1 отнемает от ах bx и весь результат будет в ах. Проблема в насписании шапки изначально шапка у меня такая:

Код:
DATA SEGMENT
DATA ENDS
STEC SEGMENT STACK
	db 128 dup (?)
STEC ENDS
CODE SEGMENT
START:

Код программы

Code ends
end start
Выбивает ошибку (на скриншоте). Так же его нужно каким-то боком вывести на экран, насколько мне извесно, то что бы вывести на екран нужно вписать
Код:
int 21h
Как только программа доходит до этой строчки, сразу же ошибку выдает программа (на скриншоте) Проверял через Turbo Debager

Изначально разместил строчку int 21h над главной программой, потом под ней всё равно такая вот беда

Так же пробывал шапку сделать такой:

Код:
.model tiny
.code
.startup

КОД ПРОГРАММЫ

end
Ошибку вроди не выдавало, но программа на екран не выводила ничего

ПОМОГИТЕ, что я неправильно делаю

З Ы Причем ошибку выдает не сама мною написаная программа, а среда Windows. Ось Виндовс 7.

bookkc вне форума Ответить с цитированием
Старый 26.09.2010, 11:14   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Завершать программу нужно
Код:
mov ax,4c00h
int 21h
Вот полный код:
Код:
DATA SEGMENT
DATA ENDS
STEC SEGMENT STACK
	db 128 dup (?)
STEC ENDS
CODE SEGMENT
START:

mov ax,5
mov bx,1
sub ax,bx
mov ax,4c00h
int 21h

Code ends
end start
У меня все нормально, правда ось - XP
На экран выводить ничего и не будет, так как в программе нет вывода.
Результат работы можно посмотреть через отладчик.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 26.09.2010, 12:52   #3
bookkc
Форумчанин
 
Регистрация: 16.05.2009
Сообщений: 199
По умолчанию

Это и я сделал, мне нужно сделать что бы его выводило на экран, помогите
bookkc вне форума Ответить с цитированием
Старый 26.09.2010, 12:59   #4
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

На гугле забанили? Тысячи этих процедур вывода результатов.
Вот у меня под рукой такая есть - выводит беззнаковое (положительное) число из AX. То-есть:
mov ax.12312
call WordWrite

Код:
WordWrite:      Push    AX                      ; Push some registers
		Push    BX                      ; AX contains word to display
		Push    CX
		Push    DX
		Push    SI
		Mov     SI, Offset Divisors     ; SI points to divisors
		Mov     CX, 4                   ; CL counter; CH zero blanker

WordWriteLoop:  Mov     BX, [SI]                ; Get divisor
		Add     SI, 2                   ; Increment SI for next one
		Sub     DX, DX                  ; Prepare for division
		Div     BX                      ; Divide DX:AX by BX
		Push    DX                      ; Save remainder
		Or      CH, AL                  ; See if zero
		Jz      LeadZero                ; If so, do not display it
		Add     AL, '0'                 ; Convert number to ASCII
		Mov     DL, AL                  ; Print out character
		Mov     AH, 2                   ;   by calling DOS
		Int     21h

LeadZero:       Pop     AX                      ; Get back remainder
		Dec     CL                      ; Decrement counter
		Jg      WordWriteLoop           ; If CL still > 0, do it again
		Mov     CH, 1                   ; No more zero blanking
		Jz      WordWriteLoop           ; Convert last digit to ASCII
		Pop     SI                      ; Get back pushed registers
		Pop     DX
		Pop     CX
		Pop     BX
		Pop     AX
		Ret
Divisors        dw      10000, 1000, 100, 10, 1 ; For decimal conversion
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 26.09.2010, 13:30   #5
bookkc
Форумчанин
 
Регистрация: 16.05.2009
Сообщений: 199
По умолчанию

То есть мне нужен только этот кусочек программы ?

Код:
WordWrite:      Push    AX                      ; Push some registers
		Push    BX                      ; AX contains word to display
		Push    CX
		Push    DX
		Push    SI
		Mov     SI, Offset Divisors     ; SI points to divisors
		Mov     CX, 4                   ; CL counter; CH zero blanker
bookkc вне форума Ответить с цитированием
Старый 26.09.2010, 14:25   #6
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Тебе нужна вся процедура эта. Кусочками тут не отделаешься.
Код:
DATA SEGMENT
Divisors        dw      10000, 1000, 100, 10, 1 ; For decimal conversion
DATA ENDS
STEC SEGMENT STACK
	db 128 dup (?)
STEC ENDS
CODE SEGMENT
assume cs:CODE, ds:DATA, es:DATA
START:

push Data
pop ds

mov ax,5
mov bx,1
sub ax,bx
call WordWrite
mov ax,4c00h
int 21h

WordWrite:      Push    AX                      ; Push some registers
		Push    BX                      ; AX contains word to display
		Push    CX
		Push    DX
		Push    SI
		Mov     SI, offset Divisors     ; SI points to divisors
		Mov     CX, 4                   ; CL counter; CH zero blanker

WordWriteLoop:  Mov     BX, [SI]                ; Get divisor
		Add     SI, 2                   ; Increment SI for next one
		Sub     DX, DX                  ; Prepare for division
		Div     BX                      ; Divide DX:AX by BX
		Push    DX                      ; Save remainder
		Or      CH, AL                  ; See if zero
		Jz      LeadZero                ; If so, do not display it
		Add     AL, '0'                 ; Convert number to ASCII
		Mov     DL, AL                  ; Print out character
		Mov     AH, 2                   ;   by calling DOS
		Int     21h

LeadZero:       Pop     AX                      ; Get back remainder
		Dec     CL                      ; Decrement counter
		Jg      WordWriteLoop           ; If CL still > 0, do it again
		Mov     CH, 1                   ; No more zero blanking
		Jz      WordWriteLoop           ; Convert last digit to ASCII
		Pop     SI                      ; Get back pushed registers
		Pop     DX
		Pop     CX
		Pop     BX
		Pop     AX
		Ret

Code ends
end start
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простенькая программа- записная книжка fezilk24 БД в Delphi 1 27.07.2010 19:02
Простенькая сетевая программа. BadProgrammer Помощь студентам 0 09.01.2010 17:05
Простенькая программа для ворда. Возможен заказ shadowbat Фриланс 7 24.03.2009 06:27
Простенькая программа для ворда. Возможен заказ shadowbat Microsoft Office Word 2 16.03.2009 13:01