Приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9 - Assembler
Формулировка задачи:
Решение задачи: «Приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9»
.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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д