Приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9 - Assembler

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

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

Выяснить, какие цифры (по одной справа и слева) надо приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9. Желательно написать через model tiny.

Решение задачи: «Приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9»

textual
Листинг программы
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        CrLf            db      0Dh, 0Ah, '$'
        A               dw      1022            ;A
        A10             dw      0, 0            ;A*10
        R               dw      0
        L               dw      0
        Temp            dw      0, 0
        msgNoSolution   db      'No solution', '$'
        msgSolution     db      'Solution: '
        charL           db      '0'
                        db      '1022'
        charR           db      '0'
                        db      '$'
start:
        ;программа
        mov     ax,     [A]     ;A10=A*10
        mov     bx,     10
        mul     bx
        mov     [A10],  ax
        mov     [A10+2],dx
 
        mov     si,     0               ;i=0
        ForI:
                mov     ax,     si      ;(dx:ax)=i*100000
                mov     bx,     1000
                mul     bx
                mov     bx,     100
                mul     bx
 
                add     ax,     [A10]   ;Temp=i*100000+A10
                adc     dx,     [A10+2]
                mov     [Temp], ax
                mov     [Temp+2],dx
 
                mov     di,     0       ;j=0
                ForJ:
                        ;вычисление проверяемого числа
                        mov     ax,     [Temp+2]        ;(ax:bx)=Temp+j
                        mov     bx,     [Temp]
 
                        add     bx,     di
                        adc     ax,     0
                        ;проверка его делимости на 7, 8 и 9
                        ;каскадное деление числа на 7*8*9
                        mov     cx,     7*8*9
                        mov     dx,     0
                        div     cx
                        mov     ax,     bx
                        div     cx
                        or      dx,     dx
                        jnz     NextJ
                        ;Найден результат
                        mov     [L],    si
                        mov     [R],    di
                        jmp     Break
 
 
 
                NextJ:
                        inc     di
                cmp     di,     9
                jbe     ForJ
 
                inc     si
        cmp     si,     9
        jbe     ForI
Break:
        ;если решение найдено, то dx=0
        or      dx,     dx
        jnz     NoSolution
        mov     ax,     [L]
        add     al,     '0'
        mov     [charL],al
        mov     ax,     [R]
        add     al,     '0'
        mov     [charR],al
        mov     ah,     09h
        lea     dx,     [msgSolution]
        int     21h
        jmp     Finish
NoSolution:
        mov     ah,     09h
        lea     dx,     msgNoSolution
        int     21h
 
Finish:
        int     20h
main    endp
 
end     main

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

.model tiny .code org 100h main: jmp start ; Данные CrLf db 0Dh, 0Ah, '$' A dw 1022 A10 dw 0, 0 R dw 0 L dw 0 Temp dw 0, 0 msgNoSolution db 'No solution', '$' msgSolution db 'Solution: ' charL db '0' charR db '0' '$' start: mov ax, [A] mov bx, 10 mul bx mov [A10], ax mov [A10+2], dx mov si, 0 ForI: mov ax, si mov bx, 100000 mul bx mov bx, 100 mul bx add ax, [A10] adc dx, [A10+2] mov [Temp], ax mov [Temp+2], dx mov di, 0 ForJ: mov ax, [Temp+2] mov bx, [Temp] add bx, di adc ax, 0 mov cx, 789 mov dx, 0 div cx mov ax, bx div cx or dx, dx jnz NextJ NextJ: inc di cmp di, 9 jbe ForJ inc si cmp si, 9 jbe ForI Break: or dx, dx jnz NoSolution mov ax, [L] add al, '0' mov [charL], al mov ax, [R] add al, '0' mov [charR], al mov ah, 09h lea dx, [msgSolution] int 21h jmp Finish NoSolution: mov ah, 09h lea dx, msgNoSolution int 21h Finish: int 20h main endp end main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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