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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2013, 14:35   #1
maxstah
 
Регистрация: 17.11.2013
Сообщений: 4
По умолчанию Вывод числа на экран

Помогите, пожалуйста!
Какое бы значение я не присвоил переменной NUM, на экран во всех случаях выводится 8397

Код:
STSEG SEGMENT PARA STACK "STACK"
DB 64 DUP (?)
STSEG ENDS

DSEG SEGMENT PARA PUBLIC "DATA"
num dw -23154
DSEG ENDS

CSEG SEGMENT PARA PUBLIC "CODE"
MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG, SS: STSEG
; адрес возврата
PUSH DS
MOV AX, 0 ; или XOR AX, AX
PUSH AX
; инициализация DS
 mov ax, num
; Проверяем число на знак.
   test    ax, ax
   jns     oi1
; Если оно отрицательное, выведем минус и оставим его модуль.
   mov  cx, ax
   mov     ah, 02h
   mov     dl, '-'
   int     21h
   mov  ax, cx
   neg     ax
; Количество цифр будем держать в CX.
oi1:  
    xor     cx, cx
    mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
    xor     dx,dx
    div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
    push    dx
    inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
    test    ax, ax
    jnz     oi2
; Теперь приступим к выводу.
    mov     ah, 02h
oi3:
    pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
;; раскоментировать если основание сс > 10, т.е. для вывода требуются буквы
;   cmp     dl,9
;   jbe     oi4
;   add     dl,7
;oi4:
    add     dl, '0'
    int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
    loop    oi3
    
    ret
MAIN ENDP
CSEG ENDS
END MAIN
maxstah вне форума Ответить с цитированием
Старый 02.12.2013, 15:48   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
; инициализация DS
Комментарий есть, а инициализации - нет.
Код:
PUSH DS
MOV AX, 0 ; или XOR AX, AX
PUSH AX
; инициализация DS
mov ax,DSEG
mov ds,ax
vadimych вне форума Ответить с цитированием
Старый 02.12.2013, 15:54   #3
maxstah
 
Регистрация: 17.11.2013
Сообщений: 4
По умолчанию

огромное спасибо! теперь работает, как надо.
maxstah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод на экран числа из регистра Blind Guard Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 24.06.2013 20:44
трехзначный числа, вывод на экран muza15 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 19.06.2012 11:32
Ввод с клавиатуры два целых числа без знака и вывод на экран их сумму. gelya_17 Помощь студентам 5 18.10.2010 10:31
вывод на экран наибольшего делителя натурального числа N, меньше заданного натурального M Fatality Помощь студентам 2 03.12.2008 23:27