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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2015, 23:59   #1
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию вывод двойного слова для знаковых

имеется код
Код:
data segment
 
ends
stack segment
    dw   128  dup(0)
ends
code segment
start:
    mov ax, data
    mov ds, ax
    mov es, ax      
@:      mov     dx, 0001h
        mov     ax, 0000h
        mov     bx, 000Ah
        xor     cx, cx
@1:     mov     si, ax
        mov     ax, dx
        xor     dx, dx
        div     bx
        xchg    si, ax
        div     bx
        push    dx
        inc     cx
        mov     dx, si
        test    dx, dx
        jnz     @1
        test    ax, ax
        jnz     @1
        mov     ah, 02h
@2:     pop     dx
        add     dl, 30h
        int     21h
        loop    @2
    mov ax, 4c00h 
    int 21h    
ends
end start
как его сделать для знаковых?
kucher69 вне форума Ответить с цитированием
Старый 22.09.2015, 00:29   #2
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

Код:
data segment

ends

stack segment
    dw   128  dup(0)
ends

code segment
start:

    mov ax, data
    mov ds, ax
    mov es, ax 
    call  input_ar 
    jmp endprogram   
input_ar     PROC
@:      mov    dx, 0ffffh
        mov    ax, 0ffaah
        mov    bx, 000Ah 
        TEST   DX, DX
        JNS oi1
        MOV CX, AX
        PUSH DX
        MOV AH, 02H
        MOV DL, '-'
        INT 21H
        MOV AX, CX
        NEG AX
        POP DX
        CMP DX, 0ffffh
        jne f@
        MOV DX, 00h
        JMP oi1
f@:        
        NEG DX
oi1:        
        xor     cx, cx
@1:     mov     si, ax
        mov     ax, dx
        xor     dx, dx
        div     bx
        xchg    si, ax
        div     bx
        push    dx
        inc     cx
        mov     dx, si
        test    dx, dx
        jnz     @1
        test    ax, ax
        jnz     @1
        mov     ah, 02h
@2:     pop     dx
        add     dl, 30h
        int     21h
        loop    @2
        ret        
input_ar     ENDP 

endprogram:            

    
    mov ax, 4c00h 
    int 21h    
ends

end start
вроде как работает
спасибо всем кто тоже мозговал мою тему, если такие были)
kucher69 вне форума Ответить с цитированием
Старый 22.09.2015, 03:53   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

...в чём вопрос?
Простой способ вычислить знак - вытолкнуть старшую единицу и проверить флаг
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 22.09.2015, 10:41   #4
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

так то да, но как это сделать програмно....
всёравно нашёл ошибку
Код:
data segment

ends

stack segment
    dw   128  dup(0)
ends

code segment
start:

    mov ax, data
    mov ds, ax
    mov es, ax 
    call  input_ar 
    jmp endprogram   
input_ar     PROC
@:      mov    dx, 0ffffh
        mov    ax, 0ffaah
        mov    bx, 000Ah 
        TEST   DX, DX
        JNS oi1
        MOV CX, AX
        PUSH DX
        MOV AH, 02H
        MOV DL, '-'
        INT 21H
        MOV AX, CX
        NEG AX
        POP DX
        CMP DX, 0ffffh
        jne f@
        MOV DX, 00h
        JMP oi1
f@:        
        NEG DX
oi1:        
        xor     cx, cx
@1:     mov     si, ax
        mov     ax, dx
        xor     dx, dx
        div     bx
        xchg    si, ax
        div     bx
        push    dx
        inc     cx
        mov     dx, si
        test    dx, dx
        jnz     @1
        test    ax, ax
        jnz     @1
        mov     ah, 02h
@2:     pop     dx
        add     dl, 30h
        int     21h
        loop    @2
        ret        
input_ar     ENDP 

endprogram:            

    
    mov ax, 4c00h 
    int 21h    
ends

end start
kucher69 вне форума Ответить с цитированием
Старый 22.09.2015, 10:42   #5
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

просто никогда до этого не работал с двойными словами
kucher69 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод двойного пересчета для диф.уравнений Маруся171996 Помощь студентам 6 27.10.2014 08:59
Вывод найденного слова на Мемо(Делфи 7) и стирать при поиски нового слова hasanovaaygerim Помощь студентам 0 20.11.2013 21:50
Циклический сдвиг двойного слова Vistar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 17.03.2011 00:28
вычисление для знаковых и беззнаковых целых чисел!!!! senna_ololo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.06.2010 23:38
Вычисление для знаковых и без знаковых целых чисел в asm. kup9 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 06.06.2010 18:21