Вывод знакового числа размером в 4 байта - Assembler

Узнай цену своей работы

Формулировка задачи:

чёт разбирался, но не разобрался до конца как же вывести двойное слово! есть код для вывода БЕЗ ЗНАКОВОГО числа размером в 4 байта Чё добавить для полноценного вывода ЗНАКОВОГО числа
@:      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

Решение задачи: «Вывод знакового числа размером в 4 байта»

textual
Листинг программы
            mov     dx, 8765h
            mov     ax, 4321h
            test    dh, 80h
            jz go0
            push    dx
            push    ax
            mov     al, '-'
            int     29h
            pop     bx
            pop     cx
            xor     ax, ax
            mov     dx, ax
            sub     ax, bx
            sbb     dx, cx
    go0:mov     bx, 000Ah
            xor     cx, cx
    go1: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     go1
            test    ax, ax
            jnz     go1
    go2:pop     ax
            add     al, 30h
            int     29h
            loop    go2
 
            mov ah,8    
            int 21h
            mov ah, 4ch 
        int 21h

Объяснение кода листинга программы

Вывод знакового числа размером в 4 байта (4321h): — Переменная dx содержит число 8765h. — Переменная ax содержит число 4321h. — Выполняется тест на четность числа в dx (80h). Если число четное, то выполняется команда go0. — Если число нечетное, то выполняется команда go1. — Переменная si содержит значение ax. — Переменная ax содержит значение dx. — Выполняется деление ax на bx. Результат сохраняется в dx:ax. — Переменная si заменяется на ax. — Выполняется деление dx:ax на bx. Результат сохраняется в dx:ax. — Выполняется команда go2, пока значение dx:ax не станет однозначным числом. — Выводится сообщение с числом 4321h. — Выполняется команда int 21h, чтобы завершить работу программы. — Выводится сообщение с числом 4321h.

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы